首页 文章

DocumentDb交叉分区查询策略

提问于
浏览
0

根据这篇文章,我有一个战略问题:

https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data

A)我应该构建我的分区键,以便我的查询(理想情况下)最终在一个分区?例如 . PartitionKey = CustomerId

要么

B)文档是否仍处理有效跨越多个(多个)分区的查询?例如 . PartitionKey =“CustomerId ContextName TypeName”

我们目前已经实现了“A”,但之前已经讨论过“B”,因为文章中有这样的引用:

最佳做法是使分区键具有许多不同的值(至少100s-1000s) .

强调“至少” . 我们的CustomerIds不会产生超过2-300个分区密钥 . 我们是否应该向它添加更多信息(“B”),知道一个查询可能达到30-50个分区(即具体为“TypeId”添加)

SELECT * FROM c 
WHERE(MyPartition = "1+ContextA+TypeA"
   OR MyPartition = "1+ContextA+TypeB"
   OR MyPartition = "1+ContextA+TypeC"
   ...)
   AND <some other conditions>

文章中列出的场景似乎假设客户或用户将生成大量密钥 . 这对我们来说不是真的 .

1 回答

  • 4

    运行跨分区查询时,Docdb Sdk会进行并行调用 . 如果检查网络流量,您会注意到,它首先查询物理分区键范围,然后单独调用每个分区键范围 . 它并行执行,它允许控制maxdegreeofparallelism等 .

    话虽如此,有两个方面需要考虑:

    • 数据量

    如果你的音量是1 TB,那就意味着需要至少100个物理分区(每个分区为10 GB),因此它至少会进行100次呼叫 . 如果您的数据量增长,拨打更多电话可能会影响性能 .

    • 查询聚合

    如果您正在使用聚合,目前由doc db SUM / AVG / COUNT / MIN / MAX支持 . 这些不能跨分区执行 .

相关问题