我們有我們內部的noSQL db,它基本上將所有內容都存儲在一個緊湊的二進制文件中。現在,我需要一個類似於鍵值存儲或B +樹的數據結構。問題是在我的情況下,'價值'可以是不同的類型,並且大小非常不穩定,可能從1Kb到1Gb。通常,鍵是一個字符串,值是數據流,可以是int,string或自定義類型的流。按文件夾名稱存儲的鍵值存儲
我在考慮實現一個B +樹,但這並不容易,因爲B +樹需要'值'是相同類型的,並且'值'的大小應該足夠小以便可以存儲在相對小塊。可能有一個變體,但我沒有找到一個關於如何實現B +樹的教程,其中的例子展示瞭如何在磁盤上存儲。我看到的大部分教程都只是內存中的B +樹。
然後我有了使用文件夾/文件名作爲關鍵的想法。然後該值可以是文件內的任何內容。然後值可以是任意大小,這真的是我想要的。所以我的問題是在這裏,在極端情況下,
- 數據不同日子是分開的文件夾商店
- 我可以有1M-50M鍵(實際上文件/文件夾)在磁盤上存儲的天
- 對文件的數據操作在白天通常是'只讀'和'追加'。歷史數據將永遠不會被修改。
我已經看到,我可以在現代操作系統上擁有大約40億個文件,所以我很高興用這種方法在一臺機器上進行〜2YR存儲。我只是擔心,如果這種實現鍵值存儲的方式非常糟糕?爲什麼?在處理文件系統時可以處理什麼問題? (窗口上的框架磁盤,例如?)
所有在Windows/Linux中都以C++實現。
如果您計劃將文件夾/文件作爲密鑰,您將使用什麼格式的密鑰? – sameerkn
鍵將我正常的字符串,併爲文件夾/文件命名是100%合法。 – ctNGUYEN
磁盤碎片對SSD來說不是問題。而且由於您似乎不刪除舊數據,因此您只需要一個遠低於SSD耐力極限的全磁盤寫入。 (通常爲1000+全盤寫入) – MSalters