我需要在ssd上創建一個trie。我不能使用太多的內存,因爲這個內存很大,但是4 GB內存沒有問題。在ssd上創建trie。如何管理對象移動到其他位置?
目前,我認爲這樣做是通過以下方式:
- 使用一個內存映射文件
- 有對象序列化與protobuf的,不斷變化的指向其他對象以文件的位置和長度
現在我正在尋找可以提供幫助的工具。當對象(節點)變大時我遇到問題。我需要在這個對象的文件中找到一個新的位置,改變這個對象的所有鏈接。然後我在文件中留下了空白。然後,我需要壓縮我的樹並更改所有對象的所有位置以縮小一些間距。在每個物體之後留下一些空間會導致非常多的空間要求。
你知道圖書館或有一些提示,以解決這個問題,或可以幫助編程這一切?
但是在任何節點上最多可以有65536個子節點(基於下一個字符)。所以你的建議是有一種子節點類型附加到8個項目的每個節點,他們有8個子項目等?那麼子節點類型就像一棵二叉樹?這樣做,我將需要在每次更新時遍歷(更新)整個二叉樹。你將如何處理不僅有一個字符但多於一個(「t」與子節點「ree」 - patricia trie)的節點? – Chris 2012-07-10 18:20:10
不,不是,孩子列表更像是一個鏈接列表,每個條目每次有8個或任何兒童(真正的優化)。所以你應該有'['a'[ch1 ch2 ch3 ch4 ch5 ch6 ch7 ch8 ch2] - > 2ndpart]'和'2ndpart'(一個內存偏移量)可以保存'[ch9 ch10 ch11 ch12 ch13 ch14 ch15 ch16 ch16] - > 3rdpart]'等等。 – Blindy 2012-07-10 18:22:54
而且我不會處理那樣的節點。 '樹'是't'->'r'->'e'->'e'。如果像這樣添加「高音」這樣的單詞,它不會改變樹的外觀。 – Blindy 2012-07-10 18:24:27