1.背景
社區愛好者在阿里cobar基礎上進行二次開發,解決了cobar當時存 在的一些問題,並且加入了許多新的功能在其中,逐漸替換cobar舊的框架體系,並命名爲mycat。目前MyCAT社區活 躍度很高,目前已經有一些公司在使用MyCAT。MyCAT是目前最流行的基於java語言編寫的數據庫中間件,是一個實現了Mysql協議的服務器,核心功能主要用於做分庫分表和讀寫分離。
MyCat官網:http://www.mycat.io/
2.應用,數據庫 和 mycat的關係
3.mycat優勢
- java編寫的中間件,免費,開源,社區活躍
- 單一的MySql數據存儲量和操作量級有限,MyCat可以管理若干MySql數據庫,可以實現數據庫的存儲和操作。
- 支持垂直水平數據庫拆分
- 對代碼弱關聯,基本無侵入式
4.基本名詞介紹
- 分片
把單服務器上的數據分散到不同的服務器上;比如實例 A:192.168.15.108:3306 有個數據庫db,現在要進行分片,把數據一部分切分到 實例 B :192.168.109:3306的這臺機器的實例上,這樣子db就存在兩個分片;
- 分表
1.同庫分表 :同一個數據庫中,按某種規則把數據量大的表如 t_user分成若干個數據量小的表 t_user_0,t_user_1....
優點:減少單表操作數據量大的壓力
缺點:數據仍然還在同一個庫中,CPU、內存、文件IO、網絡IO等瓶頸還是無法解決,表名不一致導致後續處理複雜
2.不同庫分表:同一個表分佈到不同的數據庫上,表名相同,操作簡單
優點:數據分散在不同庫中,CPU、內存、文件IO、網絡IO等瓶頸得到有效解決
缺點:多個庫數據需要複製,同步;聚合操作麻煩難以進行 :如left join order By,group by
- 分庫
分庫也可以理解爲數據分片,當業務系統的數據容量接近或超過單臺服務器的容量、QPS/TPS接近或超過單個數據庫實例的處理極限等。此時,往往是採用垂直和水平結合的數據拆分方法,把數據服務和數據存儲分佈到多臺數據庫服務器上。