Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 文档数据库:数据模型迁移_Mongodb_Ravendb_Nosql - Fatal编程技术网

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系统上增加额外的负载