初識sharding技術
數據庫的sharding技術作為一個“新瓶裝舊酒”的概念,在新的應用環境中被賦予了新的意義。隨著云計算的發展,sharding在最近幾年是越來越火熱,越來越多的產品開始聲稱自己支持sharding功能。那么到底什么是sharding,sharding到底能為你的數據庫應用帶來哪些好處。另外最重要的,如何實現一個sharding系統,有哪些sharding算法可供選擇。本文將為你解決這些問題。
一. 簡介
1. 背景
數據庫的擴展是一個永恒的話題。對于傳統的關系數據庫,采用的是縱向擴展(Scale Up)的方式,即買更好的機器添加更多的資源來取得更好的性能(如硬件升級、更快更多的CPU、更大的內存、更多更大的磁盤等)。而形式上采用的是并行數據庫、分布式數據庫的模式,具體細節依賴水平分區或者垂直分區的技術。關系數據庫通過ScaleUp方式已在傳統的企業應用環境中統治了將近三十多年。
但是近年來隨著數據量的暴增尤其是云計算模式的出現,這種擴展模式對于某些應用已經不太適合,這時便出現了橫向擴展(Scale Out)模式。這種方式采用一些Ad-hoc的技術,比如說對數據庫進行主從配置(Master-Slave)、采用數據庫復制(Replication)技術以及服務器的緩存(Server Cache)等,來將負載分布到多個物理節點上去。另外sharding技術也逐步發展,并在近年來吸引了眾人的眼球。
2. 什么是Sharding
Sharding 是把數據庫Scale Out到多個物理節點上的一種有效的方式。Shard這個詞的意思是“碎片”。如果將一個數據庫當作一塊大玻璃,將這塊玻璃打碎,那么每一小塊都稱為數據庫的碎片(DatabaseShard)。將整個數據庫打碎的過程就叫做sharding,可以翻譯為分片。
形式上,Sharding可以簡單定義為將大數據庫分布到多個物理節點上的一個分區方案。每一個分區包含數據庫的某一部分,稱為一個shard,分區方式可以是任意的,并不局限于傳統的水平分區和垂直分區。一個shard可以包含多個表的內容甚至可以包含多個數據庫實例中的內容。每個shard被放置在一個數據庫服務器上。一個數據庫服務器可以處理一個或多個shard的數據。系統中需要有服務器進行查詢路由轉發,負責將查詢轉發到包含該查詢所訪問數據的shard或shards節點上去執行。
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一個一個來做,并不會對服務產生大的影響。
非常好我支持^.^
(5) 100%
不好我反對
(0) 0%
相關閱讀:
- [電子說] 無人值守:智慧陸上風電場3D可視化物聯網平臺 2023-10-23
- [電子說] 麥捷科技:前三季度歸母凈利潤同比增長12% 2023-10-23
- [電子說] 滿足企業大模型落地五大需求:百度智能云升級“云智一體”戰略 2023-10-22
- [電子說] 工業無線智能網關在油田物聯網中的應用 2023-10-23
- [MEMS/傳感技術] 基于云計算的無線傳感網數據同步方案 2023-10-20
- [電子說] 遭遇“罕見”挫折?傳OpenAI停止Arrakis新模型開發 2023-10-20
- [電子說] MaaS,云廠商在打一場“翻身仗” 2023-10-20
- [電子說] 傳統 ERP 云服務器高不可攀,華為云耀云服務器 L 實例可以“交個朋友” 2023-10-19
( 發表人:辰光 )