mongodb简单的查询速度,如果索引比可用的RAM大得多

时间:2014-01-30 09:07:27

标签: mongodb

我有一个非常简单的数据结构。我们假设集合中的文档看起来像这样:

{
 _id: "...",
 indexedField: "value 1",
 ...
}

indexedField数据将被编入索引。

对我来说问题是该文件的数量将非常大。让我们想想10亿。但是处理该数据库的机器没有很多内存,可能就像4Gb,而不是更多。

我需要运行的大多数查询都是这样的:

db.collection.find({indexedField: "queryValue"}).skip(offset).limit(100)

所以问题是 - 它是否会表现良好,或者由于内存交换而表现不佳。

1 个答案:

答案 0 :(得分:2)

这取决于两个因素:

  1. 被索引的数据字段,如果数据字段是整数,索引大小不会太大,你应该没问题。您可以通过使用基于整数的键覆盖mongodb“_id”来进行一次优化(如果它们是唯一的(请记住自动分片和未来的缩放)。

  2. db.collection.find({indexedField: "queryValue"}).skip(offset).limit(100)

  3. 此查询很昂贵,并且在增加偏移量时继续变慢,因为mongodb将获取完整记录,然后执行扫描以跳过并提供LIMIT N文档。 因此,如果大量文档与“queryValue”匹配且偏移量很高,则查询将会很慢。