【資料庫】資料庫切分
前言
小編最近學習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資料庫中介軟體 對資料切分的解決方案。
資料切分經驗
- 能不切分儘量不切分
- 一定要選擇合適的切分規則
- 儘量通過資料冗餘或表分組(Table Group)來降低跨庫join的可能
- 資料庫中介軟體對資料join實現的優劣難以把握,實現高效能的難度極大,業務讀取儘量少使用多表join
官網推薦:http://www.mycat.io/,裡面有書籍。
感謝您的訪問!