8

短版:我们能否以多线程的方式从数十个或数百个表分区中读取,从而将性能提高几个数量级?

长版:我们正在开发一个在 Azure 表存储中存储数百万行的系统。我们将数据分成小分区,每个分区包含大约 500 条记录,代表一个单元一天的数据。

由于 Azure 没有“求和”功能,要提取一年的数据,我们要么必须使用一些预缓存,要么自己在 Azure Web 或辅助角色中对数据进行求和。

假设如下: - 读取一个分区不会影响另一个分区的性能 - 读取一个分区存在基于网络速度和服务器检索的瓶颈

然后我们可以猜测,如果我们想快速汇总大量数据(1 年,365 个分区),我们可以使用大规模并行算法,它几乎可以完美地扩展到线程数。例如,我们可以使用具有 50 多个线程的 .NET 并行扩展并获得巨大的性能提升。

我们正在做一些实验,但我想看看以前是否做过。由于 .NET 端基本上是空闲等待高延迟操作,这对于多线程来说似乎是完美的。

4

1 回答 1

5

在给定的时间段(大约 500 个请求/秒)内,可以对存储帐户和特定分区或存储服务器执行的事务数量有限制。因此,从这个意义上说,您可以并行执行的请求数量有一个合理的限制(在它开始看起来像 DoS 攻击之前)。

此外,在实现中,我会警惕对客户端施加的并发连接限制,例如System.Net.ServicePointManager. 我不确定 Azure 存储客户端是否受到这些限制;他们可能需要调整。

于 2010-10-07T03:03:06.070 回答