星期二, 12月 05, 2006

HyperEstraier 與 qdbm 的一些雜記

的使用了 的 Database 的部份以外,還使用了自己寫的輪子,cabin(3)。

這套輪子功能相當多,提供了許多 Data Structure Function 與 Algorithm 使用,不過如果真的要用的話,我也許會選擇其他 的 library (),像是 libisc (從 裡抽出來的)。

這次遇到 看起來有 memory-leak 的問題是 cabin(3) 的 cbmapout() 產生的。cbmap* 是處理 Hash 的 Data Structure Function,cbmapout() 會將元素從 Hash 中移出,不過我測試的結果發現移出後並不會釋放記憶體,於是就會造成 memory-leak 的「假象」,不過實際上這些記憶體會重複被使用,並沒有 memory-leak 的情況發生。這可能是因為 resize 的 overhead 考量而故意設計的。

所以塞資料進 要注意在塞一定的數量後對每個 node 下一次 sync 指令,強迫將快取的內容寫回硬碟後清掉,另外一個方法是把上一篇對 estmaster.c 的 patch 拿掉,這樣理論上在固定一段時間沒有動作後就會寫回去。(不過就不能一次大量寫進去,快取的大小會超過 process size...)

沒有留言: