Я пытаюсь сделать перекрестный запрос в Azure CosmosDB без ключа раздела.Пропускная способность установлена на 4000, я получаю 250RU / с на диапазон ключей раздела.
Моя коллекция cosmos db содержит около 1 миллиона документов и имеет общий размер 70 ГБ.Они равномерно распределены по примерно 40 000 логических разделов, а размер документов json составляет в среднем 100 КБ.Вот как выглядит структура моих json-документов:
"ArrayOfObjects": [
{
// other properties omitted for brevity
"SubId": "ed2a49fb-51d4-45b4-9690-df0721d6a32f"
},
{
"SubId": "35c87833-9bea-4151-86da-4d9c482ae1fe"
},
"ParitionKey": "b42"
Вот как я сейчас запрашиваю без ключа раздела:
public async Task<ResponseModel> GetBySubId(string subId)
{
var collectionId = _cosmosClient.CollectionId;
var query = $@"SELECT * FROM {collectionId} c
WHERE ARRAY_CONTAINS(c.ArrayOfObjects, {{'SubId': '{subId}'}}, true)";
var feedOptions = new FeedOptions { EnableCrossPartitionQuery = true };
var docQuery = _cosmosClient.Client.CreateDocumentQuery(
_collectionUri,
query,
feedOptions)
.AsDocumentQuery();
var results = new List<ResponseModel>();
while (docQuery.HasMoreResults)
{
var executedQuery = await docQuery.ExecuteNextAsync<ResponseModel>();
if (executedQuery.Count != 0)
{
results.AddRange(executedQuery.ToList());
}
}
if (results.Count == 0)
{
return null;
}
return results.FirstOrDefault();
}
Я ожидаю, что смогуполучить документ через один из SubId
сразу после его вставки.На самом деле происходит то, что он не может получить документ и возвращает ноль обратно даже после того, как запрос завершит выполнение, опустошив все токены продолжения.Эта проблема является периодической и противоречивой, поскольку иногда она может получить документ после его вставки, а иногда нет.
Для тех документов, которые не удается получить после вставки, если вы подождете некоторое время (пару минутобычно) и повторите запрос с тем же SubId
, который он может затем извлечь документ.Кажется, что есть задержка.
Я проверил метрики cosmosdb на портале Azure, метрики показывают, что я вообще не превысил подготовленных RU / s для раздела или что в какой-либо степени было ограничение вмои запросы (HTTP 429).
Учитывая вышесказанное, почему я по-прежнему вижу проблемы с кросс-разделенными запросами даже при достаточной пропускной способности?