从 table 存储中检索一系列分区键的最有效方法
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();
阅读此 article 它表明您可以组合过滤器。但是,我有 n
个过滤器,它们都需要合并。
所以我觉得这不是最好的方法。
我该如何查询这些数据?
是不是就这么简单:
table.CreateQuery<MyEntity>().Where(x => days.Any(y => y == x.PartitionKey));
理想情况下,我只想向服务器发送一个分区键列表,然后 return 将这些分区中的所有实体发送给我。
编辑
this然后过滤内存中的那 1,000 条记录可能更容易...
您可以简单地编写一个范围查询。类似于以下内容:
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...");
}
所以对于分区键,我使用 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();
阅读此 article 它表明您可以组合过滤器。但是,我有 n
个过滤器,它们都需要合并。
所以我觉得这不是最好的方法。
我该如何查询这些数据?
是不是就这么简单:
table.CreateQuery<MyEntity>().Where(x => days.Any(y => y == x.PartitionKey));
理想情况下,我只想向服务器发送一个分区键列表,然后 return 将这些分区中的所有实体发送给我。
编辑
this然后过滤内存中的那 1,000 条记录可能更容易...
您可以简单地编写一个范围查询。类似于以下内容:
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...");
}