正如其他用户所指出的,Azure 表受到运行时的严格控制,因此您无法控制/检查哪些特定存储节点正在处理您的请求。此外,任何给定的分区都由单个服务器提供服务,也就是说,属于同一分区的实体不能在多个存储节点之间拆分(请参阅此处)
在 Windows Azure 表中,PartitionKey 属性用作分区键。具有相同 PartitionKey 值的所有实体都聚集在一起,并由单个服务器节点提供服务。这允许用户通过设置 PartitionKey 值来控制实体位置,并对同一分区中的实体执行实体组事务。
您提到您的目标是每秒 8000 个请求?如果是这种情况,您可能会遇到需要非常好的表/分区键设计的阈值。请参阅文章“ Windows Azure 存储抽象及其可扩展性目标”
以下摘录适用于您的情况:
这将为 2012 年 6 月 7 日之后创建的单个存储帐户提供以下可伸缩性目标。
- 容量 – 高达 200 TB
- 事务 – 每秒最多 20,000 个实体/消息/blob
正如其他用户所指出的,如果您的 PartitionKey 编号遵循增量模式,Azure 运行时将识别这一点并将您的一些分区分组到同一存储节点中。
此外,如果我正确理解了您的问题,您目前是通过 GUID 分配分区键吗?如果是这种情况,这意味着表中的每个 PartitionKey 都是唯一的,因此每个 partitionkey 将不超过 1 个实体。根据上述文章,Azure 表横向扩展的方式是通过在独立存储节点内的分区键中对实体进行分组。如果您的分区键是唯一的,因此包含的实体不超过一个,这意味着 Azure 表一次只能横向扩展一个实体!现在,我们知道 Azure 并没有那么笨,它会在检测到创建分区键的方式时对分区键进行分组。因此,如果您在 Azure 中触发此触发器,并且 Azure 正在对您的分区键进行分组,这意味着您的可伸缩性功能仅限于此分组算法的智能性。
根据上述 2012 年的可扩展性目标,每个分区键应该能够为您提供每秒 2,000 个事务。理论上,在这种情况下,您应该需要不超过 4 个分区键(假设这四个之间的工作负载是平均分配的)。
我建议您将分区键设计为对实体进行分组,以使每个分区每秒不超过 2,000 个实体,并使用 GUID 作为分区键删除。这将使您能够更好地支持实体事务组等功能,降低表设计的复杂性,并获得您正在寻找的性能。