用于定义和处理实时体育赛事的数据库建模
Database modeling for defining and processing realtime sports events
我正在尝试实时存储和处理体育赛事,并希望创建一个最佳系统,因为这将每秒处理 100 多个事件。系统将在体育比赛前存储事件,然后实时或在 half/session/match.
结束时处理它们
在我的系统中,每个 Event
被分解成以下组件
WHO
事件与谁有关。一个团队,球员,重新自由,
观众等
WHAT
事件是什么(进球、传球、扑救等)
WHEN
活动时间详情
HOWMUCH
事件值是如何定义的
TYPE
定义何时应该检查 - INDIVIDUAL
:实时,
AGGREGATE
: WHEN
结束
这里有一些关于足球的例子
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"
}
所有 AGGREGATE
事件将在匹配状态更改时进行检查。例如第二半---> MATCH_END
将实时检查所有 INDIVIDUAL
事件(一旦收到新事件)。这适用于网络挂钩。
例如第58分钟进球。
系统收到的事件 - {"type":"goal","player":"_henderson_", "minute":58}
系统现在将 运行 a "find" where ("type" == "INDIVIDUAL" && "what" == "__GOAL")
并比较找到的所有事件。
稍后,我想提供一个管理功能,用于编写可以解析为这种结构的句子。我想知道的是我的工作方向是否正确,或者我是否需要开始以不同的方式思考。
你的选择可能在 Spark 和 Dataflow 之间。这是一个不错的 white paper comparing the two,它实际上使用了与您的用例相似的用例(大型手机游戏用户实时评分)。祝你好运,看起来是个很酷的项目(看起来像在线博彩实施?)。
我正在尝试实时存储和处理体育赛事,并希望创建一个最佳系统,因为这将每秒处理 100 多个事件。系统将在体育比赛前存储事件,然后实时或在 half/session/match.
结束时处理它们在我的系统中,每个 Event
被分解成以下组件
WHO
事件与谁有关。一个团队,球员,重新自由, 观众等WHAT
事件是什么(进球、传球、扑救等)WHEN
活动时间详情HOWMUCH
事件值是如何定义的TYPE
定义何时应该检查 -INDIVIDUAL
:实时,AGGREGATE
:WHEN
结束
这里有一些关于足球的例子
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"
}
所有 AGGREGATE
事件将在匹配状态更改时进行检查。例如第二半---> MATCH_END
将实时检查所有 INDIVIDUAL
事件(一旦收到新事件)。这适用于网络挂钩。
例如第58分钟进球。
系统收到的事件 - {"type":"goal","player":"_henderson_", "minute":58}
系统现在将 运行 a "find" where ("type" == "INDIVIDUAL" && "what" == "__GOAL")
并比较找到的所有事件。
稍后,我想提供一个管理功能,用于编写可以解析为这种结构的句子。我想知道的是我的工作方向是否正确,或者我是否需要开始以不同的方式思考。
你的选择可能在 Spark 和 Dataflow 之间。这是一个不错的 white paper comparing the two,它实际上使用了与您的用例相似的用例(大型手机游戏用户实时评分)。祝你好运,看起来是个很酷的项目(看起来像在线博彩实施?)。