2015-04-13 2 views
0

У меня возникла проблема с получением записей из лазурного хранилища по временному интервалу. Вот мой запрос.Проблемы с получением записей из лазурного хранилища по временному интервалу

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; 

После выполнения запроса у меня нет записей вообще. Есть ли что-то, что я делаю неправильно. Может ли кто-нибудь сказать мне, что я делаю неправильно?

Большое спасибо за вашу помощь.

ответ

1

ExecuteQuerySegmentedAsync возвращает задание TableQuerySegment, в котором содержатся результаты этого вызова и 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); 
+0

Спасибо спаривается за вашу помощь. Это действительно помогло мне. Хотя это очень медленно. Я знаю, что это из-за не сериализации. Я постараюсь придумать, что могу, получить данные немного быстрее, чем сейчас. В любом случае, снова спасибо. – UnuS76

1

Как сказал Сердар в другой комментарий, возвращенный сегментирован результат может быть пустым, и вам необходимо оформить запрос запрос снова с возвращенным ContinuationToken, пока возвращаемый ContinuationToken не равна нулю.

Еще одна вещь, которую я хотел бы упомянуть, - избегать запрос временной метки, если возможно. Такой запрос приведет к просмотру всего стола на стороне сервера. Если запрос временного интервала необходим обычно в вашем сценарии, пожалуйста, подумайте о выборе временной метки в качестве ключа раздела или ключевого ключа для оптимизации производительности запроса.

Пожалуйста, обратитесь к следующим сообщениям для ключа секционирования таблицы и ряд дизайна клавиша:

How to get most out of Windows Azure Tables

Azure Storage Table Design Guide: Designing Scalable and Performant Tables