Проблемы с разделенной коллекцией CosmosDB - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь сделать перекрестный запрос в 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).

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

...