2015-02-10 92 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