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