1

在使用 myisam 多年后,3 个索引 + 大约 500 列用于 Mio 行,我想知道如何“强制”mongodb 将索引存储在内存中以实现快速读取性能。

一般来说,它是一个简单的结构化表,所有查询都是 WHERE index1=.. or index2=... or index3=.. (myisam) 并且在 mongodb 中也非常简单。如果 mongodb 自己管理索引和 ram,那就太好了。但是,我不确定它是否确实如此,以及 mongodb 能否以最好的方式加速这些索引上的查询。

谢谢

4

2 回答 2

2

如果 mongodb 自己管理索引和 ram,那就太好了。

MongoDB 根本不管理 RAM。它使用内存映射文件,基本上“假装”一切都是 RAM。

相反,操作系统负责管理哪些对象保存在 RAM 中。通常基于 LRU。

您可能需要检查索引的大小。如果您不能将所有这些索引都保留在 RAM 中,那么 MongoDB 的性能可能会很差。

但是,我不确定它是否确实如此,以及 mongodb 能否以最好的方式加速这些索引上的查询。

MongoDB 可以使用覆盖索引直接从数据库中检索。但是,您必须非常具体地了解返回的字段。如果包含不属于索引的字段,则它不会返回“仅索引”查询。

默认行为是包含所有字段,因此您需要查看特定查询并进行适当更改以允许“仅索引”。请注意,这些查询不包括_id,这可能会导致问题。

于 2012-06-04T23:43:03.347 回答
1

您不需要“强制”mongo 将索引存储在内存中。索引在您使用时被带入内存,然后一直保留在内存中,直到操作系统将其踢出。

MongoDB 将在可能的情况下自动使用覆盖索引。

于 2012-06-04T21:17:17.237 回答