Merkle Tree演算法詳解

2021-09-02 13:55:49 字數 1461 閱讀 8335

merkle tree是dynamo中用來同步資料一致性的演算法,merkle tree是基於資料hash構建的乙個樹。它具有以下幾個特點:

1、資料結構是乙個樹,可以是二叉樹,也可以是多叉樹(本blog以二叉樹來分析)

2、merkle tree的葉子節點的value是資料集合的單元資料或者單元資料hash。

3、merke tree非葉子節點value是其所有子節點value的hash值。

為了更好的理解,我們假設有a和b兩台機器,a需要與b相同目錄下有8個檔案,檔案分別是f1 f2 f3 ....f8。這個時候我們就可以通過merkle tree來進行快速比較。假設我們在檔案建立的時候每個機器都構建了乙個merkle tree。具體如下圖:

從上圖可得知,葉子節點node7的value = hash(f1),是f1檔案的hash;而其父親節點node3的value = hash(v7, v8),也就是其子節點node7 node8的值得hash。就是這樣表示乙個層級運算關係。root節點的value其實是所有葉子節點的value的唯一特徵。

假如a上的檔案5與b上的不一樣。我們怎麼通過兩個機器的merkle treee資訊找到不相同的檔案? 這個比較檢索過程如下:

1、首先比較v0是否相同,如果不同,檢索其孩子node1和node2.

2、v1 相同,v2不同。檢索node2的孩子node5 node6;

3、v5不同,v6相同,檢索比較node5的孩子node 11 和node 12

4、v11不同,v12相同。node 11為葉子節點,獲取其目錄資訊。

5、檢索比較完畢。

以上過程的理論複雜度是log(n)。實際過程是大於這個複雜度的,因為不同value的節點需要每個子節點進行比較。過程描述圖如下:

從上圖可以得知真個過程可以很快的找到對應的不相同的檔案。

如果a機器的目錄下增加了乙個檔案f9。整個merkle tree就會變成這樣的:

其中紅色字型是需要進行運算的步驟,整個過程是從葉子節點發起的,直接回溯到root節點為止。

假如目錄下的f1被刪除。整樹的運算變化圖如下:

紅色字型是需要進行的運算。

從上可以得知,merkle tree在大資料集合校驗可以提高校驗的效率的。從dynamo**中可以看出,大量使用merkle tree來同步分布式節點的檔案和寫操作,尤其是在服務節點異常後的情況,具體細節可以參看dynamo**中的描述。

區塊鏈MerkleTree演算法實現

merkletree被廣泛的應用在位元幣技術中,merkle tree 是一種資料結構,用於驗證在計算機之間和之間儲存,處理和傳輸的任何型別的資料。目前,merkle樹的主要用途是確保從對等網路中接收的資料塊未受損和未改變,和檢查其他對等網路沒有撒謊傳送假資料塊。位元幣中每個塊中都包含了所有交易的集...

Merkle Tree及其應用

merkle tree,是一種樹 資料結構中所說的樹 網上大都稱為merkle hash tree,這是因為 它所構造的merkle tree的所有節點都是hash值。merkle tree具有以下特點 1.它是一種樹,可以是二叉樹,也可以多叉樹,無論是幾叉樹,它都具有樹結構的所有特點 2.merk...

Merkle Tree及其應用

merkle tree,是一種樹 資料結構中所說的樹 網上大都稱為merkle hash tree,這是因為 它所構造的merkle tree的所有節點都是hash值。merkle tree具有以下特點 1.它是一種樹,可以是二叉樹,也可以多叉樹,無論是幾叉樹,它都具有樹結構的所有特點 2.merk...