В настоящее время у меня есть документы, моделирующие электронные письма, которые немного похожи на следующие
{
"AccountId": "AccountId",
"Brand": "MyBrand",
"Product": "MyProduct",
"Metadata": {
"Campaign": "EmailCampaign1",
"Metadata2": "Some other info",
},
"Status": {
"State": "delivered",
"DeliveryEvents": [
{
"Event": "delivered",
"DateTimeOccured": "2019-03-14T12:25:12Z",
},
{
"Event": "processed",
"DateTimeOccured": "2019-03-14T12:25:09Z"
}
]
},
"id": "AnId",
"CreatedAt": 1552566306,
"Stats": {
"DeliveryStats": {
"processed": true,
"deferred": false,
"delivered": true,
"dropped": false,
"bounce": false
}
}
}
Для справки, AccountId
в настоящее время является ключом раздела.
И я хотел сделать COUNT
на DeliveryStats
, где вы могли бы фильтровать по одному или нескольким из следующих:
AccountId
Brand
Metadata
(поиск пары ключ-значение)CreatedAt
(например, между двумя датами).
Вот пример запроса, который у меня сейчас есть для получения количества обработанных элементов с некоторыми фильтрами. В идеале я хотел бы подсчитать все разные DeliveryStats
, но сейчас это не представляется возможным.
SELECT VALUE COUNT(1) FROM c WHERE c.Stats.DeliveryStats.processed = true AND c.Brand = 'MyBrand' AND c.Metadata.Campaign = 'EmailCampaign1'
Все запрашиваемое индексируется.
Теперь это довольно быстро для небольших наборов данных, как и следовало ожидать, но как только вы начинаете получать миллионы, кажется, что загружается каждый документ (или я действительно неправильно читаю метрики запроса).
Мой вопрос в том, правильно ли написан этот запрос? Есть ли что-нибудь еще, что я могу сделать, чтобы ускорить этот запрос?
Открыты для реструктуризации данных или хранения дополнительных данных.