这个问题涉及这里描述的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表存储设计可伸缩分区策略和本教程来更好地理解它。