cassandra最終一致性相關演算法資料結構

oxoxooxx發表於2011-08-16

Merkle Tree(MT)是一個非常容易理解的資料結構,簡單來說就是一顆hash樹,在這棵樹中,葉子節點的值是一些hash值、非葉節點的值均是由其子節點值計算hash得來的。在Dynamo中,每個節點儲存一個範圍內的key值,不同節點間存在有相互交迭的key值範圍。在去熵操作中,考慮的僅僅是某兩個節點間共有的key值範圍。MT的葉子節點即是這個共有的key值範圍內每個key的hash,透過葉子節點的hash自底向上便可以構建出一顆MT。 Dynamo首先比對MT根處的hash,如果一致則表示兩者完全一致,否則將其子節點交換並繼續比較的過程。

1.Dynamo中每個子節點儲存一個範圍內的key值,如何比較不同節點上相同key範圍的hash?
2.MT與線段樹資料結構的比較
線段樹:

CommitLog類>
3.雙端佇列資料結構
private final Deque segments = new ArrayDeque();
4.commitlog segment 大小硬編碼
private volatile int segmentSize = 128*1024*1024; // roll after log gets this big
commitlog有一個固定大小的commitlogHeader結構,
其包含兩個重要的資料結構,每個CF在兩個陣列中都有一個對應的元素:
點陣圖陣列(BitSet Dirty)
->若CF對應的Memtable中有髒資料,則置為1,否則為0;在恢復的時候可以指明那些CF需要從commitlog中恢復。
整數陣列(int[] lastFlushedAt )
->儲存的是CF上次Flush時日誌的偏移位置,恢復是可以從這個位置讀取commitlog。

5.bloom filter演算法
http://blog.csdn.net/wh62592855/article/details/5750337

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23937368/viewspace-1053924/,如需轉載,請註明出處,否則將追究法律責任。

相關文章