1. 程式人生 > >比特幣代碼分析11 比特幣存儲機制

比特幣代碼分析11 比特幣存儲機制

set 數據庫 流數據 leveldb ron 組成 使用 我們 bytes

比特幣存儲機制
  比特幣存儲系統由兩部分組成: kv 數據庫(levelDB)索引和普通數據文件。普通文件用於存儲區塊鏈數據,kv 數據庫用於存儲區塊鏈元數據。用於存儲區塊鏈數據的普通文件以 blk00000.dat , blk00001.dat 文件名格式組成。其中 index 目錄存儲用於存儲區塊元數據。
普通區塊數據文件
  為了快速檢索區塊數據,每個文件的大小是128 M Bytes。區塊裏的數據(區塊頭和區塊裏的所有交易)都會序列成字節碼的形式寫入 dat 文件中。在序列化的過程中,如果檢測到當前寫入文件尺寸加上區塊尺寸大於 128 M Bytes,則會重新生成一個 dat 文件。
kv數據索引
  區塊的索引元數據格式如 <blockHash,xxxxx+npos> 格式, 其中 xxxxx 為 dat 文件序號,npos 為區塊寫入 dat 文件的起始位置。?
  交易的元數據格式如 <txHash, xxxxx+npos+nTxOffset> 格式, 其中 xxxxx、npos 和上面的描述一致,nTxOffset 為寫入 dat 文件的起始位置(基於npos 位置)。
  上述所有元數據都將寫入 kv 數據庫中,其中 blockhash/txHash 將作為後續查詢具體數據在 dat 文件中的索引使用。
LevelDB
  Google 的 LevelDB 數據庫存儲區塊鏈元數據。Leveldb是一個google實現的非常高效的kv數據庫,並且是開源的。
  它的一個主要特點就是寫的性能非常好,適用於比特幣客戶端這種應用場景。
  levelDB雖然是個數據庫,但是並不像其它的主流數據庫(mysql ,oracle等)可以提供客戶端連接服務。它只是一個基於c++的lib庫而已,所以我們使用起來也很簡單,直接在工程裏鏈接lib庫文件。

比特幣代碼分析11 比特幣存儲機制