Mycat概述與應用場景
mycat是一個資料庫中介軟體,也可以理解為是資料庫代理。在架構體系中是位於資料庫和應用層之間的一個元件,並且對於應用層是透明的,即資料庫感受不到mycat的存在,認為是直接連線的mysql資料庫,見下圖:

MyCAT原理
MyCAT主要是通過對SQL的攔截,然後經過一定規則的分片解析、路由分析、讀寫分離分析、快取分析等,然後將SQL發給後端真實的資料塊,並將返回的結果做適當處理返回給客戶端。
mycat的三大功能:分表、讀寫分離、主從切換;
實現方式:在mycat的配置檔案schem.xml配置writehost 跟readhost, server.xml配置資料庫的賬戶資訊,rule.xml用於分庫分表的規則。
為什麼要用mycat:
主要配合作用於對於系統業務的擴充套件。例如為了快速開發一個電商小專案,前期就是一個單工程,應用層直接到資料庫。當我們的登入註冊使用者量上來之後,我們可以開始對資料庫進行一個讀寫分離的配置,將讀的壓力全部分發到slave承擔。這時候就能解決很大一部分的壓力。
當然僅僅只有一個讀寫分離,還是不行的。我們後續可能要針對系統應用層進行一個橫向拓展跟縱向的拆分,拆分為訂單中心,會員中心,註冊中心... 那麼此時我們的資料庫也相應的拆分成單獨部署的幾個獨立資料庫提供給相應的資料持久化,然後將這些資料來源配置在mycat當中,對於應用層面來說是透明的,應用層不用再去理會我到底連線的是哪個資料庫,mycat通過自身的配置可以完成這個任務。
再到後面我們訂單表越來越龐大,到達了單表幾千萬甚至一個億,這個時候我們考慮用mycat進行單表的一個拆分,拆分的規則有很多種,可以按月拆分,取模拆分。當我們進行訪問訂單表的時候,mycat會根據我們的分片規則解析sql自動的路由派發到相應的子表上去,從而減輕單表幾千萬的壓力。