根据本文,我有一个策略问题:
https://docs.microsoft.com/zh-cn/azure/cosmos-db/partition-data
A)我是否应该对分区键进行结构设计,以使查询(理想情况下)最终集中在一个分区上?例如,PartitionKey = CustomerId
要么
B)文档是否仍然有效地处理跨越多个(许多)分区的查询?例如。PartitionKey =“客户编号+上下文名称+类型名称”
我们目前已经实现了“ 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>
Run Code Online (Sandbox Code Playgroud)
本文中介绍的方案似乎假定客户或用户将生成大量密钥。这对我们来说不是真的。
小智 5
当您运行跨分区查询时,Docdb Sdk会进行并行调用。如果检查网络流量,您会注意到,它首先查询物理分区键范围,然后分别调用每个分区键范围。它并行执行,并允许控制最大并行度等。
话虽如此,要考虑两个方面:
如果您的卷为1 TB,则意味着将至少需要100个物理分区(每个分区为10 GB),因此将进行至少100个调用。如果您的数据量增加,则进行更多的调用可能会开始损害性能。
如果您使用的是聚合,则doc db SUM / AVG / COUNT / MIN / MAX当前支持。这些不能跨分区执行。
| 归档时间: |
|
| 查看次数: |
3559 次 |
| 最近记录: |