MyCat詳解(1.MyCat簡介)

1,什麼是MyCat

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

MyCat發展到目前的版本,已經不是一個單純的MySQL代理了,它的後端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流數據庫,也支持MongoDB這種新型NoSQL方式的存儲,未來還會支持更多類型的存儲。而在最終用戶看來,無論是那種存儲方式,在MyCat裏,都是一個傳統的數據庫表,支持標準的SQL語句進行數據的操作,這樣一來,對前端業務系統來說,可以大幅降低開發難度,提升開發速度
在這裏插入圖片描述

更多解釋見官網:http://www.mycat.io/

項目地址:https://github.com/MyCATApache/Mycat-Server
在這裏插入圖片描述

2,爲什麼使用MyCat

??如今隨着互聯網的發展,數據的量級也是撐指數的增長,從GB到TB到PB。對數據的各種操作也是愈加的困難,傳統的關係性數據庫已經無法滿足快速查詢與插入數據的需求。這個時候NoSQL的出現暫時解決了這一危機。它通過降低數據的安全性,減少對事務的支持,減少對複雜查詢的支持,來獲取性能上的提升。但是,在有些場合NoSQL一些折衷是無法滿足使用場景的,就比如有些使用場景是絕對要有事務與安全指標的。這個時候NoSQL肯定是無法滿足的,所以還是需要使用關係性數據庫。如何使用關係型數據庫解決海量存儲的問題呢?此時就需要做數據庫集羣,爲了提高查詢性能將一個數據庫的數據分散到不同的數據庫中存儲,爲應對此問題就出現了——MyCat

綜上所述:Mycat作用爲:能滿足數據庫數據大量存儲;提高了查詢性能;實現讀寫分離,分庫分表,如下

  1. :解決表的容量問題

    Mysql的表最大存儲多少數據?500w條

  2. :解決表查詢的性能問題?log(n) https://www.cnblogs.com/glzgc/p/10831877.html
    我的表裏面的數據非常多,導致我查詢很慢?

  3. :解決表的DML的性能問題?

    2000條/s

  4. :解決mysql 掛了的問題

3,MyCat解決問題的思路

1:容量

在這裏插入圖片描述

2:查詢速度

最快也是Log(n),你加什麼索引都不行

在這裏插入圖片描述

3:寫入問題
在這裏插入圖片描述

4,Mycat和MySQL的區別。

我們可以把上層看作是對下層的抽象,例如操作系統是對各類計算機硬件的抽象。那麼我們什麼時候需要抽象?假如只有一種硬件的時候,我們需要開發一個操作系統嗎?再比如一個項目只需要一個人完成的時候不需要leader,但是當需要幾十人完成時,就應該有一個管理者,發揮溝通協調等作用,而這個管理者對於他的上層來說就是對項目組的抽象。同樣的,當我們的應用只需要一臺數據庫服務器的時候我們並不需要Mycat,而如果你需要分庫甚至分表,這時候應用要面對很多個數據庫的時候,這個時候就需要對數據庫層做一個抽象,來管理這些數據庫,而最上面的應用只需要面對一個數據庫層的抽象或者說數據庫中間件就好了,這就是Mycat的核心作用。所以可以這樣理解:數據庫是對底層存儲文件的抽象,而Mycat是對數據庫的抽象。

5,支持的數據庫

??mysql,sqlserver,mongoDB等
在這裏插入圖片描述

6,架構

??前端用戶可以把mycat看作是一個數據庫代理,用mysql客戶端工具(如Navicat)和命令訪問,而後端支持mysql,sqlserver,oracle等主流數據庫,用mysql native 協議和多個mysql服務器通信,也可用JDBC協議與大多數主流數據庫服務器通信,其核心功能就是分庫分表,即將一個大表水平分割爲N個小表,真正的存儲在後端Mysql服務器中或其它數據庫中
在這裏插入圖片描述

??mycat原理:可以用“攔截”一詞形容,它攔截了用戶發送過來的SQL語句,首先對SQL語句做了一些特定的分析,如分片分析,路由分析,讀寫分離分析,緩存分析等,然後將此sql發往後端的真實數據庫,並將返回的結果做適當處理,最終返回給用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章