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