1. 程式人生 > 實用技巧 >【資料庫】資料庫切分

【資料庫】資料庫切分

前言

小編最近學習mycat中介軟體的內容,看了一本書《mycat權威指南》,裡面內容非常豐富,入門篇、高階進階篇、生產實踐篇和開發篇,對小編來說非常有價值。現在簡單總結一下入門篇中的內容。

資料庫切分為什麼出現

一、為什麼出現數據庫切分

在網際網路時代,海量資料的儲存與訪問成為系統設計與使用的瓶頸問題,最典型的場景有兩種型別:聯機事務處理(OLTP)和聯機分析處理(OLAP),同時因為傳統資料庫不可切分,NoSQL資料庫只能是一種補充不能替代傳統資料庫,因此需要藉助第三方處理,實現資料切分。

二、OLTP與OLAP對比

三、資料庫分類

1.兩類系統有多種技術實現方案,其中儲存部分的資料庫主要分為兩大類:關係型資料庫與NoSQL資料庫。

2.關係型資料庫

是建立在關係模型基礎上的資料庫,使用集合代數等數學概念和方法處理資料庫中的資料。主流的有oracle、DB2、MS SQL Server 和MySQL。

3.NoSQL資料庫

全稱Not only SQL,非關係型資料庫。主要分為臨時性鍵值儲存:memcached、Redis,永久性鍵值儲存:ROMA、Redis,面向文件的資料庫:MongoDB、CouchDB,面向列的資料庫(Cassandra、HBASE)。

四、兩類資料庫對比

單機單庫效能瓶頸,擴充套件困難,無法滿足日益增長的海量資料儲存及其效能要求,而NoSQL根本性的優勢在於簡單、易於大規模分散式擴充套件,讀寫效能非常高。

什麼是資料切分

一、概念

指通過某種特定的條件,將同一個資料庫中的資料分散存放到多個數據庫(主機)上面,達到分散單臺裝置負載的效果。

二、兩種模式

1.垂直拆分

按照不同的表(或者Schema)切分到不同的資料庫(主機)上。一個數據庫由很多表構成,每張表對應不同的業務,垂直切分是按照業務將表進行分類,分佈到不同資料庫上。

2.水平切分

根據表中資料的邏輯關係,將同一個表中的資料按照某種條件拆分到多臺資料庫(主機)上。

三、兩種模式的對比

1.垂直切分

優點:

  • 拆分後業務清晰,拆分規則明確
  • 系統間整合或擴充套件容易
  • 資料維護簡單

缺點:

  • 部分業務表(很難獨立)無法join ,只能通過介面方式解決,提高系統複雜度
  • 受每種業務不同的限制存在單庫效能瓶頸,不易資料擴充套件和效能提高
  • 事務處理複雜

單庫讀寫與儲存瓶頸需要水平拆分來解決。

2.水平切分

相對垂直拆分,水平拆分不是將表做分類,而是將每張表按照某個欄位的某種規則分散到多個庫之中。

水平拆分資料需要定義分片規則,關係型資料庫是行列的二維模型,拆分的第一原則就是找到拆分維度。

幾種典型的分片規則包括:

  • 按照使用者ID求模,將資料分散到不同庫,相同資料使用者的資料被分到一個庫中
  • 按照日期劃分
  • 按照某個特定欄位求模或根據特定範圍劃分

優點:

  • 拆分規則抽象好,資料庫可以做join操作
  • 不存在單庫大資料,高併發的效能瓶頸
  • 應用端改造較少
  • 提高了系統的穩定性和負載能力

缺點:

  • 拆分規則難以抽象
  • 分片事務一致性難以解決
  • 資料多次擴充套件難度和維護量極大
  • 跨庫join效能較差

3.兩種模式共同的特點缺點

  • 引入分散式事務問題
  • 跨節點join問題
  • 跨節點合併排序分頁問題
  • 多資料來源管理問題

4.資料來源管理方案

A 客戶端模式

每個應用程式模組中配置管理自己需要的一個或多個數據源,直接訪問各個資料庫,在模組內完成資料的整合;

B 中間代理層

中間代理層統一管理所有的資料來源,後端資料庫叢集對前端應用程式透明。這就是mycat資料庫中介軟體 對資料切分的解決方案。

資料切分經驗

  1. 能不切分儘量不切分
  2. 一定要選擇合適的切分規則
  3. 儘量通過資料冗餘或表分組(Table Group)來降低跨庫join的可能
  4. 資料庫中介軟體對資料join實現的優劣難以把握,實現高效能的難度極大,業務讀取儘量少使用多表join

官網推薦:http://www.mycat.io/,裡面有書籍。

感謝您的訪問!