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