5 5 區塊索引

2021-09-16 19:39:24 字數 2129 閱讀 7886

超級賬本提供多種區塊索引(block index)方式,以便能夠快速找到區塊。這些方式包括:

·區塊編號;

·區塊雜湊;

·交易編號;

·同時按區塊編號和交易編號;加 入 會 員 微 信 dedao555

·區塊交易編號;

·交易驗證碼。

5.5.1 檔案位置指標

索引的內容是檔案位置指標(file location pointer),位置指標的結構如下所示:

type filelocpointer struct 

type locpointer struct

檔案位置指標由3個部分組成:

·所在檔案的編號filesuffixnum;

·檔案內的偏移量offset;

·區塊占用的位元組數byteslength。

區塊查詢是乙個**索引過程,查詢乙個區塊就是先確定是哪個鏈,然後根據檔案編號找到對應的檔案,再根據檔案的偏移量和占用的位元組數確定區塊的內容,如圖5-3所示。

圖5-3 多鏈下區塊的**索引

檔案位置指標序列化後儲存到leveldb資料庫中,不同的索引方式對應的鍵如表5-1所示(「+」是邏輯符號,不是真實的鍵組成部分):

構建哪些索引型別是可配置的,預設是所有型別都建立索引(排序服務也會建立索引,但只有區塊編號這種索引型別)。有兩種途徑可以構建索引:

·提交區塊(commit block);

·同步索引(sync index)。

表5-1 區塊索引型別

提交區塊到賬本的時候會自動按照表5-1所示的區塊型別構建索引,下面來看一下索引的同步過程。

5.5.2 索引的同步過程

索引同步只在建立區塊檔案管理器(blockfilemgr)的時候執行,驗證資料庫裡儲存的索引是否和區塊檔案系統裡的一致。

資料庫記錄了兩個檢查點的資訊:

·索引檢查點資訊(indexcheckpointkey);

·區塊檢查點資訊(blkmgrinfo)。

索引檢查點資訊記錄的是最後建立索引的區塊編號。通過索引檢查點資訊的區塊編號,可以查詢到區塊編號對應的檔案位置指標,它代表了資料庫中記錄的最新狀態。這個狀態由於系統異常等原因可能和區塊檔案系統儲存的不一致。

區塊檢查點資訊記錄的是已提交到賬本的區塊資訊,資料結構如下:

type checkpointinfo struct 

區塊檢查點資訊記錄的是區塊檔案系統的乙個狀態,可能和索引檢查點資訊記錄的區塊編號不一致,也可能和區塊檔案系 統不一致。由於記錄過程是先提交區塊到區塊檔案系統,再記錄區塊檢查點資訊,最後是索引檢查點資訊,所以區塊檔案系統的資訊是最完整的。可以通過區塊檔案 系統同步區塊檢查點資訊和索引檢查點資訊。區塊檢查點資訊和索引檢查點資訊記錄的狀態可能不是最新的,代表的是過去某個時刻正確的狀態,索引同步可以從檢 查點記錄的狀態開始,更新為區塊檔案系統的最新狀態,減少同步時間。

區塊檔案管理器在建立的時候會從資料庫中獲取區塊檢查點資訊,並且需要和區塊檔案系統對比檢查其是否為最新的狀 態。檢查過程是基於區塊檢查點的檔案編號和檔案內由偏移構建的乙個區塊檔案流(blockfilestream),從這個偏移開始驗證該檔案是否還有區塊 資料。如果確實還有區塊,找到該檔案實際儲存的最大區塊編號,更新區塊檢查點資訊。這裡用的是區塊檔案流,它只會檢查單個檔案。這可能會存在乙個特殊情 況,就是上乙個區塊剛好寫滿這個檔案,達到了上限maxblockfilesize,這個區塊從下乙個檔案開始寫,寫完區塊資料以後,更新區塊檢查點資訊 的時候出現異常,這時會導致區塊檢查點資訊記錄和區塊檔案系統的永久性不一致。

經過上面的檢查後,區塊檢查點資訊就和區塊檔案系統完全一致了。根據區塊檢查點資訊,構建區塊流,從索引檢查點資訊記錄的區塊檔案和偏移開始,到區塊檢查點記錄的最新區塊的檔案編號為止,全部重新構建索引,並更新索引檢查點資訊。

'); (window.slotbydup = window.slotbydup || ).push(); })();

'); (window.slotbydup = window.slotbydup || ).push(); })();

5 5 區塊索引

超級賬本提供多種區塊索引 block index 方式,以便能夠快速找到區塊。這些方式包括 區塊編號 區塊雜湊 交易編號 同時按區塊編號和交易編號 加 入 會 員 微 信 dedao555 區塊交易編號 交易驗證碼。5.5.1 檔案位置指標 索引的內容是檔案位置指標 file location po...

6 1 區塊的作用

區塊鏈是由乙個個相連的區塊 block 組成。區塊很像資料庫的記錄,每次寫入資料,就是建立乙個區塊。每個區塊包含兩個部分 hash就是計算機可以對任意內容,計算出乙個長度相同的特徵值。區塊鏈的 hash 長度是256位,不管原始內容是什麼,最後都會計算出乙個256位的二進位制數字。而且可以保證,只要...

6 區塊描述 md

各種區塊的描述 很多朋友喜歡聽小甲魚的pe詳解,因為他們覺得課堂上老師講解的都是略略帶過,繞得大家雲裡霧裡剛好小甲魚文采也沒課堂上的教授講的那麼好,只能以比較通俗的話語來給大家描述 通常,區塊中的資料在邏輯上是關聯的。pe檔案一般至少都會有兩個區塊 乙個是 塊,另乙個是資料塊。每乙個區塊都需要有乙個...