mycat工作原理


Mycat的原理並不復雜,復雜的是代碼,如果代碼也不復雜,那么早就成為一個傳說了。

Mycat的原理中最重要的一個動詞是“攔截”,它攔截了用戶發送過來的SQL語句,首先對SQL語句做了一些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,然后將此SQL發往后端的真實數據庫,並將返回的結果做適當的處理,最終再返回給用戶。

上述圖片里,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、以及結合Storm/Spark引擎等十八般武藝的解決辦法,從而成為目前業界最強大的方案,這就是開源的力量!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM