Bitcoin-Core
從 Berkeley DB 遷移到 LevelDB
2013 年發布了一個新的比特幣核心,其中一個所謂的改進是從 Berkeley DB 遷移到 LevelDB。根據bitcoin.org的發行說明:
LevelDB 是來自 Google 的快速、開源、非關係型數據庫,現在用於儲存事務和塊索引。LevelDB 在 I/O 慢的機器上工作得更好,而且通常更快。
比特幣核心開發人員也做了類似的聲明:
LevelDB - 對Google自己的數據庫系統的開源重寫 - 旨在提高商品硬體的效率和一致性,並且 在某些設置中**優於 BDB 一個數量級。**LevelDB 的初步 測試顯示出非常好的結果。
然而,現在網上有幾條評論批評LevelDB。根據Wikipedia 上的 LevelDB 頁面:
LevelDB 以不可靠而廣為人知,它管理的數據庫容易損壞。對LevelDB過去版本的學術研究發現,在某些文件系統下,這些版本的LevelDB中儲存的數據可能會在系統崩潰或電源故障後變得不一致。LevelDB 損壞如此普遍,以至於必須將損壞檢測內置到使用它的應用程序中。
綜上所述,對 LevelDB 的抱怨有:
- 不可靠,數據庫容易損壞
- 由於基本缺陷導致的幾個錯誤
- 程式碼質量差
- 不再積極維護(即死項目)
問題 1
這些關於 LevelDB 的抱怨是否正確?
問題 2
將 Bitcoin Core 從 Berkeley DB 遷移到 LevelDB 的最終餘額是多少?LevelDB 是否按預期工作?這次遷移是正確的選擇嗎?
作為當時參與遷移的人,我相信這是正確的決定。LevelDB 遠非完美,但我不知道還能使用什麼。
特別是:
- BDB 對於我們的使用來說要慢得多(大型原子批量寫入,小型隨機讀取)。
- BDB 也有數據庫損壞的報告,當時它的使用頻率遠低於現在的 LevelDB。
- BDB升級非常痛苦。我的印像是,它是為僅在專業監督下進行數據庫升級的設置而設計的。特別是,為持久性創建的寫入日誌文件有時無法被更高版本讀取。這就是為什麼比特幣核心版本多年來一直堅持使用 BDB 4.8 作為錢包的原因。
- BDB 有許多需要配置的資源限制,其中選擇不當的值可能會導致網路範圍內的故障(具體請閱讀 2013 年3 月的事件)。我認為這
Reviewing the Lock subsystem statistics is the best way to determine this value.
對於我們的案例來說是不可接受的。雖然這些天數據庫損壞的報告相對頻繁,但我認為這主要是硬體故障或驅動程序問題。與大多數軟體相比,Bitcoin Core 對磁碟、記憶體和 CPU 的壓力往往更大,這使得原本不可見的問題突然出現。