MyCat概述與基本概念

季子月 2024-04-15 19:00 14次浏览 0 条评论 taohigo.com

什麼是MyCat

MyCat 是什麼?從定義和分類來看,它是一個開源的分佈式數據庫系統,前端的用戶可以把它看成一個數據庫代理,用MySql客戶端和命令行工具都可以訪問,而其後端則是用MySql原生的協議與多個MySql服務之間進行通信。MyCat的核心功能是分庫分表,即將一個大表水平切分成N個小表,然後存放在後端的MySql數據當中。

MyCat發展到目前的版本,已經不是一個單純的MySql代理瞭,它的後端支持MySql,Oracle,SqlServer,DB2等主流的數據庫,也支持MongoDB這種NoSql數據庫。而對於前端的用戶來說,無論後端采用哪一種數據庫,在MyCat裡都是一個傳統的數據庫,支持標準的SQL語句,對於前端的開發人員來說,可以大大地降低開發難度,提升開發速度。

對於DBA來說,可以這樣理解MyCat:

MyCat就是MySql,而MyCat後面連接的MySql,可以理解為MySql中的存儲引擎,比如:MyISAM、InnoDB等。所以,MyCat本身不存儲數據,數據都是存儲在MyCat後面連接的MySql上,數據的可靠性和事務都是MySql保證的。

對於開發人員,可以這樣理解MyCat:

MyCat就是一個近似等於MySql的數據庫庫服務,你可以使用連接MySql的方式連接MyCat。絕大多數情況,你也可以使用常用的ORM框架連接MyCat,但是,對於分片的表,還是建議使用標準SQL語句,這樣能夠達到最佳的性能。

對於架構師來說,可以這樣理解MyCat:

MyCat是一個強大的數據庫中間件,不僅僅可以用作讀寫分離、分庫分表,還可以用於容災備份,雲平臺建設等,讓你的架構具備很強的適應性和靈活性。

MyCat的應用場景

MyCat發展到現在,使用的場景很豐富,常見的典型的應用場景有:

  • 單純的讀寫分離,此時配置最為簡單,支持讀寫分離,主從切換;
  • 分庫分表,對於超過1000w的表進行分片,最大支持1000億的數據;
  • 多租戶應用,每個應用一個數據庫,應用隻連接MyCat,程序本身不需要改造;
  • 代替HBase,分析大數據

在咱們的課程中,主要給大傢講解讀寫分離和分庫分表,這也是MyCat應用最多,最基礎的功能。

MyCat中的基本概念

MyCat是一個數據庫的中間件,介於應用與數據庫之間,是進行數據處理和交互的中間服務。正是由於它是一個數據庫代理的中間件,它裡邊也有很多新的概念,這些概念先給大傢介紹一下,大傢有個印象,對後面的學習也很有幫助。

邏輯庫(Schema)

在實際的開發中,開發人員不需要知道數據庫中間件的存在,開發人員隻需要有數據庫的概念就可以瞭。所以數據庫中間件可以被看做是一個或者多個數據庫集群構成的邏輯庫。例如:上圖中的例子,我們可以理解為系統先做瞭垂直切分,被分為瞭3個庫,用戶庫,訂單庫,商品庫,而這3個庫就被稱為邏輯庫。

邏輯表(table)

既然有邏輯庫,那麼就有邏輯表,對於應用系統來說,讀寫數據的表,就是邏輯表。而邏輯表中的數據,則是被水平切分後,分佈在不同的分片庫中。如上圖所示:假設用戶庫中有一張用戶表,這個用戶表就被稱為邏輯表,而用戶表又被水平切分為3個表,每一個表中都存儲一部分用戶數據。業務系統在進行用戶數據的讀寫時,隻需要操作邏輯表就可以瞭,後面的分片細節則由MyCat進行操作,這些對於業務開發人員來說時完全透明的。當然,有些表的數據量沒有那麼大,完全不需要進行分片,隻在一個物理的數據庫表中即可。

凡是我們做的數據水平切分的表,我們把它叫做分片表。而數據量比較小,沒有進行分片的表,我們叫它非分片表。

在真實的業務系統中,往往存在著大量的字典表,這些表的數據基本上很少變動,比如:訂單狀態。我們查詢的時候,往往需要關聯字典表去查詢,比如:查詢訂單時,需要把訂單狀態關聯查出,如果訂單表做瞭分片,分佈在不同的數據庫中,而訂單狀態表由於數據量小,沒有做分片,那麼我們查詢的時候就要跨庫關聯查詢訂單狀態,增加瞭不必要的麻煩,不如我們幹脆把訂單狀態表冗餘到所有的訂單分片庫中,這樣關聯查詢就不需要跨庫瞭。我們把這種通過數據冗餘方式復制到所有的分片庫中的表,叫做全局表。

分片節點(dataNode)

數據被切分後,一張大表被分到不同的分片數據庫上面,每個分片表所在的數據庫就叫做分片節點。

節點主機(dataHost)

數據切分後,每一個分片節點不一定都會占用一個真正的物理主機,會存在多個分片節點在同一個物理主機上的情況,這些分片節點所在的主機就叫做節點主機。為瞭避免單節點並發數的限制,盡量將讀寫壓力高的分片節點放在不同的節點主機上。

分片規則(rule)

一個大表被拆分成多個分片表,就需要一定的規則,按照某種業務邏輯,將數據分到一個確定的分片當中,這個規則就叫做分片規則。數據切分選擇合適的分片規則非常重要,這將影響到後的數據處理難度,結合業務,選擇合適的分片規則,是對架構師的一個重大考驗。對於架構師來說,選擇分片規則是一個艱難的,難以抉擇的過程。

全局序列號(sequence)

大傢有沒有想過,數據切分以後,數據庫表的中的id怎麼辦?原來在一張表的時候,我們采用id自增,但是數據分佈到多個庫怎麼辦?比如:向用戶表插入數據,第一條記錄插入瞭用戶庫1,它的id為1;第二條記錄插入瞭用戶庫2,如果是自增,它的id也為1。這樣id就混亂瞭,我們也無法確定一條數據的唯一標識瞭。這時,我們需要借助外部的機制保證數據的唯一標識,這種保證數據唯一標識的機制,我們叫做全局序列號。

總結

通過上面我們對MyCat的介紹,我相信大傢對MyCat有瞭一個整體的認識。MyCat文章出來