我即将采用MongoDB进行新项目,我选择它是为了灵活性,而不是可扩展性,因此将在一台机器上运行它.从文档和Web帖子我不断阅读所有索引都在RAM中.这对我来说没有意义,因为我的索引很容易大于可用RAM的数量.
任何人都可以分享对索引/ RAM关系的一些见解,当单个索引和我的所有索引都超过可用RAM的大小时会发生什么?
MongoDB保留了RAM中索引的功能.他们将以LRU为基础进行交换.您经常会看到一些文档,建议您将"工作集"保留在内存中:如果您实际访问的索引部分适合内存,那么您会没事的.
它是工作集大小加上MongoDB的索引,理想情况下应始终驻留在RAM中,即可用RAM的数量理想情况下应至少为工作集大小加上索引的大小加上操作系统的其余部分(操作系统)和在同一台机器上运行的其他软件需要.如果可用的RAM小于那个,那么就会发生LRUing,因此我们可能会显着减速.要记住的一件事是,在索引btree中缓存桶,而不是单独的索引键,即如果我们在索引中包含统一的键分布(包括历史数据),我们可能需要更多的RAM中的索引有一个复合索引的时间加上别的东西.对于后者,同一btree桶中的密钥通常来自同一时代,所以这个警告不会发生.此外,我们应该记住,我们在BSON中的字段名称存储在记录中(但不是索引),所以如果我们处于内存压力下,它们应该保持简短.
那些对MongoDB当前虚拟内存使用感兴趣的人(当然也是关于RAM的)可以看看mongod的状态.
@see http://www.markus-gattol.name/ws/mongodb.html#sec7