Database
為什麼 bitcoind 使用 LevelDB 的一個分支進行鍵值儲存?
由於 0.8 bitcoind 使用 LevelDB 來儲存 UTXO 集合 in
chainstate/
和塊索引 inblocks/index/
。在 github 上可以找到 LevelDB 的特殊分支:<https://github.com/bitcoin/leveldb>
與其他嵌入式數據庫解決方案相比,是什麼原因使 LevelDB 成為鍵值儲存的最佳選擇?bitcoind 自己的 LevelDB 分叉與官方版本有何不同?
分叉有兩個目的:
難以帶到上游的本地修改:
- Windows 支持(部分基於現有的 Windows 埠,但需要更改以在 MinGW 中建構)
- 刪除壓縮支持,因為它沒有幫助,並且使建構複雜化。
嚴格控制變化。鑑於之前的 BDB 到 LevelDB 轉換導致網路分叉的經驗,明智的做法是不要使用系統範圍內安裝的庫版本。假設,即使從 LevelDB 的角度來看,更改是一個錯誤修復,我們可能希望保持錯誤行為以防止網路中的分叉,具體取決於錯誤。