2015-02-10 90 views
1

我想知道mongo是如何拆分数据库之间的可用内存的。我有多个数据库在一个可变大小的mongod中运行,我想知道我的工作集将如何分配。我们假设我每天都会收集数据,这些数据将在一天之后访问(所以我的用户每天只查询最后一天,而不回头查看)。我的问题是我是非常可变大小的数据集和如此多变的工作集。这是具有以下设置:mongod工作集是如何在数据库之间分区的

  • DB1 - 尺寸100(45%)
  • DB2 - 尺寸100(45%)
  • DB3 - 尺寸10(5%)
  • DB4 - 大小10(5%)

现在我想知道单个数据库工作集将如何在内存中分区为内存大小? 45/45/5/5?

所以在我的情况下,我有db1昨天晚上一起加载,感觉像分区不再是45/45/5/5但88/10/1/1(意思是db1工作集正在超越内存,值是任意的)。

如果是这样的话,有没有一种方法可以确保个人数据库会保持内存空间?

回答

1

在MongoDB < = 2.6的基于mmap的存储引擎中,操作系统根据内存映射文件中MongoDB的访问模式选择数据是否在内存中。除了通过访问数据的方式之外,MongoDB不控制内存中的内容或内存不足(您也不能通过MongoDB控制它)。你需要继续访问数据库(你可能会说你需要让数据库保持“预热”)。为了使系统中的数据库专用于内存压力较大的系统,

+0

这是否意味着在版本3.0和更高版本中,我不会必须“让我的数据库变暖”? – mcorbe 2015-02-10 17:00:30

+0

3.0将mmap作为默认存储引擎(从2.6改进,但我的答案仍然适用)。可选的WiredTiger存储引擎处理内存的方式非常不同 - 它拥有自己的缓存 - 但我不太了解它如何管理缓存以说明它在这种情况下的行为。 – wdberkeley 2015-02-10 17:04:02

+0

任何可能成为mmap中的一个功能的可能性? – mcorbe 2015-02-11 09:30:51