各种范围查询对Azure表存储性能目标的影响是什么?



这个问题涉及这里描述的Azure表存储中的性能目标阈值。特别是,我关心每个分区的2K个实体,以及每秒总共20K个实体的阈值。我的理解是,如果超过这些阈值,Azure可能会开始返回500和503个错误。

我想我可能会遇到这个问题,我正在寻找关于这些项目究竟是如何计算的澄清。我明白,如果你对整个表或分区执行扫描,你可能会为Azure扫描的每个实体"收费",而不管你返回的数字是多少。由于您可能会在一个2000行表的单个设计糟糕的查询上消耗整个查询"预算",因此我想确保我正确理解了这一点。

为了清晰起见,这里有一个简单的表和相同的示例数据,我们可以在接下来的几个场景中使用。

PartitionKey | RowKey | Name
----------------------------
A              1        Alice
A              2        Bob
A              3        Candice
A              4        Dave
A              5        Eugenia
B              6        Frank
B              7        Genevieve
B              8        Henry
C              9        Ike
C              10       Jennifer

对于下面的每个场景,我将把从性能目标"预算"中"收取"的实体数量称为性能费用。让我们从最过分的进攻开始,从那里开始。

No PK, No RK指定
查询:Name == "Frank"
绩效收费:10个实体

我相信这是正确的(如果我错了请纠正我)。但是下面的情况呢?

指定PK,未指定RK
查询:PartitionKey == "A" AND Name == "Frank"
业绩收费:5家

指定PK,指定RK范围
查询:PartitionKey == "A" AND (RowKey>= "2" AND RowKey <= "3")
绩效收费:2?还是5 ?

PK指定,RK部分范围指定
查询:PartitionKey == "A" AND RowKey>= "4"绩效收费:2?还是5 ?

指定PK范围
查询:PartitionKey>= "B" AND PartitionKey <= "C"
绩效收费:5?还是10 ?

指定的部分PK范围
查询:PartitionKey>= "C"
绩效收费:2?还是10 ?

提前感谢您的指点!

根据我的经验,这是我对您的查询的理解,您可以参考它。

No PK, No RK指定查询:Name == "Frank"

全表扫描:查询扫描整个表(即表中所有分区的所有行)的结果。

性能管理:10

指定PK,未指定RK查询:PartitionKey == "A" AND Name == "Frank"

指定PK,指定RK范围查询:PartitionKey == "A" AND (RowKey>= "2" AND RowKey <= "3")

指定PK,指定RK部分范围查询:PartitionKey == "A" AND RowKey>= "4"

Row range scan:查询指定分区内的行扫描结果。

性能费用:5

查询:PartitionKey>= "B" AND PartitionKey <= "C"

查询:PartitionKey>= "C"

Partition range scan:查询扫描分区服务器范围的结果。

性能收费:5,2

此外,您可以遵循为Azure表存储设计可伸缩分区策略和本教程来更好地理解它。

最新更新