NoSQL:使用数组的新型关系?
NoSQL: new kind of relationships using Arrays?
我不得不通过 NoSQL 引擎 (Couchbase) 管理文档之间的关系,我想出了这种方法来解决我的问题。这是我的解决方案和让我实现它的步骤:
我的问题是:
- 您如何看待这个解决方案?
- 你用过这样的东西吗?效果如何?
- 有什么更好的主意吗?此解决方案的关键点应该有所帮助
谢谢。
有趣 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": { ... }
}
从性能上看,使用对象与数组没有太大区别。
希望这对某人有所帮助! ;)
我不得不通过 NoSQL 引擎 (Couchbase) 管理文档之间的关系,我想出了这种方法来解决我的问题。这是我的解决方案和让我实现它的步骤:
我的问题是:
- 您如何看待这个解决方案?
- 你用过这样的东西吗?效果如何?
- 有什么更好的主意吗?此解决方案的关键点应该有所帮助
谢谢。
有趣 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": { ... }
}
从性能上看,使用对象与数组没有太大区别。
希望这对某人有所帮助! ;)