前言
小編最近學習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/,裏面有書籍。
感謝您的訪問!