gpt4 book ai didi

mongodb - 采用 NOSQL 方法时数据完整性的重要性?

转载 作者:IT老高 更新时间:2023-10-28 13:27:36 25 4
gpt4 key购买 nike

我几乎完成了一个大型应用程序的工作;几天前,我看到了 Martin Fowler 关于“NOSQL”的演讲。之后我意识到我一直在使用 Mongo 作为关系数据库,所以我决定重构我的模式。但是,我从一个来自“RDBMS”世界的人那里听说了很多关于诚信的事情。我真的明白它的重要性,那么数据完整性可以在“NOSQL”引擎中实现吗?

更明确地说,这里是一个简单的例子:

假设我的系统中有一个 productinventory 实体,

在我的 inventory 中,我引用 product_id 来定义产品,

目前我的 mongo 集合中的 inventory 看起来像这样
{'inventory' :{'product_id' : '1', 'count' : 15}}

我可以像这样在我的系统中存储 inventory:
{'inventory' :{'product' : {'id' : 1, 'name' : 'book'}, 'count' : 15}}
并且仍然实现数据完整性?如果我在 product 实体中更改产品 _id : 1 的名称,那么会发生什么 - 我将循环更新所有 inventory 集合?

最佳答案

MongoDB 没有任何确保一致性的内置功能(唯一异常(exception):唯一性约束可以通过唯一索引强制执行)。将不向数据库写入不一致数据的责任委托(delegate)给应用程序。

当您的数据库架构中存在冗余时(在 MongoDB 中不像在关系数据库中那样致命),那么您的应用程序需要确保所有具有重复数据点的文档都已更新。因此,是的,当您更改产品名称并且该产品名称包含在多个文档中时,您需要全部更新它们。

但这并不一定意味着您需要一个循环。您可能可以使用带有 {multi:true} 选项的更新语句来执行此操作,以一次更新集合的所有文档中的产品名称。

未经测试的示例:

 db.collection.update(
{
"inventory.product.id": "1"
},
{
$set: { "inventory.product.name": "New Product Name" }
},
{
multi: true
}
);

请记住,此示例假定您有嵌套对象,而不是任何嵌套对象数组。当您有数组并且只想更新那些匹配条件的数组条目时,您需要使用 the $ operator .

关于mongodb - 采用 NOSQL 方法时数据完整性的重要性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28857059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com