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

比特幣程式碼分析11 比特幣儲存機制

比特幣儲存機制
  比特幣儲存系統由兩部分組成: 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庫檔案。