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