一、背景
隨着時間和業務的發展,數據庫中的數據量增長是不可控的,庫和表中的數據會越來越大,隨之帶來的是更高的磁盤、IO、系統開銷,甚至性能上的瓶頸,而一台服務的資源終究是有限的,因此需要對數據庫和表進行拆分,從而更好的提供數據服務。
當用戶表達到千萬級別,在做很多操作的時候都會很吃力,所以當數據增長到1000萬以上就需要分庫分表來緩解單庫(表)的壓力。
二、mycat原理
可以用攔截形容,它攔截了用戶發送過來的SQL語句,首先對sql語句做了一些特定的分析,如分片分析,路由分析,讀寫分析,讀寫分離分析,緩存分析等,然后將此sql發送后端的真是數據庫,並將反饋的結果做適當的處理,最終返回給用戶
三、mycat介紹
•一個用於MySQL讀寫分離和與數據切分的高可用中間件
•一個模擬為MySQLServer的超級數據庫代理
•一個能平滑擴展支持1000億大表的分布式數據庫系統 (普通單表1kw以下)
•一個可管控多種關系數據庫的數據庫路由器
•一個徹底開源的,面向企業應用開發的大數據庫集群
• 支持事務、ACID、可以替代MySQL的加強版數據庫
•一個可以視為MySQL集群的企業級數據庫,用來替代昂貴的Oracle集群
•一個融合內存緩存技術、NoSQL技術、HDFS大數據的新型SQL Server
• 結合傳統數據庫和新型分布式數據倉庫的新一代企業級數據庫產品
•一個新穎的數據庫中間件產品
四、什么是分庫分表
簡單來說,就是指通過某種特定的條件,將我們存放在同一個數據庫中的數據分散存放到多個數據庫(主機)上面,以達到分散單台設備負載的效果。
數據的切分(Sharding)根據其切分規則的類型,可以分為兩種切分模式。一種是按照不同的表(或者Schema)來切分到不同的數據庫(主機)之上,這種切可以稱之為數據的垂直(縱向)切分;另外一種則是根據表中的數據的邏輯關系,將同一個表中的數據按照某種條件拆分到多台數據庫(主機)上面,這種切分稱之為數
據的水平(橫向)切分。
垂直切分的最大特點就是規則簡單,實施也更為方便,尤其適合各業務之間的耦合度非常低,相互影響很小,業務邏輯非常清晰的系統。在這種系統中,可以很容易做到將不同業務模塊所使用的表分拆到不同的數據庫中。根據不同的表來進行拆分,對應用程序的影響也更小,拆分規則也會比較簡單清晰。
水平切分於垂直切分相比,相對來說稍微復雜一些。因為要將同一個表中的不同數據拆分到不同的數據庫中,對於應用程序來說,拆分規則本身就較根據表名來拆分更為復雜,后期的數據維護也會更為復雜一些。
五、分片介紹
5.1垂直切片
將不同的表切分到不同的數據庫中
5.2水平切片
將同一類型表按照分片條件切分到不同的數據庫中(常用)
六、配置文件
mycat主要有3個配置文件,rule.xml,schema.xml和server.xml,這主要對這3個文件作講解
七、 關鍵特性
-遵守Mysql原生協議,跨語言,跨數據庫的通用中間件代理。
-基於心跳的自動故障切換,支持讀寫分離,支持MySQL一雙主多從,以及一主多從
-有效管理數據源連接,基於數據分庫,而不是分表的模式。
-基於Nio實現,有效管理線程,高並發問題。
-支持數據的多片自動路由與聚合,支持sum,count,max等常用的聚合函數。
-支持2表join,甚至基於caltlet的多表join。
-支持通過全局表,ER關系的分片策略,實現了高效的多表join查詢。
-支持多租戶方案。-支持分布式事務(弱xa)
-支持全局序列號,解決分布式下的主鍵生成問題。
-分片規則豐富,插件化開發,易於擴展。
-強大的web,命令行監控。
-支持前端作為mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server、mongodb、巨杉。
-集群基於ZooKeeper管理,在線升級,擴容,智能優化,大數據處理(2.0開發版)。
八、安裝
官網下載: http://www.mycat.io/
下載后解壓,進入mycat\bin 目錄
雙擊啟動 startup_nowrap.bat