1

如果我没有指定分区键并因此对所有分区执行扫描,扫描是否会自动与同时扫描的每个分区并行进行?

谢谢。

4

4 回答 4

5

由于实体按 PartitionKey/RowKey 组合存储,因此从第一个 Partition 开始按顺序进行扫描。

于 2013-02-26T15:15:13.423 回答
2

Gaurav Mantri 是正确的。

如果您想强制它并行完成,则必须按所有可能的 PartitionKeys 进行过滤,然后自己在代码中并行执行这些查询。这可能会也可能不会“更好”(更快/更容易/更便宜),因为它取决于很多不同的事情。

最终,对于典型情况,我不建议这样做。以不同的方式组织数据可能会更好。

于 2013-02-26T17:40:32.953 回答
1

正如 Gaurav 所说,这不是自动的。但这并不意味着它不能完成。

如果可以对 PartitionKey 做出某些假设,则可以非常轻松地并行执行 Azure Tables。例如,如果您的 PartitionKey 是一个 GUID,您可以启动 10 个线程,例如通过在范围内搜索您的数据。这是您将在第一个线程上使用的范围示例,检索范围 [a, e[ 中的所有实体。请注意,您可以根据需要对其进行调整,并根据需要运行 20 个线程。

(PartitionKey ge 'a' 和 PartitionKey lt 'e')

如果您使用非唯一值而不是 GUID,比方说国家列表,您只需启动与国家数量一样多的线程。

您真正需要扫描整个 Azure 表的唯一情况是所有实体的 PartitionKey 相同,在这种情况下,您可能面临设计问题。

于 2013-03-05T01:23:42.323 回答
0

几个月后,我想发布一个答案来讨论并行全表扫描对性能的影响。

我使用了一个 128 分区方案,该方案使用了一个密钥生成算法,该算法在给定 Guid 行密钥种子值的情况下具有出色的分布。

实证测试表明,单线程查询在某些情况下可以执行得非常好。表的大小以及我认为 Azure 如何分配这些部分似乎有所不同。

简而言之,这是一个需要在产品生命周期内检查的领域,以了解不同的策略是否会提高性能。

因此,我所做的是在针对表格的自动化测试中设置了预期的持续时间,以便任何降级都可以闪烁红灯以再次检查。

于 2015-02-02T11:25:54.473 回答