2013-06-25 38 views
0

我一直在使用MongoDB大约一年,但是没有接近它的潜力。使用NoSQL开发到产品更新

我一直在开发新的软件,出任何人的眼睛,除了我自己的,我很享受的数据库,以最充分的灵活性和我做对飞行数据的重要的结构性变化。

现在我在一个地步,我有生产服务器(S)和3个开发服务器,我在不断变化的数据结构和它们同步了一个真正的问题。

从理论上讲,开发服务器应始终拥有最新的生产数据。在一个结构化的数据库中,如果我重新命名了一些东西,我可以运行一个比较工具,并在拉出后进行相应的生产更改。在MongoDB中,这可能会变得非常困难......从文档到文档可能会有数百次更改,而从数据库到数据库的次数会更少。

我一直在评论我的~/.dbshell文件,以便让我感受到我所做的更改,但是在程序中对其自身做出的更改如何?配置数据库更改?

是否有工具或程序可以使这更容易?

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

TL; DR:有什么办法来版NoSQL数据,新项目和已更改的数据,环境之间?

+0

我的理解是否正确:您是否想要将MongoDB文档从一种数据格式延迟迁移到另一种数据格式?为什么你要这样做,即为什么你不运行一个脚本来迁移整个数据库,就像在关系数据库中一样? (并不是说这不可能,只是想明白为什么) – mnemosyn

+0

我希望有效地定期迁移文档。在开发中添加功能之后,我希望将新数据字段复制到生产中相应的_id。我不能将开发人员转储到生产环境中,因为这会删除可能发生的新用户帖子和条目。我想我可以写一个脚本来检查这些事件,但我只是检查是否有其他东西在那里。 –

+1

版本文件。对于每个集合维护代码,可以通过一系列转换将文档升级到当前版本。您可以根据需要运行它,并作为后台工作人员扫描每个文档。其次,做前期设计,以便将来尽量减少。 – WiredPrairie

回答

1

我有一个类似的问题/经验,同时管理一些生产Mongo机器大约一年。

两个快速条建议:

  1. WiredPrairie是正确的。版本的文件,这将允许你以轻松/轻松的方式迁移。我希望我们已经做到了。我最大的遗憾之一。

  2. 我们使用Groovy的连接,并尽我们的架构/数据变化,我喜欢它。该语言易于学习,并且与JSON一起使用效果很好。我的做法是备份我将操作的集合,在dev中编写脚本,运行它们,如果我搞砸了,请还原备份的集合。迭代直到我完成脚本,然后重复制作。