【问题标题】:Database modeling for defining and processing realtime sports events用于定义和处理实时体育赛事的数据库建模
【发布时间】:2017-05-07 05:18:49
【问题描述】:

我正在尝试实时存储和处理体育赛事,并希望创建一个最佳系统,因为这将每秒处理 100 次赛事。系统将存储体育比赛前的事件,然后实时处理或在半场/会话/比赛结束时进行处理。

在我的系统中,每个Event 都分解为以下组件

  • WHO 与谁相关的事件。一个团队,一个球员,refree, 观众等
  • 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}

系统现在将运行“查找”("type" == "INDIVIDUAL" &amp;&amp; "what" == "__GOAL") 并比较找到的所有事件。

稍后,我想提供一个管理功能来编写可以解析成这种结构的句子。我想知道的是我的工作方向是否正确,或者我是否需要开始以不同的方式思考。

【问题讨论】:

  • 您是否有理由实时发送聚合事件?仅发送单个事件并在服务器上执行聚合不是更有效吗?
  • @RohanC - 事件由外部 API 提供。它们是比赛中发生的一系列事件。
  • 1.不要对注册感兴趣的事物意义上的“事件”和原始实时输入意义上的“事件”的不同概念使用相同的词。 2.首先进行简单的设计重新匹配,然后扩展/修改重新原始事件,然后注册事件,然后在原始事件的基础上重新优化仅某些注册事件的评估。 3. “类型”由注册事件(及其查询)是当前状态的哪个部分确定。期待根据您实际编写/生成的查询自动确定。

标签: database database-design real-time dsl


【解决方案1】:

您的选择可能是在 Spark 和 Dataflow 之间。这是一个很好的white paper comparing the two,它实际上使用了与您类似的用例(大型手机游戏用户实时评分)。祝你好运,这似乎是一个很酷的项目(看起来像是一个在线簿记实现?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-19
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2010-11-25
    • 1970-01-01
    相关资源
    最近更新 更多