Azure表存储并行查询

时间:2013-02-26 15:01:33

标签: azure azure-storage azure-table-storage

如果我没有指定分区密钥并因此执行所有分区的扫描,那么扫描会自动与并发扫描的每个分区并行进行吗?

感谢。

4 个答案:

答案 0 :(得分:5)

扫描从第一个分区开始按顺序完成,因为实体由PartitionKey / RowKey组合存储。

答案 1 :(得分:2)

Gaurav Mantri是对的。

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

最终,我不会就典型情况提出建议。您以不同方式组织数据可能会更好。

答案 2 :(得分:1)

正如高拉夫所说,这不是自动的。但这并不意味着它无法完成。

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

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

如果您使用非唯一值代替GUID,让我们说一个国家/地区列表,您只需启动与国家/地区一样多的线程。

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

答案 3 :(得分:0)

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

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

经验测试表明,在某些情况下,单线程查询可以表现得更好。表格大小和我假设Azure如何分配部件似乎有所不同。

简而言之,它是一个需要在产品生命周期内进行检查的区域,以确定不同的策略是否会提高性能。

所以我所做的就是在针对表格的自动化测试中放置一个预期的持续时间,这样任何降级都会闪烁红灯再次检查。