如何从Azure Table Storage FAST下载1亿行

jWo*_*ose 9 azure azure-storage azure-table-storage

我的任务是从Azure Table Storage下载大约1亿行数据.这里重要的是速度.

我们使用的过程是从Azure Table存储中下载10,000行.将它们处理为Sql Server的本地实例.处理行时,它会从Azure表中一次删除100行.这个过程是有线程的,有8个线程一次下载10,000行.

唯一的问题是根据我们的计算.下载和处理我们存储的大约1亿行需要大约40天.有谁知道更快的方法来完成这项任务?

一个附带问题:在下载过程中,Azure将发送回没有任何数据的xml.它不会发回错误.但它发送了这个:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<feed xml:base="azure-url/" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
  <title type="text">CommandLogTable</title>
  <id>azure-url/CommandLogTable</id>
  <updated>2010-07-12T19:50:55Z</updated>
  <link rel="self" title="CommandLogTable" href="CommandLogTable" />
</feed>
0
Run Code Online (Sandbox Code Playgroud)

有没有其他人有这个问题,并有一个解决方案吗?

Rin*_*lin 16

除了禁用Nagling的建议之外,还有一篇关于提高Azure表存储性能的非常好的帖子.实际上,提高ADO.NET反序列化的速度Sqwarea(使用Lokad.Cloud框架构建的大型在线多人游戏)提供了10倍的加速.

但是,表存储可能不是大型存储方案(超过数百万条记录)的最佳解决方案.延迟是这里的杀戮因素.为了解决这个问题,我已成功使用基于文件的数据库存储,其中更改在本地完成(没有任何CLAP的网络延迟),并通过上传文件提交给BLOB(Lokad强制执行并发和扩展).CQRS App Engine for Windows Azure).

一次向SQLite数据库插入1000万条记录(在事务中,每条记录被2个字段索引,并且通过ProtoBuf序列化的任意无模式数据)平均只需要200秒.上传/下载生成的文件 - 平均大约15秒.通过索引随机读取 - 即时(假设文件缓存在本地存储中并且ETag匹配).


use*_*559 7

至于你的问题,我希望你得到一个"延续令牌".如果您使用的是.NET存储客户端库,请尝试在查询中添加.AsTableServiceQuery().

至于你的主要问题,散布查询是你能做的最好的事情.听起来您正在从本地计算机(而不是在Windows Azure中)访问存储.如果是这样,我想你可以通过向Windows Azure部署一个小型服务来加快速度,从而从表存储中获取数据(速度更快,因为数据中心内的带宽更高,延迟更低),然后压缩结果并将它们发送回本地计算机.XML Windows Azure表发送回来有很多开销,因此剥离并捆绑行可能会节省大量的传输时间.