Что происходит, когда вы делаете ToList () для гигантской таблицы хранения таблиц? - PullRequest
0 голосов
/ 11 июня 2018

Где-то в моем приложении был какой-то действительно старый код, который я случайно вызвал:

var json = table.CreateQuery<ActionLog>().ToList().ToJson();

другой подозреваемый:

var action_log_list = await table.CreateQuery<ActionLog>()
    .Where(log => log.StartTime > startTime)
    .AsTableQuery()
    .[...]

Проблема в том, что эта таблица гигантская - возможно,сотни миллионов

Примерно в то же время, когда я нажал этот код, он забрал один экземпляр моего приложения, и тот не возвращался более одного часа.Даже после перезагрузки.

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

1 Ответ

0 голосов
/ 12 июня 2018

Примерно в то же время, когда я нажал этот код, он забрал один экземпляр моего приложения, и тот не возвращался более одного часа.Даже после перезагрузки.

Исходя из моих знаний, мы могли бы использовать ExecuteSegmentedAsync для улучшения производительности.Ниже приведен демонстрационный код.

 var query = table.CreateQuery<ActionLog>().AsTableQuery();
 TableContinuationToken continuationToken = null;
 do
   {
      // Execute the query async until there is no more result
      var queryResult = await query.ExecuteSegmentedAsync(continuationToken);
      // to do something
      continuationToken = queryResult.ContinuationToken;
   } while (continuationToken != null);

Поскольку это гигантская таблица, для этого может потребоваться много времени.Я не проверяю это на моей стороне.

Но, исходя из моего опыта, если мы хотим иметь дело с такими огромными записями, я рекомендую вам использовать Фабрика данных Azure , чтобы сделать это.

...