我正在寻找一种为 MongoDB 或 CouchDB 等数据库自动进行模式迁移的方法。
最好,这个工具应该用 python 编写,但任何其他语言都可以。
由于 nosql 数据库可以包含大量数据,因此您无法在常规 rdbms 中迁移它。实际上,一旦您的数据超过某个大小阈值,您就无法为 rdbms 执行此操作。让您的网站停工一天以将字段添加到现有表是不切实际的,因此使用 rdbms 您最终会做丑陋的补丁,例如仅为该字段添加新表并进行连接以获取数据。在 nosql 世界中,您可以做几件事。
如果您的数据足够大,您可能会发现您永远无法迁移数据,或者这样做没有好处。这意味着当您进行架构更改时,代码需要永远向后兼容旧格式。
当然,如果您的数据“老化”并最终过期,这可以为您进行架构迁移 - 只需更改新添加数据的格式,然后等待旧格式的所有数据过期 - 然后您可以取消向后兼容性代码。
这些数据库的假定好处之一是它们是无模式的,因此不需要模式迁移工具。相反,您编写数据处理代码来处理存储在 db 中的各种数据。
当一个项目需要对 NoSQL 数据库进行模式迁移时,我认为您仍在以关系数据库的方式思考,但使用的是 NoSQL 数据库。
如果有人要开始使用 NoSQL 数据库,您需要意识到 RDBMS(即 MySQL)的大部分“规则”也需要被排除在外。诸如严格模式、规范化、使用对象之间的许多关系之类的事情。NoSQL 的存在是为了解决不需要 RDBMS 提供的所有额外“功能”的问题。
我会敦促您以不期望或不需要 NoSQL 数据库的硬架构的方式编写代码 - 如果您真的想要更多架构,您应该支持旧架构并在访问时动态转换文档记录该记录上的字段。
请记住,与使用 RDBMS 相比,当您以不同的方式思考和设计时,NoSQL 存储效果最佳