MyCat教程二:mysql主從複製實現
MyCat教程三:安裝及配置介紹
MyCat教程四:實現讀寫分離
MyCat教程五:實現分庫分表
MyCat教程六:全局序列號-全局主鍵的自增加前端
MyCat 是目前最流行的基於 java
語言編寫的數據庫中間件
,是一個實現了 MySQL 協議的服務器,前端用戶能夠把它看做是一個數據庫代理,用 MySQL 客戶端工具和命令行訪問,而其後端能夠用 MySQL 原生協議與多個 MySQL 服務器通訊,也能夠用 JDBC 協議與大多數主流數據庫服務器通訊,其核心功能是分庫分表
。配合數據庫的主從模式還可實現讀寫分離
。
MyCat 是基於阿里開源的 Cobar 產品而研發,Cobar 的穩定性、可靠性、優秀的架構和性能以及衆多成熟的使用案例使得 MyCat 變得很是的強大。
MyCat 發展到目前的版本,已經不是一個單純的 MySQL 代理了,它的後端能夠支持MySQL、SQL Server、Oracle、DB二、PostgreSQL 等主流數據庫,也支持 MongoDB 這種新型NoSQL 方式的存儲,將來還會支持更多類型的存儲。而在最終用戶看來,不管是那種存儲方式,在 MyCat 裏,都是一個傳統的數據庫表,支持標準的 SQL 語句進行數據的操做,這樣一來,對前端業務系統來講,能夠大幅下降開發難度,提高開發速度。
MyCat 官網: www.mycat.io/java
單一的 MySQL 其數據存儲量級和操做量級有限.
Mycat 能夠管理若干 MySQL 數據庫,同時實現數據的存儲和操做.mysql
MyCat 在互聯網應用中佔比很是高.nginx
邏輯上的切分. 在物理層面,是使用多庫[database],多表[table]實現的切分.程序員
就是把本來存儲於一個庫的數據存儲到多個庫上。
因爲對數據庫的讀寫都是對同一個庫進行操做,因此單庫並不能解決大規模併發寫入的問題。例如,咱們會創建定義數據庫 workDB、商品數據庫 payDB、用戶數據庫 userDB、日誌數據庫 logDB 等,分別用於存儲項目數據定義表、商品定義表、用戶數據表、日誌數據表等。redis
優勢算法
缺點:沒法解決單表數據量太大的問題。sql
把本來存儲於一個表的數據分塊存儲到多個表上。
當一個表中的數據量過大時,咱們能夠把該表的數據按照某種規則,進行劃分,而後存儲到多個結構相同的表,和不一樣的庫上。例如,咱們 userDB 中的 userTable 中數據量很大,那麼能夠把 userDB 切分爲結構相同的多個 userDB:part0DB、part1DB 等,再將 userDB 上的 userTable,切分爲不少userTable:userTable0、userTable1 等,而後將這些表按照必定的規則存儲到多個 userDB 上。數據庫
優勢後端
缺點:沒法實現錶鏈接查詢。
Mycat 中定義的 database.是邏輯上存在的.可是物理上是不存在的.主要是針對縱向切分提供的概念.
Mycat 中定義的 table.是邏輯上存在,物理上是不存在的.主要是針對橫向切分提供的概念.
應用 | 端口 |
---|---|
MySQL | 3306 |
Mycat | 8066 |
tomcat | 8080 |
Oracle | 1521 |
nginx | 80 |
http | 80 |
redis | 6379 |
物理 MySQL 存放的主機地址.可使用主機名,IP,域名定義.
配置物理的 database. 數據保存的物理節點.就是 database.
當控制數據的時候,如何訪問物理 database 和 table.就是訪問 dataHost 和 dataNode 的算法. 在 Mycat 處理具體的數據 CRUD 的時候,如何訪問 dataHost 和 dataNode 的算法.如:哈希算法,crc32 算法等.