就像std::unordered_map<std::string, std::string>
但所有的數據應該被存儲在在磁盤而不是在內存中。implement:一個字符串到字符串數據庫
據我所知,應該完成兩個部分:索引和存儲。我學習了一些關於索引的數據結構,例如Linear-Hash或B-Tree,並且寫入磁盤上的int-> int數據庫並不難。問題在於存儲。
對於整數,所有記錄大小相同。一旦我們通過索引獲得了記錄的位置,我們就可以輕鬆地提取,修改或懶惰刪除。但對於字符串來說,記錄的大小很靈活。它應該有(至少)存在以下問題:
的put()更長的字符串:我們不能簡單地覆蓋舊的記錄,我們戴夫做德爾()和put()和老唱片的空間被浪費了。
del():舊記錄的空間也被浪費了,不能再次使用。 (也許我們可以用垃圾回收器收集已刪除的空間,但是它會佔用額外的空間併產生碎片)
對於int-> int數據庫,浪費幾個整數的空間不是一個大問題。但字符串更長,它會浪費更多的空間。
我需要一些建議/提示來解決問題。
我認爲它與文件系統有點不同。數據庫中的字符串可以小至幾個字節。大塊會浪費太多空間,小塊會增加IO時間。 – richselian
您也可以擁有幾種不同尺寸的塊,並且隨着字符串的增長或縮小將其移動到適當大小的塊。 –