1. 程式人生 > >淺談分散式資料庫中介軟體之分庫分表

淺談分散式資料庫中介軟體之分庫分表

  
  分庫分表,顧名思義就是把原本儲存於一個庫的資料分塊儲存到多個庫上,把原本儲存於一個表的資料分塊儲存到多個表上。那麼關於分庫分表,你瞭解多少呢?接下來,我們將從什麼是華為雲大資料解決方案的分片及如何進行分片兩方面對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檢視。