#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
ключом раздела? По сути, ваш запрос выполняет сканирование разделов, и несколько запросов означают, что для доступа к запрошенным вами данным в этот раздел выполняется несколько запросов.