白帆
摘 要 數據庫的擴展是分布式存儲的關鍵技術,本文對sharding技術的適用環境進行了研究,介紹了一種基于存儲分片技術對于數據庫系統擴展能力的提升方法。
關鍵詞 分布式 存儲 分片 擴展
中圖分類號:TP311.13 文獻標識碼:A
0引言
如何提升數據庫的擴展能力一直是數據庫技術的核心問題,隨著互聯網高速發展,商業數據庫軟件對數據庫的自動擴展能力顯示出不適應的情況,暴露出一些不足之處,本文結合sharding碎片技術,對該技術適合的應用領域進行分析研究,提出了一種存儲分片擴展的新方案,改進分布式數據庫存儲管理,提升擴展能力。
1 分片技術介紹
1.1 sharding 的定義
shard即“碎片”,sharding也稱作數據切分或分區。是指通過某種條件,把同一個數據庫中的數據分散到多個數據庫或多臺機器上,以減小單臺機器壓力。
1.2 常見的sharding切分算法
hash切分
hash放置是以每條數據的一個域或者多個域(一般都選擇主鍵或者unique鍵)作為劃分鍵K,假設總共的節點數量為N (1-N), 那么數據被分配到的節點編號為:
n = hash(k) mod N
hash劃分實現非常簡單,只要所采用的哈希函數能把值算的足夠均勻,那么數據將會很均勻的被切分到各個節點,而且幾乎不需要元數據就可以進行查詢的路由。但是,hash切分也存在很明顯的兩個缺點:
(1)實用性較差,由于劃分鍵的值被hash化,生成一個與輸入分布無關、輸出均勻的值,所以每個節點內數據之間并沒有什么邏輯相關性,關聯數據集中性差,這樣不能高效的支持一些具有范圍性或分類性的服務,比如區域性服務、以時間范圍為約束的服務等。
(2)擴展能力差 ,由于最終位置n是依賴N(節點總數)的值,因此一旦N發生變化,將導致n的數值變化,也就是說一旦加入新的機器,老節點里的數據可能大部分都要進行遷移,這樣的開銷太大。
2 分片存儲的新方案
區間劃分(Range-based Partitioning)首先會把數據按某種數值(時間,區域等)分為多個區間,然后再將這些區間分配到系統的各個節點上面。最簡單的區間劃分是一個節點只持有一個區間,在有n個節點的情況下,將劃分鍵的取值區間均勻劃分(這里的均勻是指劃分后的每個partition的數據量盡可能一樣大,而并非值域區間一樣大)為n份,然后每個節點持有一塊。
例如,按照用戶名稱首字母進行劃分,可能有以下的劃分方案:如圖-1所示,總共有4個shard。
用戶名稱首字母在[a-d)的會被分配到shard1節點
用戶名稱首字母在[d-h)的會被分配到shard2節點
用戶名稱首字母在[h-t)的會被分配到shard3節點
用戶名稱首字母在[t-z)的會被分配到shard4節點
-1 sharding區間劃分圖片
綜上所述,區間分布比hash分布在處理分布式、大數據存儲管理時具備一定的優勢,主要表現在:
(1)提高了數據庫的可擴展性,可以隨著應用的增長來增加更多的服務器滿足應用需求,只需要將新增加的數據以及負載放到新加的服務器上即可。
(2)提高了數據庫的可用性。因為各節點的數據是相獨立的,所以如果其中幾個shard服務器down掉之后,并不會使整個系統對外停止服務。
(3)系統有更好的可管理性。對系統的升級和配置可以按照shard一個一個來做,并不會對服務產生大的影響。
直接hash劃分使用價值不高,區間劃分則可以得到很廣泛運用,有很好的分片擴展性,大大降低了對系統的性能消耗。
3結束語
使用區間分片擴展解決的hash分片擴展的弊端,使得各節點的數據能相對均勻的遷移到新的節點上面,大大提高了I/O效率和系統穩定性,在工作實踐中,我們可以適當根據數據的實際情況來對區間分布進行人為的干擾和定制,這樣數據的分布和遷移能得到更好的效果。
參考文獻
[1] 秦秀磊,張文博,魏峻,王偉,鐘華,黃濤.云計算環境下分布式緩存技術的現狀與挑戰[J].軟件學報,2013.1.
[2] 分布式存儲系統中一致性哈希算法的研究-電腦知識與技術.學術交流,2011.8(7).