2013-03-01 22 views
2

從我以前的問題:Data structure for storing huge number of indices, each pointing to a set,我得到了一個適合倒排索引實現的數據結構的答案。不過,我們很快就會在我們的Linux服務器上達到128 GB RAM的限制,所以我想爲它做好準備,以防我們再次耗盡內存。管理超過所有可用內存的數據結構

現在,我們得到了倒數索引中的索引總數高達39億,而我們的RAM大約需要50 GB。請注意,雖然有些人可能會建議用於數據庫系統等,但這是用於實驗研究的,我們希望管理自己的數據,而且我們不會使用任何類型的數據庫系統。我也被指出When should I use mmap for file access?雖然這看起來很有希望,但我看了一遍,看到我需要先爲mmap分配一個固定空間,然後開始放入數據。但是,我的第一個問題(1 )是因爲我們有更大的數據,我知道我的倒數索引會更大,但我不知道確切的數字,直到我建立它。 (在將這樣的數據推入翻轉索引之前需要先處理一些數據)我可以爲它分配大量的內存,但是,嘿,我們已經獲得了50GB的RAM,並且只有當前的翻轉索引。這導致第二個問題(2),我們的服務器有很多人在使用,而且有50 GB或更多的空間,我們的數據將在硬盤中變得分散。

或者,如果我使用文件I/O來管理這個並使B-Tree像分層目錄一樣,該怎麼辦?事情可能會變得醜陋...

所以這一次,我想問一些建議,就像我在上面的問題,但這次,我將需要在RAM和硬盤之間交換一些數據,我們128 GB的RAM可能不會成立。

回答

1

我會爲系統添加更多的交換空間,並讓內核負責交換,如果可能的話。

如果這是不可能的,我會考慮通過索引鍵對塊中的數據進行聚簇,而不是在訪問時對內存中的塊進行壓縮/解壓縮,或者將它們交換到磁盤。