更新時間:2020-07-28 15:37:15 來源:動力節點 瀏覽2030次
Mycat是什么?
從定義和分類來看,它是一個開源的分布式數據庫系統,是一個實現了MySQL協議的Server,前端用戶可以把它看做是一個數據庫代理,用MySQL客戶端工具和命令行訪問,而其后端可以用MySQL原生(Native)協議與多個MySQL服務器通信,也可以用JDBC協議與大多數主流數據庫服務器通信,其核心功能是分庫分表,即將一個大表水平分割為N個小表,存儲在后端MySQL服務器里或者其他數據庫里。
Mycat發展到目前版本,已經不在是一個單純的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流數據庫,也支持MongoDB這種新型NOSQL方式的存儲,未來還會支持更多類型的存儲。而在最終用戶看來,無論是那種存儲方式,在Mycat里,都是一個傳統的數據庫表,支持標準的SQL語句進行數據的操作,這樣一來,對前端業務系統來說,可以大幅度降低開發難度,提升開發速度,在測試階段,可以將一表定義為任何一種Mycat支持的存儲方式,比如MySQL的MyASM表、內存表、或者MongoDB、LeveIDB以及號稱是世界上最快的內存數據庫MemSQL上。
MyCAT的架構如下圖所示:
我來分析一下前三種是怎么理解MyCat
對于DBA來說,可以這么理解Mycat:
Mycat就是MySQL Server,而Mycat后面連接的MySQL Server,就好象是MySQL的存儲引擎,如InnoDB,MyISAM等,因此,Mycat本身并不存儲數據,數據是在后端的MySQL上存儲的,因此數據可靠性以及事務等都是MySQL保證的,簡單的說,Mycat就是MySQL最佳伴侶,它在一定程度上讓MySQL擁有了能跟Oracle PK的能力。
對于軟件工程師來說,可以這么理解Mycat:
Mycat就是一個近似等于MySQL的數據庫服務器,你可以用連接MySQL的方式去連接Mycat(除了端口不同,默認的Mycat端口是8066而非MySQL的3306,因此需要在連接字符串上增加端口信息),大多數情況下,可以用你熟悉的對象映射框架使用Mycat,但建議對于分片表,盡量使用基礎的SQL語句,因為這樣能達到最佳性能,特別是幾千萬甚至幾百億條記錄的情況下。
對于架構師來說,可以這么理解Mycat:
Mycat是一個強大的數據庫中間件,不僅僅可以用作讀寫分離、以及分表分庫、容災備份,而且可以用于多租戶應用開發、云平臺基礎設施、讓你的架構具備很強的適應性和靈活性,借助于即將發布的Mycat智能優化模塊,系統的數據訪問瓶頸和熱點一目了然,根據這些統計分析數據,你可以自動或手工調整后端存儲,將不同的表映射到不同存儲引擎上,而整個應用的代碼一行也不用改變。
一丶Mycat原理
Mycat的原理中最重要的一個動詞是“攔截”,它攔截了用戶發送過來的SQL語句,首先對SQL語句做了一些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,然后將此SQL發往后端的真實數據庫,并將返回的結果做適當的處理,最終再返回給用戶。
上述圖片里,Orders表被分為三個分片datanode(簡稱dn),這三個分片是分布在兩臺MySQL Server上(DataHost),即datanode=database@datahost方式,因此你可以用一臺到N臺服務器來分片,分片規則為(sharding rule)典型的字符串枚舉分片規則,一個規則的定義是分片字段(sharding column)+分片函數(rule function),這里的分片字段為rov而分片函數為字符串枚舉方式。
當Mycat收到一個SQL時,會先解析這個SQL,查找涉及到的表,然后看此表的定義,如果有分片規則,則獲取到SQL里分片字段的值,并匹配分片函數,得到該QL對應的分片列表,然后將SQL發往這些分片去執行,最后收集和處理所有分片返回的結果數據,并輸出到客戶端。以select * from Orders where prov=?語句為例,查到prov=wuhan,按照分片函數,wuhan返回
dn1,于是SQL就發給了MySQL1,去取DB1上的查詢結果,并返回給用戶。
上述圖片里,Orders表被分為三個分片datanode(簡稱dn),這三個分片是分布在兩臺MySQL Server上(DataHost),即datanode=database datahost方式,因此你可以用一臺到N臺服務器來分片,分片規則為(sharding rule)典型的字符串枚舉分片規則,一個規則的定義是分片字段(sharding column)+分片函數(rule function),這里的分片字段為rov而分片函數為字符串枚舉方式。
當Mycat收到一個SQL時,會先解析這個SQL,查找涉及到的表,然后看此表的定義,如果有分片規則,則獲取到SQL里分片字段的值,并匹配分片函數,得到該QL對應的分片列表,然后將SQL發往這些分片去執行,最后收集和處理所有分片返回的結果數據,并輸出到客戶端。以select*from Orders where prov=?語句為例,查到prov=wuhan,按照分片函數,wuhan返回
dn1,于是SQL就發給了MySQL1,去取DB1上的查詢結果,并返回給用戶。
二丶MyCat的關鍵
支持SQL 92標準;
支持MySQL集群,可以作為Proxy使用;
支持JDBC連接ORACLE、DB2、SQL Server,將其模擬為MySQL Server使用;
支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性數據分片集群;
自動故障切換,高可用性;
支持讀寫分離,支持MySQL雙主多從,以及一主多從的模式;
支持全局表,數據自動分片到多個節點,用于高效表關聯查詢;
三丶MyCat的優勢
基于阿里開源的Cobar產品而研發,Cobar的穩定性、可靠性、優秀的架構和性能,以及眾多成熟的使用案例使得MyCAT一開始就擁有一個很好的起點,站在巨人的肩膀上,能看到更遠。
廣泛吸取業界優秀的開源項目和創新思路,將其融入到MyCAT的基因中,使得MyCAT在很多方面都領先于目前其他一些同類的開源項目,甚至超越某些商業產品。
MyCAT背后有一只強大的技術團隊,其參與者都是5年以上資深軟件工程師、架構師、DBA等,優秀的技術團隊保證了MyCAT的產品質量。
MyCAT并不依托于任何一個商業公司,因此不像某些開源項目,將一些重要的特性封閉在其商業產品中,使得開源項目成了一個擺設。
四丶邏輯庫(schema)
通常對實際應用來說,并不需要知道中間件的存在,開發人員只需要知道數據庫的概念,所以數據庫中間件可以被看做是一個或多個數據庫集群構成的邏輯庫。
在云計算時代,數據庫中間件可以以多租戶的形式給一個或多個應用提供服務,每個應用訪問的可能是一個獨立或者是共享的物理庫,常見的如阿里云數據庫服務器RDS。
Mycat視頻教程下載:http://www.dabaquan.cn/javavideo/157.html
Mycat教程:http://www.dabaquan.cn/tutorial_mycat/
以上就是動力節點java培訓機構的小編針對“Java數據庫學習視頻之MyCat的基本使用”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習