Bitcoin-Core

從 Berkeley DB 遷移到 LevelDB

  • February 17, 2017

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 的壓力往往更大,這使得原本不可見的問題突然出現。

引用自:https://bitcoin.stackexchange.com/questions/51435