mongoDB多个实例或多个数据库

时间:2016-11-29 09:44:49

标签: node.js mongodb docker docker-compose

我选择使用带有node-js和mongoDB的docker来制作游戏,并将我的所有游戏部分(战斗,聊天,资源等)设置到不同的服务器中,这样每个部分都有自己的进程,例如我的资源服务器将运行很多,因为它将每秒计算每个用户的资源,并将处理来自其他服务器的请求,例如,如果用户有足够的资源来构建建筑物或者玩家将失去多少资源如果受到攻击等

对于我的alpha和beta版本,我打算运行一个服务器,它将运行我游戏的所有部分,但我现在正在这样做,每个部分都有自己的mongodb实例,所以我有resourcesDB,mainDB(用户信息,登录信息和东西),所有实例都没有很多集合,例如resourcesDB只有2个集合,资源集合,每个用户将拥有1个文档,其中包含与资源相关的内容,以及日志集合这将存储所有用户的使用(建立升级,战斗丢失等)

我已经阅读了相同服务器上的多个实例,并且他们都说它不是最好的方法,因为它会对我的性能产生影响,将来我计划单独的所有部分如果需要,每个部分都有自己的服务器和数据库服务器。

  1. 我是否可以构建1个实例并在数据库级别上将其分开?这意味着我将不得不从多个服务器连接到同一个实例,资源服务器将每秒更新所有用户的资源数量,将其与战斗服务器相结合,战斗服务器将更新数据库中的部队状态以及更多正在进行的每场战争在,我还将有聊天数据库,将与每个私人消息或聊天消息更新,它会导致任何问题吗?或者只有当我连接到单个数据库并在集合级别将其分开时才会出现问题?

  2. 为什么我不应该继续创建多个实例?我读到如果在同一台服务器上使用多个实例,配置文件可能有问题,但我假设docker处理该部分。

  3. 更新 - 我在这里找到了一个很好的答案:https://dba.stackexchange.com/questions/156811/mongodb-in-micro-services-structure/156984#156984

1 个答案:

答案 0 :(得分:2)

为您的应用程序使用微服务架构是个好主意,但我没有看到分离数据库的充分理由。 MongoDB可以为您处理它(Sharding)。当您写入集合B时,MongoDB也不会阻止写入集合A.如果您将应用程序分离到多个数据库,则很难进行备份并维护应用程序。

您可以在此处阅读MongoDB的并发选项,并了解MongoDB如何处理集合级锁定。 https://docs.mongodb.com/manual/faq/concurrency/