从nosql文档数据库开始我发现了许多新的可能性,但是,我看到了一些陷阱,我想知道如何处理它们。
假设我有产品,并且此产品可以在许多地区销售。 负责每个区域(可访问CMS)。每个负责相应地修改产品区域法律和规则。
由于 Join 功能不受支持,因为我们在关系数据库上知道它,文档的设计应该包含构建我们的选择语句和选择结果所需的所有信息 避免往返到数据库。
所以我的第一个问题是设计一个或多或少遵循这种结构的文档:
{
type : "product",
id : "product_id",
title : "title",
allowedAge : 12,
regions : {
'TX' : {
title : "overriden title",
allowedAge : 13
},
'FL' : {
title : "still another title"
}
}
}
但我的印象是这种方法会在更新文档时产生冲突。假设我们有很多用户通过CMS更新大量文档。更新同一文档时,上次更新会覆盖之前完成的更新,即使用户只能修改此文档的片段(在这种情况下,负责人应该只能修改区域数据)。
我想到的一个可能的解决方案是部分文档更新。 肯定:减少来自不同操作的数据覆盖,否定:会失去乐观锁定功能,因为如果对文档进行锁定而不是这样的片段,则会失去锁定功能。
是否有另一种解决问题的方法?
答案 0 :(得分:5)
在这种情况下,您可以使用3种解决方案:
答案 1 :(得分:1)
如果您没有使用Couchbase(从您的问题中不清楚它是否是一般的或特定的) - 请查看MongoDB。它支持文档的部分更新以及其他原子操作(如增量和数组操作),因此它可以更好地适应您的用例(在mongo上检查可能的更新操作 - http://docs.mongodb.org/manual/core/update/)