我有一个非常简单的数据结构。我们假设集合中的文档看起来像这样:
{
_id: "...",
indexedField: "value 1",
...
}
indexedField
数据将被编入索引。
对我来说问题是该文件的数量将非常大。让我们想想10亿。但是处理该数据库的机器没有很多内存,可能就像4Gb,而不是更多。
我需要运行的大多数查询都是这样的:
db.collection.find({indexedField: "queryValue"}).skip(offset).limit(100)
所以问题是 - 它是否会表现良好,或者由于内存交换而表现不佳。
答案 0 :(得分:2)
这取决于两个因素:
被索引的数据字段,如果数据字段是整数,索引大小不会太大,你应该没问题。您可以通过使用基于整数的键覆盖mongodb“_id”来进行一次优化(如果它们是唯一的(请记住自动分片和未来的缩放)。
db.collection.find({indexedField: "queryValue"}).skip(offset).limit(100)
此查询很昂贵,并且在增加偏移量时继续变慢,因为mongodb将获取完整记录,然后执行扫描以跳过并提供LIMIT N文档。 因此,如果大量文档与“queryValue”匹配且偏移量很高,则查询将会很慢。