您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>電子百科>網(wǎng)絡(luò)>網(wǎng)絡(luò)交換機(jī)>

初識(shí)sharding技術(shù)

2012年02月15日 14:31 IT168 作者:秩名 用戶評(píng)論(0

數(shù)據(jù)庫的sharding技術(shù)作為一個(gè)“新瓶裝舊酒”的概念,在新的應(yīng)用環(huán)境中被賦予了新的意義。隨著云計(jì)算的發(fā)展,sharding在最近幾年是越來越火熱,越來越多的產(chǎn)品開始聲稱自己支持sharding功能。那么到底什么是sharding,sharding到底能為你的數(shù)據(jù)庫應(yīng)用帶來哪些好處。另外最重要的,如何實(shí)現(xiàn)一個(gè)sharding系統(tǒng),有哪些sharding算法可供選擇。本文將為你解決這些問題。

一. 簡介

1. 背景

數(shù)據(jù)庫的擴(kuò)展是一個(gè)永恒的話題。對(duì)于傳統(tǒng)的關(guān)系數(shù)據(jù)庫,采用的是縱向擴(kuò)展(Scale Up)的方式,即買更好的機(jī)器添加更多的資源來取得更好的性能(如硬件升級(jí)、更快更多的CPU、更大的內(nèi)存、更多更大的磁盤等)。而形式上采用的是并行數(shù)據(jù)庫、分布式數(shù)據(jù)庫的模式,具體細(xì)節(jié)依賴水平分區(qū)或者垂直分區(qū)的技術(shù)。關(guān)系數(shù)據(jù)庫通過ScaleUp方式已在傳統(tǒng)的企業(yè)應(yīng)用環(huán)境中統(tǒng)治了將近三十多年。

但是近年來隨著數(shù)據(jù)量的暴增尤其是云計(jì)算模式的出現(xiàn),這種擴(kuò)展模式對(duì)于某些應(yīng)用已經(jīng)不太適合,這時(shí)便出現(xiàn)了橫向擴(kuò)展(Scale Out)模式。這種方式采用一些Ad-hoc的技術(shù),比如說對(duì)數(shù)據(jù)庫進(jìn)行主從配置(Master-Slave)、采用數(shù)據(jù)庫復(fù)制(Replication)技術(shù)以及服務(wù)器的緩存(Server Cache)等,來將負(fù)載分布到多個(gè)物理節(jié)點(diǎn)上去。另外sharding技術(shù)也逐步發(fā)展,并在近年來吸引了眾人的眼球。

2. 什么是Sharding

Sharding 是把數(shù)據(jù)庫Scale Out到多個(gè)物理節(jié)點(diǎn)上的一種有效的方式。Shard這個(gè)詞的意思是“碎片”。如果將一個(gè)數(shù)據(jù)庫當(dāng)作一塊大玻璃,將這塊玻璃打碎,那么每一小塊都稱為數(shù)據(jù)庫的碎片(DatabaseShard)。將整個(gè)數(shù)據(jù)庫打碎的過程就叫做sharding,可以翻譯為分片。

形式上,Sharding可以簡單定義為將大數(shù)據(jù)庫分布到多個(gè)物理節(jié)點(diǎn)上的一個(gè)分區(qū)方案。每一個(gè)分區(qū)包含數(shù)據(jù)庫的某一部分,稱為一個(gè)shard,分區(qū)方式可以是任意的,并不局限于傳統(tǒng)的水平分區(qū)和垂直分區(qū)。一個(gè)shard可以包含多個(gè)表的內(nèi)容甚至可以包含多個(gè)數(shù)據(jù)庫實(shí)例中的內(nèi)容。每個(gè)shard被放置在一個(gè)數(shù)據(jù)庫服務(wù)器上。一個(gè)數(shù)據(jù)庫服務(wù)器可以處理一個(gè)或多個(gè)shard的數(shù)據(jù)。系統(tǒng)中需要有服務(wù)器進(jìn)行查詢路由轉(zhuǎn)發(fā),負(fù)責(zé)將查詢轉(zhuǎn)發(fā)到包含該查詢所訪問數(shù)據(jù)的shard或shards節(jié)點(diǎn)上去執(zhí)行。

sharding技術(shù)

3. Sharding與分區(qū)的比較

Sharding與分區(qū)有著千絲萬縷的聯(lián)系,它們所采取的技術(shù)本質(zhì)上是類似的,可以說sharding的概念就是由分區(qū)而來。在某些情況下sharding可能指的就是水平分區(qū)。另外有些文檔中使用了fragment(也是碎片的意思)的術(shù)語(在并行數(shù)據(jù)庫中的這些分區(qū)稱為partition,在分布式數(shù)據(jù)庫中則稱為fragment)。\ref footnote 1

Foot note 1:

[[

Daniel C. Zilio. Physical Database Design Decision Algorithms and ConcurrentReorganization for Parallel Database Systems. PhD thesis 1997.

M. Tamer ?zsu, Patrick Valduriez. Principles ofDistributed Database Systems, Third Edition. Springer. 2011

]]

但是我們所說的sharding和分區(qū)還是有很大區(qū)別的。下面羅列一下:

(1)擴(kuò)展方式不同。Sharding屬于scaleout,而分區(qū)則屬于scale up方式。

(2)目的不同。分區(qū)的目的是為了將一個(gè)查詢進(jìn)行并行處理,這樣所有的節(jié)點(diǎn)能并行處理一個(gè)查詢;而sharding是讓每個(gè)節(jié)點(diǎn)盡量處理不同的查詢。

(3)應(yīng)用場景:分區(qū)適用與傳統(tǒng)的企業(yè)應(yīng)用,尤其是OLAP的應(yīng)用,基本上每個(gè)查詢都需要訪問大部分的數(shù)據(jù);而sharding適用于云Web應(yīng)用,特征是有大量的用戶和查詢,但是每個(gè)查詢?cè)L問到的元組是非常少的,sharding可以將負(fù)載分散到多個(gè)物理節(jié)點(diǎn)上。

