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

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

初識sharding技術(shù)

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

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

一. 簡介

1. 背景

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

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

2. 什么是Sharding

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

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

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

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

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

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

4.Sharding的優(yōu)點

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

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

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

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

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

非常好我支持^.^

(5) 100%

不好我反對

(0) 0%

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

      發(fā)表評論

      用戶評論
      評價:好評中評差評

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

      ?