简短版本:我们能否以多线程方式从数十个或数百个表分区中读取数据,以提高数量级的性能?
长版: 我们正在开发一个在Azure表存储中存储数百万行的系统。我们将数据分区为小分区,每个分区包含大约500条记录,代表一个单位的一天数据。
由于Azure没有“总和”功能,为了提取一年的数据,我们要么必须使用一些预缓存,要么自己在Azure Web或辅助角色中对数据求和。
假设如下: - 读取分区不会影响另一个分区的性能 - 读取分区有一个基于网络速度和服务器检索的瓶颈
我们可以猜测,如果我们想要快速总结大量数据(1年365个分区),我们可以使用大规模并行算法,它几乎可以完美地扩展到线程数。例如,我们可以使用具有50个以上线程的.NET并行扩展,并获得巨大的性能提升。
我们正在努力设置一些实验,但我想看看之前是否已经完成。由于.NET端基本上处于等待高延迟操作的空闲状态,因此这似乎非常适合多线程。
答案 0 :(得分:4)
在给定时间段内(大约500 req / s),可以对存储帐户和特定分区或存储服务器执行的事务数量有限制。所以从这个意义上说,你可以并行执行的请求数量有一个合理的限制(在它开始看起来像DoS攻击之前)。
此外,在实现中,我会警惕对客户端施加的并发连接限制,例如System.Net.ServicePointManager
。我不确定Azure存储客户端是否受这些限制的约束;他们可能需要调整。