如何在RavenDB中模拟足球比赛统计数据

时间:2012-02-27 16:12:36

标签: data-modeling ravendb

我是RavenDB的新手,我仍然试图找到为当前场景建模数据的最佳方法。这是数据的样子。

Game 
 - Teams
   - Team 1
     - list of players
   - Team 2 
     - list of players
 - Events
   - Event 1
     - type: Pass
     - teamId
     - PlayerId
   - Event 2
     - type: Goal
     - teamId
     - PlayerId

在每场比赛开始时,我们会获得游戏的整体信息(例如,团队,地点等),然后每隔几分钟我们就会获得一份更新的事件列表。 此外,我需要能够查询特定玩家的数据(例如玩家有多少次传递)

我是否将其存储为单个文档?我是否将事件拆分为单独的文档,例如GameEvents?还有第三种情况吗?

3 个答案:

答案 0 :(得分:3)

我不担心它将如何存储在RavenDB中。这就是文档数据库的美妙之处;不要在关系上思考。以面向对象的方式创建域模型(应该创建一个List< Player>属性等),然后根据需要保存实体。

我一直想写博客,关于如何在使用RavenDB时保持我的域模型纯净。我需要发布那个......

**编辑** 我终于发布了这个博客:http://bit.ly/xUsYJK。这显示了Presto在使用RavenDB时如何保持一个纯粹的域模型。

顺便说一下,Daniel Lang有一个关于这个主题的好博客:

http://daniellang.net/how-to-handle-relations-in-ravendb/

我使用Include< T>方法,因为我喜欢让我的域实体以我认为合适的方式相互引用。

Daniel还有一个名为“对你的引用进行反规范化”的部分。有些人更喜欢这种方法。

答案 1 :(得分:1)

将其存储为单个对象 - 您定义的结构非常棒。然后,只需为您将要执行的各种类型的查询定义索引。不必将关系分解为具有关系的表,这使得像Raven这样的文档数据库非常棒 - 非常适合您所描述的场景。

答案 2 :(得分:1)

考虑到游戏过程中会发生多少这样的事件,我相信你肯定希望将它们作为单独的文件。这样,您就不需要在每个事件中加载和更新游戏文档,因为如果文档变得非常大,这也会非常昂贵。

要获取游戏中所有事件的统计信息,我宁愿使用一些索引来收集适当的数据。

相关问题