Я использую mongodb 3.6.8.
У меня есть коллекция (называемая states
) с полем ObjectId
(sensor_id
), date
, а также несколько другихполя.Я создал составной индекс для коллекции:
db.states.createIndex({ "sensor_id" : 1, "date" : 1 });
Я использую структуру агрегации со стадией совпадения, например:
{
"$match" : {
"sensor_id" : { "$oid" : "5b8fd62c4f0cd13c05296df7"},
"date" : {
"$gte" : { "$date" : "2018-10-06T04:19:00.000Z"},
"$lt" : { "$date" : "2018-10-06T10:19:09.000Z"}
}
}
}
Моя проблема: по мере увеличения коллекции состоянийагрегация конвейера становится все медленнее и медленнее, даже если добавляемые документы выходят за пределы дат в фильтре совпадений. Используя этот индекс, я действительно ожидал, что производительность не будет сильно изменяться по мере увеличения коллекции.
Другая информация:
- Коллекция состояний не имеет оченьмногие документы (около 200 000), из которых около 20 000 соответствуют вышеуказанному фильтру.
- Индексы в коллекции (и других коллекциях) занимают всего несколько мегабайт и легко помещаются в памяти.
- Конвейер агрегации не вставляет никаких документов в базу данных.
Может кто-нибудь предложить то, что я должен исследовать, чтобы объяснить довольно резкое падение производительности по мере роста коллекции (с новыми документами за пределами диапазона дат в$ match)?
Спасибо.