Как интерпретировать `RequestCharge` для запроса Cosmos DB? - PullRequest
1 голос
/ 27 апреля 2020

Для проекта я рассматриваю использование Cosmos DB (SQL API) в качестве решения для своей базы данных. Читая документы о блоках запроса, я узнал здесь и здесь , что чтение 1 элемента размером 1 КБ занимает 1 RU (блок запроса).

Когда я выполняю запрос ниже (где я запрашиваю все элементы в пределах одного раздела (пол - PartitionKey), я получаю результат в 5000 единиц (пять блоков по 1000 единиц). Каждый элемент равен 1,5 КБ. по размеру, поэтому должно быть даже больше, чем 1 RU на элемент. Однако заголовок утверждает, что RequestCharge всего 88,12, для 1000 элементов. Следуя правилу 1 RU на элемент размером 1 КБ, на который я ожидал не менее 1000 RU.

Кто-нибудь знает, как правильно интерпретировать RequestCharge?

Код и запрос:

    public async Task<List<Profile>> GetAllProfilesByGender(string gender)
    {
        var container = GetContainer();
        var queryIterator = GetQueryIterator(container, gender);

        var profiles = new List<Profile>();
        while (queryIterator.HasMoreResults)
        {
            var resultSet = await queryIterator.ReadNextAsync();
            foreach (var profile in resultSet)
            {
                profiles.Add(profile);
            }
        }

        return profiles;
    }

    private FeedIterator<Profile> GetQueryIterator(Container container, string gender)
    {
        var query = new QueryDefinition($"SELECT * FROM c WHERE c.Gender = '{gender}'");
        return container.GetItemQueryIterator<Profile>(query);
    }

1 Ответ

3 голосов
/ 27 апреля 2020

Плата за единицу запроса (RU) не масштабируется линейно с количеством полученных документов. Здесь задействовано много факторов: сложность запроса, использование индексов и т. Д. c.

Понятие «Один чтение одного 1К документа стоит 1 РУ» - это нечто совершенно иное. Часто требуется один документ (именно поэтому есть вызов API read , а не вызов query ). Если вы сравните read vs query для того же самого документа, вы обнаружите, что версия query для поиска документа стоит больше, с точки зрения RU, чем читать версию (поскольку она должна вызывать механизм запросов, работать с индексами и т. Д. c).

В качестве примечания: я не уверен, что вы когда-нибудь захотите см. шкалу использования RU (в вашем примере 1000 RU на 1000 возвращенных документов) - это будет чрезвычайно дорого. За прошедшие годы механизм запросов претерпел множество оптимизаций, что привело к снижению стоимости sh RU.

...