初識mycat

一、mycat簡介:

Mycat 是一個開源的分佈式數據庫系統,是一個實現了 MySQL 協議的Server,前端用戶可以把它看作是一個數據庫代理,用MySQL 客戶端工具和命令行訪問,而其後端可以用MySQL 原生(Native)協議與多個 MySQL 服務器通信,也可以用 JDBC 協議與大多數主流數據庫服務器通信,其核心功能是分表分庫,即將一個大表水平分割爲 N 個小表,存儲在後端 MySQL 服務器裏或者其他數據庫裏。

Mycat 發展到目前的版本,已經不是一個單純的 MySQL 代理了,它的後端可以支持 MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流數據庫,也支持 MongoDB 這種新型 NoSQL 方式的存儲,未來還會支持更多類型的存儲。而在最終用戶看來,無論是那種存儲方式,在 Mycat 裏,都是一個傳統的數據庫表,支持標準的 SQL 語句進行數據的操作,這樣一來,對前端業務系統來說,可以大幅降低開發難度,提升開發速度,在測試階段,可以將一個表定義爲任何一種 Mycat 支持的存儲方式,比如 MySQL 的 MyASIM 表、內存表、或者 MongoDB、LevelDB 以及號稱是世界上最快的內存數據庫 MemSQL 上。

二、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 引擎等十八般武藝的解決辦法,從而成爲目前業界最強大的方案,這就是開源的力量!

三、爲什麼要使用mycat及mycat的應用場景

隨着時間和業務的發展,庫中的表會越來越多,表中的數據量也會越來越大,相應地數據操作,增刪改查的開銷也會越來越大;另外,由於無法進行分佈式式部署,而一臺服務器的資源(CPU、磁盤、內存、IO等)是有限的,最終數據庫所能承載的數據量、數據處理能力都將遭遇瓶頸。

以下是幾個典型的應用場景:

  • 單純的讀寫分離,此時配置最爲簡單,支持讀寫分離,主從切換;
  • 分表分庫,對於超過 1000 萬的表進行分片,最大支持 1000 億的單表分片;
  • 多租戶應用,每個應用一個庫,但應用程序只連接 Mycat,從而不改造程序本身,實現多租戶化;
  • 報表系統,藉助於 Mycat 的分表能力,處理大規模報表的統計;

替代 Hbase,分析大數據;

  • 作爲海量數據實時查詢的一種簡單有效方案,比如 100 億條頻繁查詢的記錄需要在 3 秒內查詢出來結果,除了基於主鍵的查詢,還可能存在範圍查詢或其他屬性查詢,此時 Mycat 可能是最簡單有效的選擇
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章