【发布时间】:2018-10-06 18:17:32
【问题描述】:
我使用的是 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"}
}
}
}
我的问题:随着状态集合变得越来越大,管道聚合变得越来越慢,即使添加的文档超出了匹配过滤器中的日期。 使用这个索引,我真的希望随着集合变大,性能不会有太大变化。
其他信息:
- states 集合中的文档并不多(大约 200,000 个),其中大约 20,000 个被上述过滤器匹配。
- 集合(和其他集合)中的索引只有几兆字节,很容易放入内存中。
- 聚合管道不会在数据库中插入任何文档。
谁能建议我应该调查什么来解释随着集合的增长而性能急剧下降(新文档超出 $match 的日期范围)?
谢谢。
【问题讨论】:
标签: mongodb aggregation-framework mongodb-indexes