用sharding技術來擴展你的數據庫(一)sharding 介紹

數據庫的sharding技術做爲一個「新瓶裝舊酒」的概念,在新的應用環境中被賦予了新的意義。隨着雲計算的發展,sharding在最近幾年是愈來愈火熱,愈來愈多的產品開始聲稱本身支持sharding功能。那麼到底什麼是sharding,sharding到底能爲你的數據庫應用帶來哪些好處。另外最重要的,如何實現一個sharding系統,有哪些sharding算法可供選擇。本文將爲你解決這些問題。算法

 

 

一. 簡介數據庫

 

 

1. 背景緩存

 

 

數據庫的擴展是一個永恆的話題。對於傳統的關係數據庫,採用的是縱向擴展(Scale Up)的方式,即買更好的機器添加更多的資源來取得更好的性能(如硬件升級、更快更多的CPU、更大的內存、更多更大的磁盤等)。而形式上採用的是並行數據庫、分佈式數據庫的模式,具體細節依賴水平分區或者垂直分區的技術。關係數據庫經過ScaleUp方式已在傳統的企業應用環境中統治了將近三十多年。服務器

 

 

可是近年來隨着數據量的暴增尤爲是雲計算模式的出現,這種擴展模式對於某些應用已經不太適合,這時便出現了橫向擴展(Scale Out)模式。這種方式採用一些Ad-hoc的技術,好比說對數據庫進行主從配置(Master-Slave)、採用數據庫複製(Replication)技術以及服務器的緩存(Server Cache)等,來將負載分佈到多個物理節點上去。另外sharding技術也逐步發展,並在近年來吸引了衆人的眼球。antd

 

2. 什麼是Sharding分佈式

 

Sharding 是把數據庫Scale Out到多個物理節點上的一種有效的方式。Shard這個詞的意思是「碎片」。若是將一個數據庫看成一塊大玻璃,將這塊玻璃打碎,那麼每一小塊都稱爲數據庫的碎片(DatabaseShard)。將整個數據庫打碎的過程就叫作sharding,能夠翻譯爲分片。性能

 

形式上,Sharding能夠簡單定義爲將大數據庫分佈到多個物理節點上的一個分區方案。每個分區包含數據庫的某一部分,稱爲一個shard,分區方式能夠是任意的,並不侷限於傳統的水平分區和垂直分區。一個shard能夠包含多個表的內容甚至能夠包含多個數據庫實例中的內容。每一個shard被放置在一個數據庫服務器上。一個數據庫服務器能夠處理一個或多個shard的數據。系統中須要有服務器進行查詢路由轉發,負責將查詢轉發到包含該查詢所訪問數據的shard或shards節點上去執行。大數據

 

 

用sharding技術來擴展你的數據庫(一)sharding 介紹

 

 

3. Sharding與分區的比較雲計算

 

Sharding與分區有着千絲萬縷的聯繫,它們所採起的技術本質上是相似的,能夠說sharding的概念就是由分區而來。在某些狀況下sharding可能指的就是水平分區。另外有些文檔中使用了fragment(也是碎片的意思)的術語(在並行數據庫中的這些分區稱爲partition,在分佈式數據庫中則稱爲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和分區仍是有很大區別的。下面羅列一下:

 

(1)擴展方式不一樣。Sharding屬於scaleout,而分區則屬於scale up方式。

(2)目的不一樣。分區的目的是爲了將一個查詢進行並行處理,這樣全部的節點能並行處理一個查詢;而sharding是讓每一個節點儘可能處理不一樣的查詢。

(3)應用場景:分區適用與傳統的企業應用,尤爲是OLAP的應用,基本上每一個查詢都須要訪問大部分的數據;而sharding適用於雲Web應用,特徵是有大量的用戶和查詢,可是每一個查詢訪問到的元組是很是少的,sharding能夠將負載分散到多個物理節點上。

(4)可用性:對於分佈式數據庫基本上每一個查詢都須要全部的節點參與,若是某些節點down掉後,系統會大受影響;而sharding所處理的應用通常只涉及到少數幾個節點,因此可用性上sharding要好一些。另外分佈式數據庫須要有一個主節點來生成執行計劃並協調相關節點執行等,很容易造成單點瓶頸。

(5)分割粒度:分區通常只針對於一個數據庫內部進行分割;而sharding能夠以數據庫爲粒度進行分割,所以可用來構建多租房數據庫系統(multi-tenantdatabase)。

 

4.Sharding的優勢

 

對於Sharding來講,主要有如下主要的優勢:

 

(1)提升了數據庫的可擴展性,能夠隨着應用的增加來增長更多的服務器,只須要將新增長的數據以及負載放到新加的服務器上就能夠。

(2)提升了數據庫的可用性。其中幾個shard服務器down掉以後,並不會使整個系統對外中止服務,而只會影響到須要訪問這幾個shard服務器上的數據的用戶。

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

(4)系統有更好的可管理性。對系統的升級和配置能夠按照shard一個一個來作,並不會對服務產生大的影響。

 

(未完待續。。。)

相關文章
相關標籤/搜索