從我以前的問題: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可能不會成立。