標籤:技術 限制 src 無法 表示 tps 使用者 str log
分庫分表,顧名思義就是把原本儲存於一個庫的資料分Block Storage到多個庫上,把原本儲存於一個表的資料分Block Storage到多個表上。那麼關於分庫分表,你瞭解多少呢?接下來,我們將從什麼是資料分區及如何進行分區兩方面對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查看。
【乾貨】淺談分散式資料庫中介軟體之分庫分表