【问题标题】:MongoDB synchronize Development and Production databasesMongoDB同步开发和生产数据库
【发布时间】:2013-08-01 15:20:27
【问题描述】:

我们有一个包含对象集合的开发服务器。 这些对象的实际积累是一个持续的过程,它在这个本地的开发服务器上运行一个标签、验证等整个过程。 一旦这些对象准备好生产,它们就会被添加到生产数据库中,从那时起,生产数据库将在其计算中使用它们。

我正在寻找一种方法来简单地将增量(新对象)添加到生产数据库中,同时将所有其他集合和旧对象保留在同一个集合中。 到目前为止,我们使用的是 MySql,所以这个过程只涉及运行 DB 结构和数据同步(为此我们使用了 Navicat)。 我们现在正在迁移到 MongoDB,所以这个过程有点棘手。

我对此进行了调查,我认为以下解决方案不符合我的需求:

  1. 使用mongodump then mongorestore 转储开发数据库并将其加载到生产数据库中
  2. 运行 db.copyDatabase - 实际上将生产数据库替换为开发数据库的副本。

这两种解决方案都有问题,因为它们实际上取代了生产数据库,而我只想更新现有集合中的对象。 另外,Dev => Production 不适合主从拓扑。

我能想到的最好的事情是:

  1. 将开发数据库复制到生产实例上的“开发”数据库中。
  2. 将集合从这个开发数据库复制到实际的生产数据库,并添加一个谓词,我将只添加生产数据库中不存在的对象,类似于this solution

我想知道是否有人有更好的解决方案?

如果没有,是否有人有可以执行此操作的脚本?

【问题讨论】:

    标签: mongodb deployment synchronization


    【解决方案1】:

    您可以使用mongoexport 工具从您的开发数据库中导出单个集合。将它与 --query 选项结合使用,您可以在其中表达谓词。例如${ts : {$gt : previous clone time}}

    然后,使用mongoimport 将您的增量文件导入生产数据库。如果您有两个具有不同_id 值的不同逻辑文档,但表达相同的文档,请使用--upsert--upsertFields

    【讨论】:

      【解决方案2】:

      @Orid,感谢您的回答,很抱歉回复晚了。

      经过大量研究和一些试错后,我决定使用问题中所述的解决方案(将测试数据库复制到机器,然后一一复制集合)。 这是因为我在这里使用的数据是静态数据,没有真正的理由需要时间戳。 另外,我决定放弃“仅更新”的要求,所以现在我使用 mongorestore 和 --drop

      我用这个脚本来做这一切:

      1. shell 脚本文件:

      rm -rf dump/;

      mongo copyTestDb.js;
      
      for COLLECTION in <Collections>
      do
      mongodump -d nutrino_copy -c $COLLECTION -o dump
      mongorestore -d nutrino -c ${COLLECTION} --drop dump/nutrino_copy/${COLLECTION}.bson
      done
      
      1. js脚本文件:

        db.copyDatabase("&lt;dbName&gt;","&lt;dbName_Copy&gt;","&lt;testMachineUrl&gt;")

      你认为我应该使用 MongoImport 而不是 MongoRestore 吗?

      【讨论】:

        【解决方案3】:

        查看mongo-sync


        这是我为自己编写的脚本,当时我不得不不断地将本地 MongoDB 数据库复制到我的生产数据库中或从我的生产数据库中复制出来(我知道这很愚蠢)。

        将数据库详细信息放入config.yml 后,您可以使用两个简单的命令开始同步:

        ./mongo-sync push       # Push DB to Remote
        ./mongo-sync pull       # Pull DB to Local
        

        如果您在某个项目中使用它,最好将config.yml 添加到.gitignore


        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多