【问题标题】:Document databases: data model migrations文档数据库:数据模型迁移
【发布时间】:2012-11-18 12:52:52
【问题描述】:

像我们大多数人一样,我来自关系数据库世界, 我目前正在研究文档数据库世界的可能性。 我关心的一个问题是处理数据模型随时间的变化(添加新属性、重命名属性、添加关系......)。

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

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


在使用文档数据库的时候,感觉数据模型发生了变化 容易得多;无需更新数据库模式,主要是添加一个属性,.. 一切都“正常工作”。 我想知道团队如何在现实生活中管理这种迁移,带有文档数据库的企业项目:

  • 对存储在文档数据库中的类型进行更改是否有严格的政策? 例如,对这种类型的每次更改是否都需要迁移才能更新 现有文件?
  • 因此,数据模型(存储在文档 db 中的类型)和业务模型之间是否有明确的区别?

感谢您的宝贵时间,
科恩

【问题讨论】:

    标签: mongodb ravendb nosql


    【解决方案1】:
    【解决方案2】:

    对于 MongoDB 中的“模式”修改,您可以采用三种通用策略。我已经看到这三个都运行良好。您将使用哪一个在很大程度上取决于您的特定用例。

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

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

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

    请注意,最后一种策略可能会对性能产生影响:如果您分页了很多暂时未访问的文档,则会给您的 MongoDB 系统带来额外的负载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 2015-07-10
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多