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