【问题标题】:Issues with getting records from azure storage by timestamp interval按时间戳间隔从 Azure 存储中获取记录的问题
【发布时间】:2015-06-18 12:19:22
【问题描述】:

我在按时间戳间隔从 azure 存储中获取记录时遇到问题。这是我的查询。

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("ConnectionString"));

CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("TableName");

string fromDate = TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.GreaterThanOrEqual, fromDateTime);
string toDate = TableQuery.GenerateFilterConditionForDate("Timestamp", QueryComparisons.LessThanOrEqual, toDateTime);
string anotherValue = TableQuery.GenerateFilterCondition("AnotherValue", QueryComparisons.Equal, "Value");
string timeCombine = TableQuery.CombineFilters(fromDate, TableOperators.And, toDate);

TableQuery<StorageSPS> query = new TableQuery<StorageSPS>().Where(TableQuery.CombineFilters(anotherValue, TableOperators.And, timeCombine));
var data = (await (table.ExecuteQuerySegmentedAsync(query, new TableContinuationToken(), System.Threading.CancellationToken.None))).Results;

执行查询后,我没有得到任何记录。有什么,我做错了。谁能告诉我我做错了什么?

非常感谢您的帮助。

【问题讨论】:

    标签: c# asp.net timestamp azure-storage


    【解决方案1】:

    ExecuteQuerySegmentedAsync返回一个TableQuerySegment的Task,其中既包含了本次调用的结果,又包含了一个continuation token来查询下一组结果。按照设计,单个 ExecuteQuerySegmentedAsync 调用可以返回 0 个实体(请参阅Query Timeout and Pagination),但客户端可以使用提供的继续令牌再次调用它。例如;

    int count = 0;
    do
    {
        TableQuerySegment<DynamicTableEntity> querySegment =
            await currentTable.ExecuteQuerySegmentedAsync(query, token);
        token = querySegment.ContinuationToken;
    
        foreach (DynamicTableEntity entity in querySegment)
        {
            ++count;
        }
    }
    while (token != null);
    

    【讨论】:

    • 感谢伙伴的帮助。它真的帮助了我。虽然它很慢。我知道这是因为没有序列化。我会试着想想,我能做些什么,比现在更快地获取数据。无论如何,再次感谢朋友。
    【解决方案2】:

    正如Serdar在另一条评论中所说,返回的分段结果可能为空,您需要使用返回的ContinuationToken再次发出查询请求,直到返回的ContinuationToken为null。

    我想提的另一件事是,如果可能,请避免时间戳间隔查询。这样的查询将导致服务器端进行全表扫描。如果您的场景通常需要时间戳间隔查询,请考虑选择时间戳作为分区键或行键以优化查询性能。

    表分区键和行键设计请参考以下帖子:

    How to get most out of Windows Azure Tables

    Azure Storage Table Design Guide: Designing Scalable and Performant Tables

    【讨论】:

      猜你喜欢
      • 2015-05-02
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      • 2021-06-13
      相关资源
      最近更新 更多