【发布时间】:2020-04-01 18:27:37
【问题描述】:
我有一个 mongodb 数据库,它有多个集合。还有一个额外的集合,它更像是系统中发生的所有事件的日志。我想知道,当我有一个很少使用的大型集合时,该集合的“_id”索引是否也在该集合上没有发生任何操作时放入 RAM 中?或者它只是在磁盘上等待,直到执行读取操作。 我主要担心这个集合的大小是否会影响其他查询的性能(由于集合的大小比可用 RAM 大几倍)。
【问题讨论】:
我有一个 mongodb 数据库,它有多个集合。还有一个额外的集合,它更像是系统中发生的所有事件的日志。我想知道,当我有一个很少使用的大型集合时,该集合的“_id”索引是否也在该集合上没有发生任何操作时放入 RAM 中?或者它只是在磁盘上等待,直到执行读取操作。 我主要担心这个集合的大小是否会影响其他查询的性能(由于集合的大小比可用 RAM 大几倍)。
【问题讨论】:
它们将被替换为 LRU basis。
索引不必在所有情况下都完全适合 RAM。如果索引字段的值随着每次插入而增加,并且大多数查询选择最近添加的文档;那么 MongoDB 只需将索引中包含最新或“最右边”值的部分保留在 RAM 中。
为确保此索引适合 RAM,您不仅必须拥有更多可用 RAM,而且还必须为 working set 的其余部分提供可用 RAM。 索引和工作集必须能够同时放入内存。
https://docs.mongodb.com/manual/tutorial/ensure-indexes-fit-ram/#indexing-right-handed
【讨论】: