分布式数据库中间件Mycat百亿级数据存储(转)
此文轉(zhuǎn)自: https://www.jianshu.com/p/9f1347ef75dd
?
2013年阿里的Cobar在社區(qū)使用過程中發(fā)現(xiàn)存在一些比較嚴(yán)重的問題,如高并發(fā)下的假死,心跳連接的故障,只實(shí)現(xiàn)了一半的NIO,和看上去很美的自動(dòng)連接讓我們在使用過程中掉入了一個(gè)接一個(gè)的陷阱,苦苦掙扎。終于,經(jīng)過Mycat帶頭人Leader.us的改良——Mycat誕生了。
Mycat 開源后,一些 Cobar 的用戶參與了Mycat的開發(fā),最終 Mycat 發(fā)展成為一個(gè)由眾多軟件公司的實(shí)力派架構(gòu)師和資深開發(fā)人員維護(hù)的社區(qū)型開源軟件。
2014 年 Mycat 首次在上海的《中華架構(gòu)師》大會(huì)上對外宣講,更多的人參與進(jìn)來,隨后越來越多的項(xiàng)目采用了 Mycat。
2015 年 5 月,由核心參與者們一起編寫癿第一本官方權(quán)威指南《 Mycat 權(quán)威指南》電子版發(fā)布,累計(jì)超過500 本,成為開源項(xiàng)目中的首創(chuàng)。
2015 年 10 月為止,Mycat 項(xiàng)目總共有 16 個(gè) Committer。
截至 2015 年 11 月,超過300 個(gè)項(xiàng)目采用 Mycat,涵蓋銀行、電信、電子唱?jiǎng)?wù)、物流、移動(dòng)應(yīng)用、 O2O
的眾多領(lǐng)域和公司。
截至2016 年 3 月,超過6000 名用戶加群或研究討論或測試或使用 Mycat。
Mycat是基于開源cobar演變而來,我們對cobar的代碼進(jìn)行了徹底的重構(gòu),使用NIO重構(gòu)了網(wǎng)絡(luò)模塊,并且優(yōu)化了Buffer內(nèi)核,增強(qiáng)了聚合,Join等基本特性,同時(shí)兼容絕大多數(shù)數(shù)據(jù)庫成為通用的數(shù)據(jù)庫中間件。1.4 版本以后 完全的脫離基本cobar內(nèi)核,結(jié)合Mycat集群管理、自動(dòng)擴(kuò)容、智能優(yōu)化,成為高性能的中間件。我們致力于開發(fā)高性能數(shù)據(jù)庫中間而努力。永不收費(fèi),永不閉源,持續(xù)推動(dòng)開源社區(qū)的發(fā)展。
MyCat是什么?
從定義和分類來看,它是一個(gè)開源的分布式數(shù)據(jù)庫系統(tǒng),是一個(gè)實(shí)現(xiàn)了MySQL協(xié)議的服務(wù)器,前端用戶可以把它看作是一個(gè)數(shù)據(jù)庫代理,用MySQL客戶端工具和命令行訪問,而其后端可以用MySQL原生協(xié)議與多個(gè)MySQL服務(wù)器通信,也可以用JDBC協(xié)議與大多數(shù)主流數(shù)據(jù)庫服務(wù)器通信,其核心功能是分表分庫讀寫分離,即將一個(gè)大表水平分割為N個(gè)小表,存儲(chǔ)在后端MySQL服務(wù)器里或者其他數(shù)據(jù)庫里。也可以指定多個(gè)寫庫多個(gè)讀庫。
MyCat發(fā)展到目前的版本,已經(jīng)不是一個(gè)單純的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流數(shù)據(jù)庫,也支持MongoDB這種新型NoSQL方式的存儲(chǔ),未來還會(huì)支持更多類型的存儲(chǔ)。而在最終用戶看來,無論是那種存儲(chǔ)方式,在MyCat里,都是一個(gè)傳統(tǒng)的數(shù)據(jù)庫表,支持標(biāo)準(zhǔn)的SQL語句進(jìn)行數(shù)據(jù)的操作,這樣一來,對前端業(yè)務(wù)系統(tǒng)來說,可以大幅降低開發(fā)難度,提升開發(fā)速度。
by 落羽成霜
為什么用Mycat?
1. 連接過多問題,可以通過MyCat統(tǒng)一管理所有的數(shù)據(jù)源,后端數(shù)據(jù)庫集群對前端應(yīng)用程序透明。
使用MyCat之前。 關(guān)注微信號(hào)架構(gòu)設(shè)計(jì)者看更多干貨
?
MyCat改造后。 關(guān)注微信架構(gòu)設(shè)計(jì)者看更多干貨
2. 獨(dú)創(chuàng)的ER關(guān)系分片,解決E-R分片難處理問題,存在關(guān)聯(lián)關(guān)系的父子表在數(shù)據(jù)插入的過程中,子表會(huì)被MyCat路由到其相關(guān)父表記錄的節(jié)點(diǎn)上,從而父子表的Join查詢可以下推到各個(gè)數(shù)據(jù)庫節(jié)點(diǎn)上完成,這是最高效的跨節(jié)點(diǎn)Join處理技術(shù),也是MyCat首創(chuàng)。
?
關(guān)注微信架構(gòu)設(shè)計(jì)者看更多干貨
3. 采用全局分片技術(shù),每個(gè)節(jié)點(diǎn)同時(shí)并發(fā)插入和更新數(shù)據(jù),每個(gè)節(jié)點(diǎn)都可以讀取數(shù)據(jù),提升讀性能的同時(shí),也解決跨節(jié)點(diǎn)Join的效率。
?
關(guān)注微信架構(gòu)設(shè)計(jì)者查看更多干貨
4. 通過人工智能的catlet支持跨分片復(fù)雜SQL實(shí)現(xiàn)以及存儲(chǔ)過程支持等。使用方式主要通過MyCat注釋的方式來執(zhí)行,如下:
(1)跨分片聯(lián)合查詢注解支持:
/*!MyCat:catlet=demo.catlets.ShareJoin / select bu. ,sg.* from base_user bu,sam_glucose sg where bu.id_=sg.user_id;
注:sam_glucose是跨分片表。
(2)存儲(chǔ)過程注解支持:
/*!MyCat: sql=select * from base_user where id_=1;*/ CALL proc_test();
注:目前執(zhí)行存儲(chǔ)過程通過MyCat注解的方式執(zhí)行,注意需要把存儲(chǔ)過程中的sql寫到注解中。
(3)批量插入與ID自增長結(jié)合的支持:
/*!MyCat:catlet=demo.catlets.BatchInsertSequence */ insert into sam_test(name_) values(‘t1’),(‘t2’);
注:此方式不需要在sql語句中顯示的設(shè)置主鍵字段,程序在后臺(tái)根據(jù)primaryKey配置的主鍵列,自動(dòng)生成主鍵的sequence值并替換原sql中相關(guān)的列和值;
(4)獲取批量sequence值的支持:
/*!MyCat:catlet=demo.catlets.BatchGetSequence */SELECT MyCat_get_seq(‘MyCat_TEST’,100);
注:此方法表示獲取MyCat_TEST表的100個(gè)sequence值,例如當(dāng)前MyCat_TEST表的最大sequence值為5000,則通過此方式返回的是5001,同時(shí)更新數(shù)據(jù)庫中的MyCat_TEST表的最大sequence值為5100。
(5)更好地支持?jǐn)?shù)據(jù)庫讀寫分離與高可用性,MyCat支持基于MySQL主從復(fù)制狀態(tài)的高級讀寫分離控制機(jī)制(比如Slave_behind_master <100則開啟),而一旦檢測到主從同步出錯(cuò)或者延時(shí)超過發(fā)展,則自動(dòng)排除readHost,防止程序讀到很久的舊數(shù)據(jù)。
MyCat下一步規(guī)劃
強(qiáng)化分布式數(shù)據(jù)庫中間件的面的功能,使之具備豐富的插件、強(qiáng)大的數(shù)據(jù)庫智能優(yōu)化功能、全面的系統(tǒng)監(jiān)控能力、以及方便的數(shù)據(jù)運(yùn)維工具,實(shí)現(xiàn)在線數(shù)據(jù)擴(kuò)容、遷移、事物等高級功能。
Mycat 吸引和聚集了一大批業(yè)內(nèi)大數(shù)據(jù)和云計(jì)算方面的資深工程師,Mycat 的發(fā)展壯大基于開源社區(qū)志愿者的持續(xù)努力,感謝社區(qū)志愿者的努力讓Mycat更加強(qiáng)大,同時(shí)我們也歡迎更多的志愿者參與Mycat的開發(fā),一起推動(dòng)社區(qū)的發(fā)展,為程序世界提供更好的開源中間件。
Mycat 官方網(wǎng)站:http://www.mycat.io/
Mycat 源碼:https://github.com/MyCATApache/Mycat-Server
Mycat 下載地址:https://github.com/MyCATApache/Mycat-download
作者:落羽成霜丶 鏈接:https://www.jianshu.com/p/9f1347ef75dd 來源:簡書 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。------------------你若盛開 - 蝴蝶自來------------------
??鄙人聯(lián)系方式:
QQ:1914295136?
微信(手機(jī))號(hào):暫無
來源:https://www.cnblogs.com/xifenglou/p/8409082.html
總結(jié)
以上是生活随笔為你收集整理的分布式数据库中间件Mycat百亿级数据存储(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小学生12岁能谈恋爱吗(六年级小学生谈恋
- 下一篇: mysql大数据量处理