是否有一种方法可以在启动时加载mongodb索引到ram中



我正在测试mongodb。我有3个集合,其中一个是用户集合,有1000万份文档。对集合建立索引后,查询大约需要0.002毫秒。不管怎样,在重新启动ubuntu 12.04之后,同样的查询大约需要200毫秒。这就好像集合上没有索引一样。这是mongodb重启盒子后的正常行为吗?是否有一种方法来加载索引到ram启动?

正常的MongoDB行为是将应用程序使用的数据和索引分页到内存中,并将页面输出的决定留给操作系统的内存管理。应用程序通常使用的数据和索引称为"工作集"。

一个已经运行了一段时间的mongod服务器应该已经在内存中有了自然的工作集,所以你不应该需要(或者想要)计划每晚重新加载数据/索引,除非你了解这样做的影响。

有几种不同的场景可以"预热"服务器以将适当的数据加载到内存中。

注意:慎用

一般来说,这些方法应该只在"冷服务器"(即初始启动时)上使用,而不是在夜间使用。如果您的数据&索引大于MongoDB可用的内存。您还可以通过强制将不经常使用的数据或索引加载到RAM中,从而最终使用比必要更多的内存。

场景#1:加载给定集合的所有数据或索引

在MongoDB 2.2+中,您可以使用touch命令将所有数据或索引从磁盘加载到内存中。如果您需要处理集合的完整数据或索引,并且有可用的内存来存储这些数据或索引,那么这将非常有用。

场景#2:基于当前工作集加载子集

如果您想加载与当前工作集对应的数据子集,您可以运行一些查询来"预热"数据库。Parse的开发人员已经开源了一些实用程序,通过采样和重放当前操作来帮助提供更具体的预热:场景#3:运行应用程序的常用查询来预加载

您可以为您的应用程序运行一组典型查询,与为集合或当前操作的示例加载"所有"数据/索引相比,这可能会加载更实际的工作集。

最新更新