MyCat教程二:mysql主從復制實現
MyCat教程三:安裝及配置介紹
MyCat教程四:實現讀寫分離
MyCat教程五:實現分庫分表
MyCat教程六:全局序列號-全局主鍵的自增長
一、MyCat簡介
1. 什么是MyCat
MyCat 是目前最流行的基於 java
語言編寫的數據庫中間件
,是一個實現了 MySQL 協議的服務器,前端用戶可以把它看作是一個數據庫代理,用 MySQL 客戶端工具和命令行訪問,而其后端可以用 MySQL 原生協議與多個 MySQL 服務器通信,也可以用 JDBC 協議與大多數主流數據庫服務器通信,其核心功能是分庫分表
。配合數據庫的主從模式還可實現讀寫分離
。
MyCat 是基於阿里開源的 Cobar 產品而研發,Cobar 的穩定性、可靠性、優秀的架構和性能以及眾多成熟的使用案例使得 MyCat 變得非常的強大。
MyCat 發展到目前的版本,已經不是一個單純的 MySQL 代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流數據庫,也支持 MongoDB 這種新型NoSQL 方式的存儲,未來還會支持更多類型的存儲。而在最終用戶看來,無論是那種存儲方式,在 MyCat 里,都是一個傳統的數據庫表,支持標准的 SQL 語句進行數據的操作,這樣一來,對前端業務系統來說,可以大幅降低開發難度,提升開發速度。
MyCat 官網: http://www.mycat.io/
2. MyCat的結構
3. 使用MyCat的好處
3.1 數據量級
單一的 MySQL 其數據存儲量級和操作量級有限.
Mycat 可以管理若干 MySQL 數據庫,同時實現數據的存儲和操作.
3.2 開源性質
- Mycat 是 java 編寫的中間件. 開源,免費.
- 有非常多的人和組織對 Mycat 實行開發,維護,管理,更新.
- Mycat 版本提升較快,可以跟隨環境發展.如果有問題,可以快速解決.
- Mycat 有開源網站和開源社區.且有官方發布的電子書籍.
- Mycat 是阿里原應用 corba 轉型而來的.
3.3 市場應用
MyCat 在互聯網應用中占比非常高.
二、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 的算法. 在 Mycat 處理具體的數據 CRUD 的時候,如何訪問 dataHost 和 dataNode 的算法.如:哈希算法,crc32 算法等.
關注微信公眾號【程序員的夢想】,專注於Java,SpringBoot,SpringCloud,微服務,Docker以及前后端分離等全棧技術。