我的任务是转储具有任意未知架构的整个 Azure 表。执行此操作的标准代码类似于以下内容:
TableQuery<DynamicTableEntity> query = new TableQuery<DynamicTableEntity>();
foreach (DynamicTableEntity entity in table.ExecuteQuery(query))
{
// Write a dump of the entity (row).
}
根据表的不同,在我的系统上,其运行速度为每秒 1000-3000 行。我猜测这种(缺乏)性能与发出的单独的 HTTP 请求以检索 block 中的数据有关。不幸的是,一些表的大小有好几 GB,因此这需要相当长的时间。
有没有好的方法可以并行化上述内容或以其他方式加速?看起来这些 HTTP 请求可以由多个线程发送,如网络爬虫等。但是,我没有看到立即执行此操作的方法。
最佳答案
除非您知道表中实体的 PartitionKeys
(或包括 PartitionKey 的其他一些查询条件),否则您需要采用您现在正在执行的自上而下的方法。为了让您能够高效地并行触发查询,您必须在查询中包含 PartitionKey。
关于performance - 快速转储 Azure 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26008223/