基于游戏服务器日志事件的玩家统计信息的MongoDB架构设计?

时间:2011-08-02 08:34:34

标签: database-design mongodb statistics schema

我们有几个游戏服务器根据玩家行为产生事件。我们想保存其中一些事件来构建统计数据;既可以让玩家享受,也可以分析行为。

我们已经决定使用MongoDB有很多原因,主要是性能。但是,我们对架构设计有点兴奋。使用RDBMS数据库太多年了。

无论如何,生成的事件看起来像这样:player1用weapon1杀死了player2。在捕捉这些事件时,我也知道服务器ID,正在运行的地图等。我显然知道现在是什么时间,我可以建立玩家关系来制作团队/团队。

但是,这会在文档模型中看到什么?

我是否只将所有事件放入集合中,然后将我想要在搜索中使用的属性添加为字段?或者使用文档创建层次结构以获得性能优势(?)。 把它全部放在一个“行”中我想这将使查询变得容易,但并不真正感觉到所有优化。将有大量的行,即使MongoDB很快,我也不相信它会处理负载。此外,如果我只是扁平化结构并将所有内容都连续搜索,那么RDBMS数据库中的性能应该非常相等。加上一遍又一遍地存储相同数据的大小开销(用户即)。

1 个答案:

答案 0 :(得分:1)

我会说这取决于您希望如何使用您收集的数据。您的统计数据(几乎)是实时的要求吗?或者是否可以延迟处理?

我想你会想要提取诸如“使用武器y在地图x上发生多少次杀戮?”等统计数据。和很多其他组合。

如果您需要(几乎)实时,我建议在每个统计要求的专用集合中定制文档。因此,对于上面的示例,您可以使用带有地图文档的“地图”集合,其中每个地图都有一个计数器,用于每种武器或类似的东西。 这应该提供非常快速和“实时”的读取。这里的缺点是你的写入性能可能会受到一些影响,因为你必须为每个事件更新多个集合。

如果你可以忍受som延迟处理,那么你想把所有事件都放到一个大的扁平收藏中并不是那么糟糕。写性能真的很好。但是你必须定期运行som map / reduce作业(这将非常慢)并处理你的事件并将统计数据保留在结果集合中。