Mycat原理node
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引擎等十八般武藝的解決辦法,從而成爲目前業界
最強大的方案,這就是開源的力量!數據庫
應用場景
Mycat發展到如今,適用的場景已經很豐富,並且不斷有新用戶給出新的創新性的方案,如下是幾個典型的應用場景:
單純的讀寫分離,此時配置最爲簡單,支持讀寫分離,主從切換
分表分庫,對於超過1000萬的表進行分片,最大支持1000億的單表分片
多租戶應用,每一個應用一個庫,但應用程序只鏈接Mycat,從而不改造程序自己,實現多租戶化
報表系統,藉助於Mycat的分表能力,處理大規模報表的統計
替代Hbase,分析大數據
做爲海量數據實時查詢的一種簡單有效方案,好比100億條頻繁查詢的記錄須要在3秒內查詢出來結果,除了基於主鍵的查
詢,還可能存在範圍查詢或其餘屬性查詢,此時Mycat多是最簡單有效的選擇
Mycat長期路線圖
強化分佈式數據庫中間件的方面的功能,使之具有豐富的插件、強大的數據庫智能優化功能、全面的系統監控能力、以及方
便的數據運維工具,實如今線數據擴容、遷移等高級功能
進一步挺進大數據計算領域,深度結合Spark Stream和Storm等分佈式實時流引擎,可以完成快速的巨表關聯、排序、分組
聚合等 OLAP方向的能力,並集成一些熱門經常使用的實時分析算法,讓工程師以及DBA們更容易用Mycat實現一些高級數據分
析處理功能。
不斷強化Mycat開源社區的技術水平,吸引更多的IT技術專家,使得Mycat社區成爲中國的Apache,並將Mycat推到Apache
基金會,成爲國內頂尖開源項目,最終可以讓一部分志願者成爲專職的Mycat開發者,榮耀跟實力一塊兒提高。
依託Mycat社區,彙集100個CXO級別的精英,衆籌建設親親山莊,Mycat社區+親親山莊=中國最大IT O2O社區後端
收錄於:Mycat權威指南,感謝做者緩存