如果我没有指定分区键并因此对所有分区执行扫描,扫描是否会自动与同时扫描的每个分区并行进行?
谢谢。
由于实体按 PartitionKey/RowKey 组合存储,因此从第一个 Partition 开始按顺序进行扫描。
Gaurav Mantri 是正确的。
如果您想强制它并行完成,则必须按所有可能的 PartitionKeys 进行过滤,然后自己在代码中并行执行这些查询。这可能会也可能不会“更好”(更快/更容易/更便宜),因为它取决于很多不同的事情。
最终,对于典型情况,我不建议这样做。以不同的方式组织数据可能会更好。
正如 Gaurav 所说,这不是自动的。但这并不意味着它不能完成。
如果可以对 PartitionKey 做出某些假设,则可以非常轻松地并行执行 Azure Tables。例如,如果您的 PartitionKey 是一个 GUID,您可以启动 10 个线程,例如通过在范围内搜索您的数据。这是您将在第一个线程上使用的范围示例,检索范围 [a, e[ 中的所有实体。请注意,您可以根据需要对其进行调整,并根据需要运行 20 个线程。
(PartitionKey ge 'a' 和 PartitionKey lt 'e')
如果您使用非唯一值而不是 GUID,比方说国家列表,您只需启动与国家数量一样多的线程。
您真正需要扫描整个 Azure 表的唯一情况是所有实体的 PartitionKey 相同,在这种情况下,您可能面临设计问题。
几个月后,我想发布一个答案来讨论并行全表扫描对性能的影响。
我使用了一个 128 分区方案,该方案使用了一个密钥生成算法,该算法在给定 Guid 行密钥种子值的情况下具有出色的分布。
实证测试表明,单线程查询在某些情况下可以执行得非常好。表的大小以及我认为 Azure 如何分配这些部分似乎有所不同。
简而言之,这是一个需要在产品生命周期内检查的领域,以了解不同的策略是否会提高性能。
因此,我所做的是在针对表格的自动化测试中设置了预期的持续时间,以便任何降级都可以闪烁红灯以再次检查。