1. 程式人生 > >大數據:數據分片和數據路由(二)

大數據:數據分片和數據路由(二)

ati erl cor 距離 結束 分享圖片 函數 信息 方式

分布式存儲中常見的一項技術就是 :分布式哈希表。它是哈希表的分布式的擴展,就是在多臺機器的情況下,每個機器只存儲一些數據,如何通過 哈希方式數據 進行增,刪,改,查等一些數據操作。

一致性哈希算法就是其中的一種實現方式。

    

                      技術分享圖片

上圖是表示長度為5的二進制數值的 一致性哈希算法 的環狀序列 的示意圖 (m=5),所以這個哈希數值空間可以表達的值是從 0~31。

每個機器可以通過 Ip和端口號 經過 哈希函數 映射到 哈希數值空間內。 所以上面的每個 大圓 均表示了 一個機器節點。 N (x)中的 X 表示的是哈希數值內對應的哈希數值。

舉例:N20節點 存儲的是 落在 N14到N20的哈希空間範圍內的數據(經過哈希後的),N5存儲的是N29後落在 30~31,0~5範圍內的數據。

 


一致性哈希算法的路由:

  一種高效的路由查找方式就是: 每個機器節點都配置路由表。

  原因:它原先是依靠有向環查找的,這樣查找效率不太高,首先接收到 查詢請求 的機器節點要根據函數 解出要查找的主鍵的哈希值,從本身節點的範圍內先查找這個哈希值,如果不在就將它交個後趨節點,這樣直到查找那個範圍內有哈希值 的那個機器節點。

  

  輸入:機器節點N(i)發起初始查詢請求,查詢主鍵 Key對應的值H(Key)=j。

  輸出:N(i)給出對應的鍵值Value,或者返回鍵值不存在的信息。

  算法:通過不同節點之間發送消息來寫作完成。假設當前執行的節點為N(c),其初始值是N(i),N(c)的後趨節點為N(s).重復執行下列步驟。

  步驟一:判斷 c<=j<=s,如果是,結束查找,說明key如果存在,就在N(c)的後趨節點N(s)上,所以N(c)發消息給N(s)查找Key的值value,查找到後,N(s)將結果返回給N(i)。(每個消息都包含消息源 N(i).)

  步驟二:否則,N(c)查找其對應的路由表,找到小於 j的最大編號N(h),N(c)向N(h)發送消息,請求它代表N(i)查找Key的值value,N(h)此時成為當前節點N(c), 繼續按照步驟一和步驟二遞歸執行。

      比如:

        N(14)節點接到查詢Key的鍵值請求,其中 H(Key)=27。

    操作過程下圖(紅線部分):

            技術分享圖片

    通常情況下,路由算法發送的消息不會多於m條,因為這個過程類似於 在 0~(2的m次方-1)數值空間上的二分查找法,每次當節點 N(c)通過路由表把消息發送給節點N(h),N(h)到目標所在節點N(d)的距離不會超過N(c)到N(d)的距離的一半,所以其可以通過不超過 m 條消息查找整個數值空間。

  

  
  

  

大數據:數據分片和數據路由(二)