是否有任何用于NoSQL数据库的模式迁移的工具?

时间:2009-12-25 11:23:30

标签: python mongodb couchdb database nosql

我正在寻找一种方法来自动化MongoDB或CouchDB等数据库的模式迁移。

最好,这个仪器应该用python编写,但任何其他语言都可以。

4 个答案:

答案 0 :(得分:10)

由于nosql数据库可能包含大量数据,因此无法在常规rdbms中将其迁移。实际上你不能为rdbms以及你的数据通过一些大小阈值。将您的网站暂停一天以将字段添加到现有表是不切实际的,因此对于rdbms,您最终会做一些难看的补丁,例如为字段添加新表并进行连接以获取数据。 在nosql世界中,你可以做几件事。

  • 正如其他人所建议的那样,您可以编写代码,以便它可以处理可能模式的不同“版本”。这看起来通常比较简单。许多类型的架构更改对于编码来说都是微不足道的。例如,如果要向架构添加新字段,只需将其添加到所有新记录中,并且它将在所有旧记录中为空(您不会得到“字段不存在”错误或任何内容;)。如果您需要旧记录中字段的“默认”值,则在代码中过于简单。
  • 另一个选项,实际上唯一合理的选项,包括字段重命名和结构更改等非平凡模式更改,是将schema_version存储在EACH记录中,并将代码从任何版本迁移到下一个 READ 的。即,如果您当前的架构版本为10并且您从数据库中读取了版本为7的记录,则您的数据库层应调用migrate_8,migrate_9和migrate_10。这样,访问的数据将逐渐迁移到新版本。如果没有访问,那么谁在乎它是哪个版本;)

答案 1 :(得分:2)

这些数据库的一个假定好处是它们是无模式的,因此不需要模式迁移工具。相反,您编写数据处理代码来处理存储在数据库中的各种数据。

答案 2 :(得分:1)

如果您的数据足够大,您可能会发现您无法 EVER 迁移数据,或者这样做是不利的。这意味着当您进行架构更改时,代码需要继续向后兼容旧格式。

当然,如果您的数据“年龄”并最终到期,这可以为您进行架构迁移 - 只需更改新添加数据的格式,然后等待旧格式的所有数据到期 - 然后您可以退出向后兼容性代码。

答案 3 :(得分:0)

当一个项目需要关于NoSQL数据库的模式迁移时,我认为您仍在考虑以关系数据库方式,但使用NoSQL数据库。

如果有人要开始使用NoSQL数据库,你需要意识到RDBMS(即MySQL)的大多数“规则”也需要走出窗口。像严格的模式,规范化,使用对象之间的许多关系。 NoSQL存在以解决不需要RDBMS提供的所有额外“功能”的问题。

我建议您以不期望或需要NoSQL数据库的硬架构的方式编写代码 - 您应该支持旧架构并在访问时动态转换文档记录,如果您真的想要在该记录上有更多的架构字段。

请记住,与使用RDBMS时相比,NoSQL存储在思考和设计方面的效果最佳