从Azure表存储获取分区

时间:2012-11-05 08:59:28

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

在我的表存储中,每个分区有10.000个元素。现在我想将整个分区加载到内存中。但是,这需要很长时间。我想知道我做错了什么,或者是否有办法更快地做到这一点。这是我的代码:

        public List<T> GetPartition<T>(string partitionKey) where T : TableServiceEntity
        {
            CloudTableQuery<T> partitionQuery = (from e in _context.CreateQuery<T>(TableName)
                                                 where e.PartitionKey == partitionKey
                                                 select e).AsTableServiceQuery<T>();

            return partitionQuery.ToList();
        }

这是应该完成的方式还是它们的任何东西等同于批量插入以便再次从表中获取元素?

非常感谢, 基督教

修改

我们在blob存储中也提供了所有数据。这意味着,一个分区完全序列化为byte []并保存在blob中。当我从blob存储中检索它并随后反序列化它时,它比从表中获取它更快。快了近10倍!怎么会这样?

2 个答案:

答案 0 :(得分:3)

在你的情况下,我认为关闭变更跟踪可能会有所作为:

context.MergeOption = MergeOption.NoTracking;

在MSDN上查看其他可能的改进:.NET and ADO.NET Data Service Performance Tips for Windows Azure Tables

编辑:为了回答您的问题为什么blob存储中的大文件更快,您必须知道单个请求中可以获得的最大记录数量是1000个项目。这意味着,要获取10.000个项目,您需要在blob存储上执行10个请求而不是1个单个请求。此外,在使用blob存储时,您不会通过WCF数据服务,这也会产生很大的影响。

答案 1 :(得分:1)

此外,请确保您使用的是第二代Azure存储...如果您位于支持它的数据中心,则基本上是“免费”升级。它使用SSD和升级的网络拓扑。

http://blogs.msdn.com/b/windowsazure/archive/2012/11/02/windows-azure-s-flat-network-storage-and-2012-scalability-targets.aspx

Microsoft不会迁移您的帐户,只需重新创建它,即可“免费升级”到第二代Azure存储。