Наш агрегированный запрос cosmos db кажется медленным и стоит много RU. Вот подробности (плюс см. Снимок экрана ниже): 2.4s и 3222RU для подсчета результирующего набора из 414k записей. И это только для одного счета. Обычно мы хотели бы произвести суммирование сразу по нескольким полям (возможно только в пределах одного раздела), но производительность для этого намного хуже.
В этой коллекции 2 миллиона записей. Мы используем Cosmos DB с SQL API. Эта конкретная коллекция разделена по country_code, и есть 414 732 записи во Франции («FR»), а остальные в США. Размер документа составляет в среднем 917 байт, возможно, минимум 800 байт, максимум 1300 байт.
Обратите внимание, что мы также пробовали гораздо более разреженный ключ разделения, такой как device_id (из которых здесь 2 миллиона, 1 документ на устройство), который дает худшие результаты для этого запроса. Поле c.calcuated.flag1 просто представляет «состояние», которое мы хотим вести подсчет (на самом деле у нас есть 8 состояний, по которым я хотел бы резюмировать).
Индексирование в этой коллекции - это значение по умолчанию, при котором используется «согласованный» режим индекса и индексируются все поля (включая индексы диапазона для Number и String). Параметр RU установлен на 20 000, и другие операции с БД отсутствуют.
Так что дайте мне знать, что вы думаете по этому поводу. Можно ли разумно использовать Cosmos DB, чтобы получить несколько сумм или подсчетов по полям, не увеличивая наши расходы на RU и не занимая много времени? Хотя 2,4 секунды - это не так уж и плохо, нам действительно нужны запросы менее секунды для такого рода вещей. Нашему приложению (основанному на IoT) часто требуются отдельные документы, но иногда также требуются такие подсчеты по всем документам в стране.
Есть ли способ повысить производительность?