【乾貨】淺談分佈式數據庫中間件之分庫分表

分庫分表,顧名思義就是把本來存儲於一個庫的數據分塊存儲到多個庫上,把本來存儲於一個表的數據分塊存儲到多個表上。那麼關於分庫分表,你瞭解多少呢?接下來,咱們將從什麼是數據分片及如何進行分片兩方面對DDM分庫分表作一個闡釋。html

 

什麼是數據分片數據庫

分片是解決數據庫存儲容量限制的直接途徑。分片包括垂直分片與水平分片兩種方式。架構

垂直分併發

垂直分片又叫縱向分割,即以邏輯表爲單位,把原有數據庫切分紅多個數據庫。切分後不一樣的表存儲在不一樣的數據庫上。運維

垂直分片與業務架構設計有密切的聯繫。好比從業務領域對系統進行架構優化,分紅多個子業務系統,各個子業務系統耦合度較低。子業務系統間以接口方式進行數據通訊和數據交換。分佈式

垂直拆分後業務清晰,拆分規則明確,系統之間容易整合與擴展。通常用於數據庫上層架構設計。高併發

 

垂直分片示意圖 性能

 

水平分片大數據

水平分片又叫橫向分割,即以邏輯表中的數據行記錄爲單位,把原有邏輯數據庫切分紅多個物理數據庫分片,表數據記錄分佈存儲在各個分片上。優化

水平分片主要用業務架構沒法繼續細分,而數據庫中單張表數據量太大,查詢性能降低的場景。經過水平分片,即解決單庫容量問題,同時提升併發查詢性能。

 

水平分片示意圖 


 

DDM實現了自動水平分片,應用無需關心某個數據該存儲在哪一塊分片上。

對邏輯表水平分片須要依據必定的分片規則,例如一個訂單跟蹤系統,咱們選取訂單號(OrderId)做爲拆分鍵,分別對「訂單流水錶」、「訂單詳情表」以及「物流跟蹤表」進行水平拆分,拆分規則爲對鍵值Hash後求模,則分片計算規則以下:

H(Key(OrderId)) = Hash(Key(OrderId))%N

其中,N表示一共有N個數據分片,H(Key(OrderId))表示該訂單通過訂單號Hash並求模後存儲的分片編號。

 

分片後數據存儲示意圖 

 

如何進行分片

在分佈式數據庫中,能夠經過分庫分表存儲方式,輕鬆解決大數據量單表容量達到單機數據庫存儲上線的瓶頸。可是分庫存儲後,須要儘可能避免跨庫JOIN操做帶來的性能與資源消耗問題。

所以建立邏輯庫和邏輯表時,須要根據實際狀況肯定:

一、邏輯表分不分片?

DDM邏輯表支持全局表、分片表、單表三種類型。用戶能夠按照數據表的實際使用需求,選擇最合適的邏輯表類型建立。

單表只在第一個分片建立表以及存儲數據,全局表在每個分片建立表而且存儲全量數據。分片表在每個分片建立表,數據按照拆分規則分散存儲在分片中。

二、按什麼規則分?

邏輯表的拆分鍵選擇很是重要。建議按實際業務場景選擇拆分鍵,不一樣邏輯表,若是具備E-R關係,建議選擇相同字段作拆分鍵,避免跨庫JOIN操做。

在實際使用中,有如下建議供參考:

數據量在1000萬如下的表,不建議分片。經過創建合適的索引,採起讀寫分離策略,單表也能夠很好的解決性能問題。

數據量在1000萬以上的表,建議分片。將數據分片存儲後,既能解決單張表容量過大帶來的性能瓶頸,同時提升併發支持。注意要選擇合適的拆分鍵,提早作好規劃。

業務讀取儘可能少用多表JOIN,同一個事務避免跨分片。查詢條件儘可能帶上拆分鍵,避免全分片表掃描。

 

數據庫中間件DDM將底層數據庫存儲引擎以集羣方式管理起來,用戶使用很是方便。應用程序不須要關心具體有多少分片。相似操做單機數據庫,用戶經過DDM管理控制檯進行數據庫運維,使用JDBC等驅動服務或SQL客戶端鏈接數據庫,進行數據讀寫。想要了解更多,歡迎點擊分佈式數據庫中間件DDM查看。

相關文章
相關標籤/搜索