(1)模哈希算法
模哈希算法定位表中的每一行需要的時間量相同,無需考慮表中的總行數,並且我們只需輸入行的ID和服務器總數。但是,該算法無法處理一個不斷增長的數據集。如果我們不斷地向表中添加更多的行,最終我們將增加服務器總數,來增加更多的容量,但是改變服務器總數也就改變了模運算的結果。
(2)一致性哈希算法
一致性散列僅能支持精確查詢,就是說,如果我們已經知道行的ID,我們只能快速找到一行。如果我們要查找ID範圍內所有行的位置,例如ID在10到50之間的所有行,我們將掃描整個表格。因此,一致性散列特別適用於不需要範圍掃描的鍵/值數據庫。另外,在更改服務器數量後,我們仍然需要複製大約1 / N(服務器總數)的數據。
(3)BigTable 算法方案
基本上BigTable是經典分裂算法的應用。初始情況下,每個表只含一個Tablet,隨着表數據的增長,它會被自動分割成多個Tablet。同時,Master服務器會負責控制是否需要將Tablet轉交給其他負載較輕的Tablet服務器,從而保證整個集羣的負載均衡。BigTable方案的優點是它支持範圍掃描,並且我們向集羣添加服務器不會導致數據重新平衡。
SunlightDB分區,選擇BigTable方案,並不是說這個方案或者說算法更好——算法無優劣,關鍵看場景。