2012-11-30 37 views
4

与我们大多数人一样,我来自关系数据库世界, ,我目前正在研究文档数据库世界的可能性。 我的一个担心是随着时间的推移处理数据模型中的更改(添加新属性,重命名属性,添加关系,...)。文档数据库:数据模型迁移

在关系数据库中,这通常是如下处理:

  • 写数据库迁移
    - >修改的数据库架构
    - >修正了现有的行数据(通常包含一些业务逻辑)
  • 修改代码(ORM更新,..)


当使用文档数据库时,我感觉对数据模型 的更改更容易;没有必要更新数据库模式,大多数情况下只是添加一个属性,而且一切都“正常”。 我不知道有团队管理这种在现实生活中的迁移,企业项目与文件数据库:

  • 是否有用于制作存储在文档DB更改类型严格的政策? 例如,对这种类型的每个更改都需要迁移以更新 现有文档吗?
  • 因此,数据模型(存储在文档数据库中的类型)和业务模型之间是否存在明显的分离?

感谢您的时间,
公园

回答

1

有,您可以采取在MongoDB的“模式”的修改三种通用战略。我已经看到所有三个工作都很好;你会使用哪一个取决于你的特定用例。

首先:您可以简单地向新文档添加一个新字段,然后编写代码以处理该字段不存在的情况。例如,您可以将'address'字段添加到您的“用户”文档中,但您必须编写客户端代码来处理该字段不存在的情况。

其次:您可以编写代码来查看现有文档&当它看到“旧式”文档时进行更新。例如,您可以使用代码检查“用户”文档中是否存在“name”字段。如果找到该字段,则将其分割为“first_name”和“sur_name”字段,$unset该文档中的“name”字段,以及$set新的“first_name”和“sur_name”字段到它们的计算值。

第三:您可以批量更新集合中的所有文档以使用新的模式。你可以编写与上面相同的代码,但不是在应用程序读取文档时懒惰地应用它,而是将其应用于集合中的所有文档。

请注意,最后一个策略会对性能产生影响:如果您在很多文档中进行了一段时间未访问的页面访问,则会给​​MongoDB系统带来额外的负载。