myCAT 是一個徹底開源的,面向企業應用開發的“大數據庫集羣” 支持事務、ACID、可以替代Mysql的加強版數據庫 ? 一個可以視爲“Mysql”集羣的企業級數據庫,用來替代昂貴的Oracle集羣 ? 一個融合內存緩存技術、Nosql技術、HDFS大數據的新型SQL Server ? 結合傳統數據庫和新型分佈式數據倉庫的新一代企業級數據庫產品 ? 一個新穎的數據庫中間件產品。
一.什麼是MyCat?
MyCat是目前最流行的基於Java語言編寫的數據庫中間件,是一個實現了MySql協議的服務器,其核心功能是分庫分表。配合數據庫的主從模式還可以實現讀寫分離。
MyCat官網:http://www.mycat.io/
二、使用MyCat後的架構圖
三、使用MyCat的優勢
1、數據量級
單一的MySql數據存儲量和操作量級有限,
MyCat可以管理若干MySql數據庫,可以實現數據庫的存儲和操作。
2 、開源性質
Mycat 是 java 編寫的中間件,開源,免費
有非常多的人和組織對 Mycat 實行開發、維護、管理、更新
Mycat 是阿里原應用 corba 轉型而來的
四、MyCat中的概念
1.切分
邏輯上的切分,在物理層面使用多庫(database)、多表(table)實現切分。
1.1 縱向切分/垂直切分
就是把原來存儲在一個庫的數據存儲在多個庫上
由於數據庫的讀寫都是對同一個庫進行操作,所以單庫並不能解決大規模併發寫入的問題。
例如:我們會建立定義數據庫 workDB、商品數據庫 payDB、用戶數據庫 userDB、日誌數據庫 logDB 等。
優點:
- 減少增量數據寫入時的鎖對查詢的影響。
- 由於單表數量下降,常見的查詢操作由於減少了需要掃描的記錄,使得單表單次查詢所需檢索的行數變少,減少了磁盤IO、時延變短。
缺點:
- 無法解決單表數據量太大的問題。
1.2 橫向切分/水平切分
把原本存儲於一個表的數據分塊存儲到多個表上
當一個表中的數據量過大時,我們可以把該表的數據按照某種規則,進行劃分,然後存儲到多個結構相同的表上。
例如:我們 userDB 中的 userTable 中數據量很大,那麼可以把 userDB 切分爲結構相同的多個 userDB:part0DB、part1DB 等,再將 userDB 上的 userTable,切分爲很多 userTable:userTable0、userTable1 等,然後將這些表按照一定的規則存儲到多個 userDB 上。
優點:
- 單表的併發能力提高了,磁盤的I/O性能也提高了
- 如果出現高併發的話,總表可以根據不同的查詢,將併發壓力發到不同的小表裏。
缺點:
- 無法實現表連接查詢
2.邏輯庫-Schema
MyCat中定義的database是邏輯上存在的,但物理上是不存在的。
主要是針對縱向切分提供的概念。
3.邏輯表-Table
MyCat中定義的table,是邏輯上存在,物理上不存在的
主要是針對橫向切分提供的概念
4.默認端口
MySql:3306
MyCat:8066
Tomcat:8080
Oracle:1521
nginx:80
http:協議默認端口80
redis:6379
5.數據主機-DataHost
物理MySql存放的主機地址,可以使用主機名,IP,域名定義。
6.數據節點-DataNode
配置物理的database。數據保存的物理節點就是database
7.分片規則
當控制數據的時候,如何訪問物理database和table?
就是訪問dataHost和dataNode的算法
在Mysql處理CRUD時,如何訪問datahost和datanode的算法?如:哈希算法,crc32算法等。
五、MyCat的使用
1.讀寫分離
原理:需要搭建主從模式,讓主數據庫(master)處理增(insert)、刪(delete)、改(update),而從數據庫(slave)處理查(select)操作。
MyCat配合數據庫本身的複製功能,可以解決讀寫分離的問題。
2.主從備份概念
主從備份:就是一種主備模式的數據庫應用
主庫(master)數據與備庫(slave)數據完全一致
實現數據的多重備份,保證數據的安全。
可以在Master[InnoDB]和Slave[MyISAM]中使用不同的數據庫引擎,實現讀寫分離