繁体   English   中英

从表存储中检索一系列分区键的最有效方法

[英]Most efficient way to retrieve from table storage a range of partition keys

因此,对于分区键,我使用的是YYYY-MM-DD格式字符串。

因此,用户可以输入两个日期,他们希望从中获取实体,例如, 4th December 2015 - 14th December 2015

我有计算来获取所有单个分区键:

start; // 4th December
end; // 14th December
var totalDays = (int)Math.Floor((end - start).TotalDays) + 1;

var days = Enumerable
               .Range(0, totalDays)
               .Select(x => start.AddDays(x).GetPartitionKey())
               .ToList();

阅读本文表明您可以组合使用过滤器。 但是,我有n个过滤器,需要全部组合。

所以我觉得这不是最好的方法。

我应该如何查询这些数据?

是否简单如:

table.CreateQuery<MyEntity>().Where(x => days.Any(y => y == x.PartitionKey));

理想情况下,我只想向服务器发送分区键列表,并让它返回这些分区中的所有实体。

编辑

这可能是更容易做到则只是在内存中过滤那些1000条记录...

您可以简单地编写范围查询。 类似于以下内容:

        var start = "2015-12-04";
        var end = "2015-12-14";
        var account = new CloudStorageAccount(new StorageCredentials(accountName, accountKey), true);
        var tableClient = account.CreateCloudTableClient();
        var table = tableClient.GetTableReference("MyTableName");
        var queryExpression = "PartitionKey ge '" + start + "' and PartitionKey le '" + end + "'";
        TableQuery<DynamicTableEntity> query = new TableQuery<DynamicTableEntity>().Where(queryExpression).Take(250);
        TableContinuationToken token = null;
        List<DynamicTableEntity> allEntities = new List<DynamicTableEntity>();
        do
        {
            var queryResult = table.ExecuteQuerySegmented<DynamicTableEntity>(query, token);
            var entities = queryResult.Results.ToList();
            token = queryResult.ContinuationToken;
            allEntities.AddRange(entities);
            Console.WriteLine("Fetched " + allEntities.Count + " entities so far...");
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM