切分(Sharding)并不是特定數(shù)據(jù)庫產(chǎn)品所附屬的功能,而是在具體技術(shù)細(xì)節(jié)之上的抽象處理。是水平擴(kuò)展(Scale Out)的解決方案,主要目的是解決單節(jié)點(diǎn)數(shù)據(jù)庫服務(wù)器的能力限制,以及整個應(yīng)用其架構(gòu)的可擴(kuò)展性(Scalability)。
切分主要有兩種方式:水平切分(Horizental Sharding)和垂直切分(Vertical Sharding)。
水平切分所指的是通過一系列的切分規(guī)則將數(shù)據(jù)水平分布到不同的DB或table中,在通過相應(yīng)的DB路由 或者table路由規(guī)則找到需要查詢的具體的DB或者table以進(jìn)行Query操作,比如根據(jù)用戶ID將用戶表切分到多臺數(shù)據(jù)庫上。
垂直切分指的是按業(yè)務(wù)、產(chǎn)品切分,將不同類型的數(shù)據(jù)且分到不同的服務(wù)器上,通過數(shù)據(jù)庫代理疏通程序與多個數(shù)據(jù)庫的通訊、降低應(yīng)用的復(fù)雜度。
讀寫分離簡單的說是把對數(shù)據(jù)庫讀和寫的操作分開對應(yīng)不同的數(shù)據(jù)庫服務(wù)器,這樣能有效地減輕數(shù)據(jù)庫壓力,也能減輕io壓力。主數(shù)據(jù)庫提供寫操作,從數(shù)據(jù)庫提供讀操作,這樣既避免了主數(shù)據(jù)庫服務(wù)器(Master)的過載,也有效地利用了從數(shù)據(jù)庫服務(wù)器(Slave)的資源。
這里ebay工程師的文章:《可伸縮性最佳實(shí)踐:來自eBay的經(jīng)驗》更詳細(xì)地介紹了一些概念及業(yè)務(wù)場景。
--End--