MYCAT介紹(轉)

從定義和分類來看,它是一個開源的分佈式數據庫系統,是一個實現了MySQL協議的服務器,前端用戶能夠把它看做是一個數據庫代理,用MySQL客戶端工具和命令行訪問,而其後端能夠用MySQL原生協議與多個MySQL服務器通訊,也能夠用JDBC協議與大多數主流數據庫服務器通訊,其核心功能是分表分庫,即將一個大表水平分割爲N個小表,存儲在後端MySQL服務器裏或者其餘數據庫裏。前端

MyCat發展到目前的版本,已經不是一個單純的MySQL代理了,它的後端能夠支持MySQL、SQL Server、Oracle、DB二、PostgreSQL等主流數據庫,也支持MongoDB這種新型NoSQL方式的存儲,將來還會支持更多類型的存儲。而在最終用戶看來,不管是那種存儲方式,在MyCat裏,都是一個傳統的數據庫表,支持標準的SQL語句進行數據的操做,這樣一來,對前端業務系統來講,能夠大幅下降開發難度,提高開發速度node

 1. 鏈接過多問題,能夠經過MyCat統一管理全部的數據源,後端數據庫集羣對前端應用程序透明算法

   對比     數據庫

 

2. 首創的ER關係分片,解決E-R分片難處理問題,存在關聯關係的父子表在數據插入的過程當中,子表會被MyCat路由到其相關父表記錄的節點上,從而父子表的Join查詢能夠下推到各個數據庫節點上完成,這是最高效的跨節點Join處理技術,也是MyCat獨創。後端

 

3. 採用全局分片技術,每一個節點同時併發插入和更新數據,每一個節點均可以讀取數據,提高讀性能的同時,也解決跨節點Join的效率。緩存

4. 經過人工智能的catlet支持跨分片複雜SQL實現以及存儲過程支持等服務器

圖6  Mycat支持基於MySQL主從複製狀態的高級讀寫分離控制機制併發

 

MyCat技術原理運維

MyCat技術原理中最重要的一個動詞是「攔截」,它攔截了用戶發送過來的SQL語句,首先對SQL語句作了一些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,而後將此SQL發日後端的真實數據庫,並將返回的結果作適當的處理,最終再返回給用戶。分佈式

圖7  Orders被分爲三個分片datanode

如圖7所示,Orders表被分爲三個分片datanode(簡稱dn),這三個分片是分佈在兩臺MySQL Server上(DataHost),即datanode=database@datahost方式,所以你能夠用一臺到N臺服務器來分片,分片規則爲(sharding rule)典型的字符串枚舉分片規則,一個規則的定義是分片字段(sharding column)+分片函數(rule function),這裏的分片字段爲prov而分片函數爲字符串枚舉方式。當MyCat收到一個SQL時,會先解析這個SQL,查找涉及到的表,而後看此表的定義,若是有分片規則,則獲取到SQL裏分片字段的值,並匹配分片函數,獲得該SQL對應的分片列表,而後將SQL發往這些分片去執行,最後收集和處理全部分片返回的結果數據,並輸出到客戶端。以select * from Orders where prov=?語句爲例,查到prov=wuhan,按照分片函數,wuhan返回dn1,因而SQL就發給了MySQL1,去取DB1上的查詢結果,並返回給用戶。若是上述SQL改成select * from Orders where prov in (‘wuhan’,‘beijing’),那麼,SQL就會發給MySQL1與MySQL2去執行,而後結果集合並後輸出給用戶。但一般業務中咱們的SQL會有Order By以及Limit翻頁語法,此時就涉及到結果集在MyCat端的二次處理,這部分的代碼也比較複雜,而最複雜的則屬兩個表的Jion問題,爲此,MyCat提出了創新性的ER分片、全局表、HBT(Human Brain Tech)人工智能的Catlet等。

MyCat下一步規劃

強化分佈式數據庫中間件的面的功能,使之具有豐富的插件、強大的數據庫智能優化功能、全面的系統監控能力、以及方便的數據運維工具,實如今線數據擴容、遷移等高級功能。

進一步挺進大數據計算領域,深度結合Spark Stream和Storm等分佈式實時流引擎,可以完成快速的巨表關聯、排序、分組聚合等OLAP方向的能力,並集成一些熱門經常使用的實時分析算法,讓工程師以及DBA們更容易用MyCat實現一些高級數據分析處理功能。

相關文章
相關標籤/搜索