NoSQL:使用数组的新型关系?

NoSQL: new kind of relationships using Arrays?

我不得不通过 NoSQL 引擎 (Couchbase) 管理文档之间的关系,我想出了这种方法来解决我的问题。这是我的解决方案和让我实现它的步骤:

https://forums.couchbase.com/t/document-relationships-using-arrays-and-views-passing-though-graph-theory/3281

我的问题是:

谢谢。

有趣 post 马特奥。看完后我意识到你可以在几个方面进行改进:

  • 考虑 1-1 节点关系。在你的 post 你专注于 N-N 节点 关系(当然有人会争辩说 1-1 是 N-N)...但是我认为有可能对 1-1 关系进行不同的(优化的)实现。对于 1-1 我使用节点密钥 值作为我的 json 文档中的一个字段(例如用户:{name:string, dob:date, addressID:string})

  • 用于解决关系的节点密钥设计:您可以在密钥中进行编码 价值关系信息,例如关键字:"user#11"、"user#11#address#123"、"address#123#user#11" 等

  • 数据完整性方面:考虑缺失的复合体 交易。即你不能在一个文档中改变多个文档 交易。设计应该对此进行补偿。

我过去在 Couchbase 的模型设计中使用过类似的解决方案。它现在已经投入生产好几年了,而且性能很好(负载大约为 250 tps)……我试图尽可能避免创建复杂的节点关系,结果只有很少的 1-1 和 1-N 类型.

我测试了这个解决方案并且效果很好。我喜欢 'always possible' N-N 关系的灵活性,因为您可以在需要时简单地添加关系文档,而无需更改应用程序逻辑。有一个缺点:您需要实现自己的应用程序逻辑约束以避免关系滥用。

我注意到与 JSON 对象相比,使用数组并没有很大的优势,有时使用其他关系数据可能会有用,例如关系的权重(或成本)。所以我建议您使用自己类型的关系文档:

{
  "type": "relationship",
  "documents": ["key1", "key2"],
  "all-the-data-you-need": { ... }
}

从性能上看,使用对象与数组没有太大区别。

希望这对某人有所帮助! ;)