Mongodb 使用NoSQL开发到生产更新

Mongodb 使用NoSQL开发到生产更新,mongodb,version-control,development-environment,nosql,Mongodb,Version Control,Development Environment,Nosql,我已经使用MongoDB大约一年了,但是还没有达到它的潜力 我一直在开发新的软件,除了我自己,任何人都看不到。我充分享受了数据库的灵活性,并对数据进行了动态的重大结构更改 现在我有了生产服务器和3台开发服务器,我在更改数据结构和同步数据结构方面遇到了一个真正的问题 理论上,开发服务器应该始终具有来自生产的最新数据。在结构化数据库中,如果我重命名某个对象,我可以运行一个比较工具,并在拉取之后在生产中进行相应的更改。在MongoDB中,这可能会变得非常困难。。从一个文档到另一个文档可能有数百个更改,

我已经使用MongoDB大约一年了,但是还没有达到它的潜力

我一直在开发新的软件,除了我自己,任何人都看不到。我充分享受了数据库的灵活性,并对数据进行了动态的重大结构更改

现在我有了生产服务器和3台开发服务器,我在更改数据结构和同步数据结构方面遇到了一个真正的问题

理论上,开发服务器应该始终具有来自生产的最新数据。在结构化数据库中,如果我重命名某个对象,我可以运行一个比较工具,并在拉取之后在生产中进行相应的更改。在MongoDB中,这可能会变得非常困难。。从一个文档到另一个文档可能有数百个更改,更不用说从一个数据库到另一个数据库了

我一直在查看我的
~/.dbshell
文件,以了解我所做的更改,但是程序本身所做的更改又如何呢?配置数据库更改

是否有工具或程序使这变得更容易

我花了好几个小时在谷歌上研究别人是怎么做的。我遇到过Mongez,但它比我需要的更手动和乏味。在过去,我只是在git目录中执行
mongodump
mongorestore
来传输数据,但是这些快照太死板了。我读了一些关于将新数据从生产转移到开发的博客文章,但没有关于在生产中更新开发文档的内容。我可以写一个比较脚本,但我觉得这是在重新发明轮子。一定有更好的办法


TL;DR:在不同环境之间,有哪些方法可以对NoSQL数据、新条目和更改的数据进行版本设置

在管理几台生产Mongo机器大约一年的时间里,我也遇到过类似的问题/经历

两条快速建议:

  • WiredPairie是对的。对文档进行版本设置,这将允许您以随意/轻松的方式进行迁移。我希望我们事先就这么做了。我最大的遗憾之一

  • 我们使用Groovy进行连接和模式/数据更改,我很喜欢它。该语言易于学习,并且与JSON配合使用效果很好。我的做法是备份我要操作的集合,在dev中编写脚本,运行它们,如果我搞砸了,恢复备份的集合。迭代直到我得到完美的脚本,然后在生产中重复


  • 我是否正确理解了这一点:您希望将MongoDB文档从一种数据格式惰性地迁移到另一种数据格式?为什么要这样做,也就是说,为什么不运行一个脚本,像处理关系数据库一样一次性迁移整个数据库?(并不是说不可能,只是想了解原因)我希望定期高效地迁移文档。在开发中添加功能后,我希望在生产中将新的数据字段复制到相应的_id。我不能只是将dev转储到生产环境中,因为这将删除可能出现的新用户帖子和条目。我想我可以写一个脚本来检查这些事件,但我只是先检查是否还有其他事情。版本文档。对于每个集合,维护可以通过一系列转换将文档升级到当前版本的代码。您可以按需运行它,并作为后台工作人员浏览每个文档。第二,提前进行设计,以便将来尽量减少这种情况。我只保留代码,以便在必要时加载旧格式的文档(很少是这样),但总是以最新的格式保存它们。我基本上用处理旧文件格式的方法来处理数据库中的旧文档。保持向下读取兼容性,但始终以最新版本的格式写入。