1. 程式人生 > >【幹貨】淺談分布式數據庫中間件之分庫分表

【幹貨】淺談分布式數據庫中間件之分庫分表

-o img 資源 註意 淺談 中間件 water 大數據 分離

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


什麽是數據分片

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

垂直分片

垂直分片又叫縱向分割,即以邏輯表為單位,把原有數據庫切分成多個數據庫。切分後不同的表存儲在不同的數據庫上。

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

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

技術分享圖片
垂直分片示意圖



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

水平分片主要用業務架構無法繼續細分,而數據庫中單張表數據量太大,查詢性能下降的場景。通過水平分片,即解決單庫容量問題,同時提高並發查詢性能。
技術分享圖片
水平分片示意圖



DDM實現了自動水平分片,應用無需關心某個數據該存儲在哪一塊分片上。對邏輯表水平分片需要依據一定的分片規則,例如一個訂單跟蹤系統,我們選取訂單號(OrderId)作為拆分鍵,分別對“訂單流水表”、“訂單詳情表”以及“物流跟蹤表”進行水平拆分,拆分規則為對鍵值Hash後求模,則分片計算規則如下:

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

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


如何進行分片
在分布式數據庫中,可以通過分庫分表存儲方式,輕松解決大數據量單表容量達到單機數據庫存儲上線的瓶頸。但是分庫存儲後,需要盡量避免跨庫JOIN操作帶來的性能與資源消耗問題。

因此創建邏輯庫和邏輯表時,需要根據實際情況確定:

1、邏輯表分不分片?

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

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

2、按什麽規則分?

邏輯表的拆分鍵選擇非常重要。建議按實際業務場景選擇拆分鍵,不同邏輯表,如果具有E-R關系,建議選擇相同字段做拆分鍵,避免跨庫JOIN操作。

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

數據量在1000萬以下的表,不建議分片。通過建立合適的索引,采取讀寫分離策略,單表也可以很好的解決性能問題。

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

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


數據庫中間件DDM將底層數據庫存儲引擎以集群方式管理起來,用戶使用非常方便。應用程序不需要關心具體有多少分片。類似操作單機數據庫,用戶通過DDM管理控制臺進行數據庫運維,使用JDBC等驅動服務或SQL客戶端連接數據庫,進行數據讀寫。想要了解更多,歡迎點擊分布式數據庫中間件DDM查看。

【幹貨】淺談分布式數據庫中間件之分庫分表