我们有几个基于玩家动作产生事件的游戏服务器。我们想要保存其中一些事件来建立统计数据;既为了玩家的享受,也为了分析行为。基于游戏服务器日志事件的玩家统计数据的MongoDB模式设计?
我们已经决定MongoDB的原因很多,主要是性能。但是,我们在模式设计方面做了一些努力。使用RDBMS数据库的年限过长了。
无论如何,生成的事件看起来像这样:player1杀死了武器1的玩家2。在捕获这些事件时,我也知道服务器ID,运行的是什么地图等等。我显然知道现在是什么时间,我可以建立玩家关系来建立团队/团队。
但是,这将如何看待文档模型?
我只是把所有的事件放在一个集合中,然后把我们想要在我们的搜索中使用的属性添加为字段?或者创建一个包含文档的层次结构以获得性能优势(?)。 把它放在一个“行”我猜会让它很容易查询,但并没有真正感受到所有的优化。会有TONS行,即使MongoDB速度很快,我不相信它会处理负载。另外,如果我只是将结构扁平化并将所有内容都搜索到一行,那么RDBMS数据库中的性能应该相当平等。加上一次又一次存储相同数据的大小开销(即用户)。
为了缩小“用例”的范围,我将详细介绍一个示例查询。从普通查询下方的答案中抽取一个检验项将是“地图x上有武器y的杀死数量”。然而,有两件事,我最有可能会加上“这个wwwk /月/年”,而且我不会为一个用户做这件事,而是创建一个“在...上击杀次数最多的顶级玩家”列表。添加诸如时间,武器(也可能是武器组,即爆炸物)等“事实”以及与其他玩家的关系 - 只会让我对如何设计模型感到困惑。如果我将所有这些“事实”添加到每个条目中, = bigdb的慢? – Martin