почему существует так много запросов GET к хранилищу таблиц?

#c# #asp.net-core #azure-functions #azure-table-storage

Вопрос:

Мое функциональное приложение истекает по времени.

Я смотрю на трассировку app insights, и она показывает огромное количество GET запросов к хранилищу таблиц:

введите описание изображения здесь

Вот откуда GET поступают запросы :

             var matchedTriosTable = TableService.GetMatchesWithPreops<RtfTiffPreopMatchModel>(daysAgo, matchedTriosReader)
                                                .Where(x => x.rtfFilename   == match.rtfFilename
                                                         amp;amp; x.tifFilename   == match.tifFilename
                                                         amp;amp; x.preopFilename == match.preopFilename);


            //If these specific components have already been matched don't match them again
            if (matchedTriosTable.Any())
            {
                continue;
            }
 

Вот реализация GetMatchesWithPreops :

     public static IEnumerable<RtfTiffPreopMatchModel> GetMatchesWithPreops<T>(int daysAgo, CloudTable cloudTable) where T : ITableEntity, new()
    {
        var dateReceivedFilter = TableQuery.GenerateFilterConditionForDate("rtfReceivedAt", QueryComparisons.GreaterThan, DateTimeOffset.Now.AddDays(-1 * daysAgo).Date);
        var partitionFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "FromJJJBaptistBilling");

        TableQuery<T> filters = new TableQuery<T>()
         .Where(
          TableQuery.CombineFilters(
            dateReceivedFilter
           , TableOperators.And,
            partitionFilter
          )
         );

        return cloudTable.ExecuteQueryAsync(filters).Result.Cast<RtfTiffPreopMatchModel>();
    }
 

И вот как ExecuteQueryAsync реализуется:

     public static async Task<IEnumerable<T>> ExecuteQueryAsync<T>(this CloudTable table, TableQuery<T> query) where T : ITableEntity, new()
    {
        var items = new List<T>();
        TableContinuationToken token = null;
        var startIndex = 1;
        do
        {
            TableQuerySegment<T> seg = await table.ExecuteQuerySegmentedAsync(query, token);
            token = seg.ContinuationToken;
            items.AddRange(seg);
            startIndex  ;
        } while (token != null);

        return items;
    }
 

Почему у нас так много запросов GET? Как нам свести к минимуму эту болтовню?

Комментарии:

1. Сколько данных у вас в таблице с FromJJJBaptistBilling ключом раздела? По сути, ваш запрос выполняет сканирование разделов, и несколько запросов означают, что для доступа к запрошенным вами данным в этот раздел выполняется несколько запросов.