Próbuję przechowywać i przetwarzać wydarzenia sportowe w czasie rzeczywistym i chcę stworzyć optymalny system, ponieważ będzie to przetwarzało 100 s zdarzeń na sekundę. System będzie przechowywać zdarzenia przed meczem sportowym, a następnie przetwarzać je w czasie rzeczywistym lub na koniec pół/sesji/meczu.Modelowanie baz danych do definiowania i przetwarzania wydarzeń sportowych w czasie rzeczywistym
W moim systemie, każdy Event
jest w podziale na następujące komponenty
WHO
kogo jest zdarzenie związane. Zespół, odtwarzacz, refree, widzów itpWHAT
co jest zdarzeniem (bramka, pass, zapisać, etc)WHEN
szczegóły czasie zdarzeniaHOWMUCH
jak jest wartość zdarzeń określonychTYPE
określa, kiedy należy sprawdzić -INDIVIDUAL
: w czasie rzeczywistym,AGGREGATE
: koniecWHEN
Oto niektóre exampl es piłkarskie
1. No goals scored in 2nd Half
TEAM: *, WHAT: __GOAL, WHEN: __HALF_2, HOWMUCH: 0, TYPE: AGGREGATE
{
"who" : {"team":*},
"what" : "__GOAL",
"when" : "__HALF_2"
"howMuch" : {"value":0, "type" :"exact"},
"type" : "AGGREGATE"
}
2. Either keeper to complete 3 or more punches
PLAYER: (p1 v p2), WHAT: __PUNCH, WHEN: __MATCH, HOWMUCH: 3+, TYPE: INDIVIDUAL
{
"who" : {"player":{"or":["p1","p2"]}},
"what" : "__PUNCH",
"when" : "__MATCH"
"howMuch" : {"value":2, "type":"more"},
"type" : "AGGREGATE"
}
3. Coutinho to score a goal before 65th min
PLAYER: p3, WHAT: __GOAL, WHEN: <65, TYPE: INDIVIDUAL
{
"who" : {"player":"p3"},
"what" : "__GOAL",
"when" : {"value" : 65, "type" : "before"}
"type" : "INDIVIDUAL"
}
4. Henderson to play highest number of passes
PLAYER : p4, WHAT: __PASS, WHEN: __MATCH, HOWMUCH: __MAX, TYPE: AGGREGATE
{
"who" : {"player":"p4"},
"what" : "__PASS",
"when" : "__MATCH",
"howMuch": "__MAX" // this is a key word which will be handled accordingly on the application
"type" : "AGGREGATE"
}
5. Liverpool to have more possession than everton
TEAM: (t1 > t2), WHAT: __POSSESSION, WHEN: __MATCH, TYPE: AGGREGATE
{
"who" : {"team":{"compare":["t1","t2"],"winner":"t2"}},
"what" : "__POSSESSION",
"when" : "__MATCH"
"type" : "AGGREGATE"
}
Wszystkie zdarzenia AGGREGATE
będą sprawdzane, gdy stan zmienia wynik. na przykład II połowa ---> MATCH_END
Wszystkie zdarzenia będą sprawdzane w czasie rzeczywistym (od razu po otrzymaniu nowego wydarzenia). Działa to na hak internetowy.
E.g. Cel zostaje zdobyty w 58 minucie. zdarzenia odbierane przez układ - {"type":"goal","player":"_henderson_", "minute":58}
System będzie teraz uruchomić „znaleźć” gdzie ("type" == "INDIVIDUAL" && "what" == "__GOAL")
i porównać wszystkie zdarzenia znalezione.
Później chciałbym udostępnić funkcje administracyjne do pisania zdań, które można analizować w tej strukturze. Chciałbym wiedzieć, czy pracuję we właściwym kierunku, czy też muszę zacząć myśleć inaczej.
Czy istnieje powód, dla którego wysyłasz zbiorcze wydarzenia w czasie rzeczywistym? Czy nie byłoby bardziej wydajne wysyłanie pojedynczych zdarzeń i wykonywanie agregacji na serwerze? – RohanC
@RohanC - zdarzenia są dostarczane przez zewnętrzny interfejs API. To strumień wydarzeń rozgrywających się w meczu. –
1. Nie używaj tego samego słowa dla różnych pojęć "zdarzenia" w sensie zarejestrowanej rzeczy interesującej w porównaniu z "zdarzeniem" w znaczeniu surowego wprowadzania w czasie rzeczywistym. 2. Najpierw dokonaj bezpośredniego dopasowania projektu, następnie rozszerz/zmodyfikuj ponownie surowe zdarzenia, następnie zarejestrowane zdarzenia, a następnie ponownie zoptymalizuj ocenę tylko niektórych zarejestrowanych zdarzeń na podstawie surowych zdarzeń. 3. "Typ" jest określany na podstawie części (części) aktualnego stanu zarejestrowanego zdarzenia (i kwerendy dla niego) jest funkcją. Oczekuj automatyzacji tego określania na podstawie zapytania, które faktycznie piszesz/generujesz. – philipxy