如何在多人游戏中处理项目数据?

时间:2017-06-20 12:41:56

标签: mongodb data-structures

我拥有一款基于聊天的小游戏,可让您拥有物品,与其他人交易,并将其用于各种事物。

目前,我有一个JSON文件,存储与每个项目相关的所有数据,如损坏,准确性,名称,描述,然后在我的应用程序启动时,这些数据都被解析为常量字段。

现在要存储播放器的实际库存,我使用MongoDB数据库,该数据库包含项目名称的字典,作为键和整数,作为它们拥有的项目的数量。因此,只要需要项目信息,就可以使用密钥从常量数据中获取它。

问题是我希望能够添加更多用户特定的东西,这些东西对于每个单独的项目都是可变的,比如可降解性,损坏增加和其他事情。

我将如何处理此问题?我还想知道我目前正在做的事情是否正确。

1 个答案:

答案 0 :(得分:1)

您的基本模型(单独存放的项目,与播放器一起存储的参考)非常来自关系世界。这只适用于mongo,因为你的不同项目的数量足够小,可以将它们保存在内存中,这样你就不必进行多个数据库往返或表连接来收集播放器的所有数据。

当您从项目"模板"过渡时对于项目"实例",由于项目数量增长太大,这可能不再适用。

我想,正常的查询将是"阅读玩家及其所有项目"的内容。然后,您应该将项目与播放器一起存储在所有细节中(带有具体对象的json数组)。在mongo中,这是对一个播放器文档的单个读取调用,因此非常快。

因此:

  • 保留项目集合,以保存模板以创建新项目
  • 将项目的各个副本放入播放器文档中的数组

(如果玩家的物品未超过16 mb的文件大小限制,则应严肃对待此建议。)