N1ql 加入阵列与替代方案的性能
N1ql join performance on array vs. alternatives
我已经开始使用 N1ql,并且一直在关注 Couchbase 的 N1ql 教程。
我多次注意到给定文档(比如说用户)包含一个数组,其中包含其他文档(比如订单)的 ID,我们稍后可以从中执行连接。此解决方案是否适用于用户可能有数千个引用的情况?
如果不能,还有什么选择?查找所有用户及其订单(某些用户可能没有订单)的正确方法是什么?
是的,应该是合适的,只要注意其他到期的diligence/sizing。像往常一样,数据模型和相关查询应该一起考虑。例如,如果查询基于特定的数组元素,则可以使用数组索引。
备选方案可以是(取决于数据建模的各种因素):
- 嵌入其他文档(反规范化),或
- 反向引用,其中订单文档具有对相应用户文档的引用。请注意,从 Couchbase 4.5
发布,N1QL 支持 Lookup JOINs & Index JOINs 这有助于 JOINing
用户到订单,不管用户是否参考订单或
反之亦然。
http://developer.couchbase.com/documentation/server/4.5/n1ql/n1ql-language-reference/from.html#story-h2-3
-普拉萨德
我已经开始使用 N1ql,并且一直在关注 Couchbase 的 N1ql 教程。
我多次注意到给定文档(比如说用户)包含一个数组,其中包含其他文档(比如订单)的 ID,我们稍后可以从中执行连接。此解决方案是否适用于用户可能有数千个引用的情况?
如果不能,还有什么选择?查找所有用户及其订单(某些用户可能没有订单)的正确方法是什么?
是的,应该是合适的,只要注意其他到期的diligence/sizing。像往常一样,数据模型和相关查询应该一起考虑。例如,如果查询基于特定的数组元素,则可以使用数组索引。
备选方案可以是(取决于数据建模的各种因素):
- 嵌入其他文档(反规范化),或
- 反向引用,其中订单文档具有对相应用户文档的引用。请注意,从 Couchbase 4.5 发布,N1QL 支持 Lookup JOINs & Index JOINs 这有助于 JOINing 用户到订单,不管用户是否参考订单或 反之亦然。 http://developer.couchbase.com/documentation/server/4.5/n1ql/n1ql-language-reference/from.html#story-h2-3
-普拉萨德