对于一个小的MongoDB集合,设计是否安全,好像它都在内存中?

时间:2011-01-18 20:17:59

标签: session mongodb

MongoDB有很多用途,我想把它看作是一个集合,就好像它在内存中一样。例如,对于用户Session对象的集合(对于网站)。在使用MongoDB之前,我会将这些数据存储在memcached服务器等中。但是,对于这样的情况,必须同时运行memcached + MongoDB似乎很愚蠢。

假设对于经常访问的数据的小型(小〜=总系统RAM的1%)集合,该集合基本上始终保存在内存中是否相当安全?我总是要通过_id进行直接查找,并且没有数据索引。

如果Session集合保存在自己的数据库中,它会有助于这个假设吗?我问,因为MongoDB基于缓冲区缓存的内存映射方案的性质。

2 个答案:

答案 0 :(得分:1)

MongoDB本身不进行数据库存储内存管理,而是依赖于操作系统虚拟内存管理器。所以它非常依赖于操作系统。 VMM可以将整个数据库加载到内存中,即使它的大小为99%,也可以将其全部分页,因为其他应用程序都要求RAM。所以它还取决于使用模式。

任何体面的VMM都会尽可能地将MRU数据保存在内存中,因此无论是否在单独的数据库中,您的Session集合都可能始终在内存中 - 它被分成页面(通常为4k大小)。

您始终可以使用mongostat实用程序检查分页状态。它有页面错误计数器,表示对不在内存中且必须从文件加载的页面的访问次数。

答案 1 :(得分:0)

通常,将大型集合保留在内存中是很好的,只要您控制集合以进行内存泄漏(例如,最终释放未使用的对象)。这不是问题的原因是这些天的任何服务器都有虚拟内存,未使用的页面被交换到这里。这样,即使为某些经常不使用的对象分配了内存,系统的性能也不会受到影响。