在其他条件相同的情况下,更细粒度的分区键是否会影响 RU 成本?
Does more granular partition key play a role in RU cost, other things being equal?
例如,假设我们总共有 10Gb 的数据,每个分区键有 1Gb 的数据。
现在,让我们考虑一个查询:
SELECT * FROM c WHERE c.Amount > 100
AND c.partitionKey = "someKey"
假设:
- 此查询总是returns相同数量的结果。
- 所有分区键都属于同一个物理分区。
问题:
将 partitionKey 设置得更细化是否会产生任何成本影响?换句话说,如果是在同一个物理分区内,相同partitonKey值的文档有1000个、10000个、100000个有区别吗?
如果您的所有数据都驻留在一个物理分区上,您对分区键所做的任何操作都不会对性能产生任何影响。
您的分区键只会影响您的横向扩展能力。在写入密集型场景中,您希望将写入分布到尽可能广泛的分区键数组中,以最好地饱和或利用可用吞吐量。在读取密集的场景中(通常),您希望将查询集中在一个或一组有界的分区键值上,以避免跨不包含您的数据的分区散开。
我说一般是因为在某些情况下,如果您想要的数据驻留在所有分区上,则可以使用跨分区查询,因为它们可以 运行 并行跨多个分区。然而,这通常是一种边缘情况,仅适用于没有高并发的查询。
在同时具有写入和读取繁重工作负载的情况下,您将需要决定是针对读取还是写入进行优化,还是针对写入进行优化并使用 Change Feed 并将数据复制到第二个容器中以提供查询服务。然而,这需要仔细衡量所有操作的成本,并将其与不这样做的成本进行比较。
例如,假设我们总共有 10Gb 的数据,每个分区键有 1Gb 的数据。
现在,让我们考虑一个查询:
SELECT * FROM c WHERE c.Amount > 100
AND c.partitionKey = "someKey"
假设:
- 此查询总是returns相同数量的结果。
- 所有分区键都属于同一个物理分区。
问题: 将 partitionKey 设置得更细化是否会产生任何成本影响?换句话说,如果是在同一个物理分区内,相同partitonKey值的文档有1000个、10000个、100000个有区别吗?
如果您的所有数据都驻留在一个物理分区上,您对分区键所做的任何操作都不会对性能产生任何影响。
您的分区键只会影响您的横向扩展能力。在写入密集型场景中,您希望将写入分布到尽可能广泛的分区键数组中,以最好地饱和或利用可用吞吐量。在读取密集的场景中(通常),您希望将查询集中在一个或一组有界的分区键值上,以避免跨不包含您的数据的分区散开。
我说一般是因为在某些情况下,如果您想要的数据驻留在所有分区上,则可以使用跨分区查询,因为它们可以 运行 并行跨多个分区。然而,这通常是一种边缘情况,仅适用于没有高并发的查询。
在同时具有写入和读取繁重工作负载的情况下,您将需要决定是针对读取还是写入进行优化,还是针对写入进行优化并使用 Change Feed 并将数据复制到第二个容器中以提供查询服务。然而,这需要仔细衡量所有操作的成本,并将其与不这样做的成本进行比较。