(4)可用性:對(duì)于分布式數(shù)據(jù)庫基本上每個(gè)查詢都需要所有的節(jié)點(diǎn)參與,如果某些節(jié)點(diǎn)down掉后,系統(tǒng)會(huì)大受影響;而sharding所處理的應(yīng)用一般只涉及到少數(shù)幾個(gè)節(jié)點(diǎn),所以可用性上sharding要好一些。另外分布式數(shù)據(jù)庫需要有一個(gè)主節(jié)點(diǎn)來生成執(zhí)行計(jì)劃并協(xié)調(diào)相關(guān)節(jié)點(diǎn)執(zhí)行等,很容易形成單點(diǎn)瓶頸。

(5)分割粒度:分區(qū)一般只針對(duì)于一個(gè)數(shù)據(jù)庫內(nèi)部進(jìn)行分割;而sharding可以以數(shù)據(jù)庫為粒度進(jìn)行分割,因此可用來構(gòu)建多租房數(shù)據(jù)庫系統(tǒng)(multi-tenantdatabase)。

4.Sharding的優(yōu)點(diǎn)

對(duì)于Sharding來說,主要有以下主要的優(yōu)點(diǎn):

(1)提高了數(shù)據(jù)庫的可擴(kuò)展性,可以隨著應(yīng)用的增長來增加更多的服務(wù)器,只需要將新增加的數(shù)據(jù)以及負(fù)載放到新加的服務(wù)器上就可以。

(2)提高了數(shù)據(jù)庫的可用性。其中幾個(gè)shard服務(wù)器down掉之后,并不會(huì)使整個(gè)系統(tǒng)對(duì)外停止服務(wù),而只會(huì)影響到需要訪問這幾個(gè)shard服務(wù)器上的數(shù)據(jù)的用戶。

(3)小的數(shù)據(jù)庫的查詢壓力比較小,查詢更快,性能更好。

(4)系統(tǒng)有更好的可管理性。對(duì)系統(tǒng)的升級(jí)和配置可以按照shard一個(gè)一個(gè)來做,并不會(huì)對(duì)服務(wù)產(chǎn)生大的影響。

非常好我支持^.^

(5) 100%

不好我反對(duì)

(0) 0%

( 發(fā)表人:辰光 )

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?