Azure cosmosdb DocumentDb跨分区查询策略
基于本文,我有一个战略问题: A) 我是否应该构造分区键,以便查询(理想情况下)在一个分区结束?例如,PartitionKey=CustomerId 或 B) 文档是否仍然有效地处理跨多个(多个)分区的查询?例如,PartitionKey=“CustomerId+ContextName+TypeName” 我们目前实施了“A”,但讨论了“B”,因为文章中有以下引用: 最好的做法是使用一个具有许多不同属性的分区键 数值(至少100s-1000s) 强调“至少”。我们的CustomerID的卷不能产生超过2-300个分区键。我们是否应该向它添加更多信息(“B”),因为我们知道一个查询可能会访问30-50个分区(即专门添加的“TypeId”)Azure cosmosdb DocumentDb跨分区查询策略,azure-cosmosdb,Azure Cosmosdb,基于本文,我有一个战略问题: A) 我是否应该构造分区键,以便查询(理想情况下)在一个分区结束?例如,PartitionKey=CustomerId 或 B) 文档是否仍然有效地处理跨多个(多个)分区的查询?例如,PartitionKey=“CustomerId+ContextName+TypeName” 我们目前实施了“A”,但讨论了“B”,因为文章中有以下引用: 最好的做法是使用一个具有许多不同属性的分区键 数值(至少100s-1000s) 强调“至少”。我们的CustomerID的卷不能
从c中选择*
其中(MyPartition=“1+ContextA+TypeA”
或MyPartition=“1+ContextA+TypeB”
或MyPartition=“1+ContextA+TypeC”
...)
及
本文中列出的场景似乎假定客户或用户将生成大量密钥。这对我们来说不是真的。Docdb Sdk在运行跨分区查询时会进行并行调用。 如果您检查网络流量,您会注意到,它首先查询物理分区密钥范围,然后对每个分区密钥范围进行单独调用。 它并行执行,并允许控制maxdegreeofparallelism等 话虽如此,有两个方面需要考虑:
- 数据量
- 查询聚合
如果您正在使用当前由doc db SUM/AVG/COUNT/MIN/MAX支持的聚合。这些聚合无法跨分区执行。请参阅以获取有关Azure documentDB的更多信息。从文档中,我们可以知道哪些数据存储在同一个分区中,以及如何选择正确的分区键property@TomSun-谢谢你的链接。我已经看过那份文件了。我可以用多种方式区分我的数据。它似乎没有回答这样一个基本问题:我的分区的设计应该使我的查询以单个分区为目标,还是跨多个分区的查询仍然表现良好?
SELECT * FROM c
WHERE(MyPartition = "1+ContextA+TypeA"
OR MyPartition = "1+ContextA+TypeB"
OR MyPartition = "1+ContextA+TypeC"
...)
AND <some other conditions>