问题
从 nosql 文档数据库开始,我发现了很多新的可能性,但是,我看到了一些陷阱,我想知道如何处理它们。
假设我有一个产品,这个产品可以在很多地区销售。每个区域都有一个负责人(可以访问 CMS)。每个负责人都会相应地修改产品的区域法律和规则。
由于在关系数据库中不支持加入功能,因此文档的设计方式应包含构建选择语句和选择结果所需的所有信息,以避免往返数据库。
所以我的第一个想法是设计一个或多或少遵循这种结构的文档:
{
type : "product",
id : "product_id",
title : "title",
allowedAge : 12,
regions : {
'TX' : {
title : "overriden title",
allowedAge : 13
},
'FL' : {
title : "still another title"
}
}
}
但我的印象是,这种方法会在更新文档时产生冲突。假设我们有很多用户通过 CMS 更新大量文档。当更新同一个文档时,最后一次更新会覆盖之前所做的更新,即使用户也只能修改该文档的片段(在这种情况下,负责人应该只能修改区域数据)。
如何处理这种情况?
我想到的一种可能的解决方案是部分文档更新。正面:减少来自不同操作的数据覆盖,负面:如果对文档而不是此类片段进行锁定,则会失去乐观锁定功能。
有没有另一种方法来解决这个问题?