可擴充套件性的hash演算法和系統

2021-06-06 19:19:21 字數 1015 閱讀 4454

hash演算法是計算機系統非常重要的演算法,它的目的就是要將任意型別的資訊均勻影射到乙個有限的連續空間上;它的用途可以用於資料的快速檢索(比如hashmap),也可以用於資料簽名(比如md5),也可用於安全系統(sha),也普遍用於p2p系統中的資訊檢索和路由;本文中提到的應用著重指資料檢索中使用的hash演算法。

在資料檢索的應用中,需要利用hash演算法將key對映到乙個有序範圍中,將具有相同hash值的key統一管理起來,理想情況可以達到o(1)的檢索效率,因此跟btree類的檢索演算法相比,具有更快的插入效率、檢索效率、也具有空間效率;但是當資料的規模超過有序範圍5倍以上的時候,hash演算法的查詢效率隨著規模的增長線性降低;因此具有可擴充套件性的hash演算法將是有效資料檢索的乙個方向。這裡著重介紹兩個hash演算法,分別是動態hash演算法和一致性hash演算法。

動態hash演算法可以參考dynamichashing ,主要是為了解決規模擴充套件的問題主體思路是在資料規模變大後,對映的範圍將翻倍,新資料的插入將按照最新的對映範圍插入,對於查詢,則逐層降級查詢,先查詢最新的範圍查詢,如果沒有,再將範圍縮短一倍進行查詢,逐層下去,直到最小範圍終止;該演算法可以有效支援資料規模的擴充套件,整體資料的查詢效率也維護在o(1)的效率;當前在bdb中的hash演算法就基於此演算法實現,並且廣泛應用的memcache服務中的索引擴充套件也是基於改演算法思想。

一致性hash演算法可以參考一致性hash 和 consistenthashing,主要是為了解決分布式系統如何擴充套件的問題,主體思路是保證資料分布的均勻性和單調性,讓資料均勻分散在各個節點上,並且在擴充套件的時候只是對乙個區間內的資料進行了重新整理,所以只影響了一部分的資料節點;當前 p2p系統中都普遍才了該演算法進行資料的定位,以及要amazon-dynamo/apache-cassandra系統中也是採用了該演算法作為基礎進行資料管理。

這兩類hash演算法都提供了一種擴充套件的思路,在不影響正常應用的情況實現了支援規模公升級。

系統的可擴充套件性

到底什麼是可擴充套件性?這年頭,作為軟體設計架構師如果系統沒有可擴充套件性對外交流時都不好意思。但是如何選擇可擴充套件性方案?水平擴充套件還是垂直擴充套件?是不是很矛盾呢,本文為你分析可擴充套件性的真實含義和實際專案中的取捨。每每和別人提及可擴充套件性的含義時,很多人開始討論提高效能,實施高可用性,...

CSS可擴充套件性

今日在寫pc官網的時候,一直對於html css的結構編寫完全按照自己的思維方式,今天把 交給老大的時候,被他指出很多編寫 的錯誤性,比如 結構,標籤的使用,語義化,css的可擴充套件性,由於 主要還是需要做seo優化,所以在標籤使用上也有些不合理之處,給了我一些建議,自己記錄以下 1 在html標...

Flume的可擴充套件性

flume的可擴充套件性 flume採用了三層架構,分別為agent,collector和storage,每一層均可以水平擴充套件。其中,所有agent和 collector由master統一管理,這使得系統容易監控和維護,且master允許有多個 使用zookeeper進行管理和負載均衡 這就避 ...