Mongodb 文档数据库:数据模型迁移
和我们大多数人一样,我来自关系数据库世界, 我目前正在研究文档数据库世界的可能性。 我关心的一个问题是随着时间的推移如何处理数据模型中的更改(添加新属性、重命名属性、添加关系等等) 在关系数据库中,这通常按以下方式处理:Mongodb 文档数据库:数据模型迁移,mongodb,ravendb,nosql,Mongodb,Ravendb,Nosql,和我们大多数人一样,我来自关系数据库世界, 我目前正在研究文档数据库世界的可能性。 我关心的一个问题是随着时间的推移如何处理数据模型中的更改(添加新属性、重命名属性、添加关系等等) 在关系数据库中,这通常按以下方式处理: 编写数据库迁移 ->修改数据库架构 ->修复现有行的数据(通常包含一些业务逻辑) 修改代码(ORM更新,…) 当使用文档数据库时,我感觉数据模型发生了变化 要容易得多;不需要更新数据库模式,主要是添加一个属性。。一切都“正常运转”。 我想知道团队在现实生活中是如何管理这种
- 编写数据库迁移
->修改数据库架构
->修复现有行的数据(通常包含一些业务逻辑) - 修改代码(ORM更新,…)
当使用文档数据库时,我感觉数据模型发生了变化 要容易得多;不需要更新数据库模式,主要是添加一个属性。。一切都“正常运转”。 我想知道团队在现实生活中是如何管理这种迁移的,企业项目中有文档数据库:
- 对存储在文档数据库中的类型进行更改是否有严格的策略? 例如,对这种类型的每次更改都需要迁移来更新吗 现有文件
- 因此,数据模型(存储在文档数据库中的类型)和业务模型之间是否存在明确的分离
Koen使用RavenDB,您可以通过修补来实现这一点。 见:
并且:对于MongoDB中的“模式”修改,您可以采取三种通用策略。我看到这三种方法都很有效;您将使用哪一个在很大程度上取决于您的特定用例 首先:您可以简单地向新文档添加一个新字段,并编写代码来处理该字段不存在的情况。例如,您可以在“用户”文档中添加一个“
地址”
”字段,但您必须编写客户端代码来处理该字段不存在的情况
第二:您可以编写代码来查看现有文档,并在看到“旧式”文档时进行更新。例如,您可以使用代码检查“用户”文档中是否有“名称”
”字段。如果找到该字段,它会将其拆分为“first\u name
”和“sur\u name
”字段,$unset
该文档中的“name
”字段,以及$set
新的“first\u name
”和“sur\u name
”字段的计算值
第三:您可以批量更新集合中的所有文档以使用新模式。您可以编写与上面相同的代码,但是在应用程序读取文档时,您可以将其应用于集合中的所有文档,而不是懒洋洋地应用它
请注意,最后一种策略可能会对性能产生影响:如果页面中有很多文档已经有一段时间没有被访问,那么您将在MongoDB系统上增加额外的负载