mycat是什麼?
· 乙個徹底開源的,面向企業應用開發的大資料庫集群
· 支援事務、acid、可以替代mysql的加強版資料庫
· 乙個可以視為mysql集群的企業級資料庫,用來替代昂貴的oracle集群
· 乙個融合記憶體快取技術、nosql技術、hdfs大資料的新型sql server
· 結合傳統資料庫和新型分布式資料倉儲的新一代企業級資料庫產品
· 乙個新穎的資料庫中介軟體產品
上訴種種都是官網對其定義,是否還是有些模糊,下面我們通過乙個分庫分表的案例來講解mycat是什麼和mycat中核心的概念和名詞解釋,案例如下圖:
(圖一)
資料庫中介軟體
mycat是乙個介於資料庫與應用之間,進行資料處理與互動的中間服務。如下圖:
(圖二)
通俗點講,應用層可以將它看作是乙個資料庫的**(或者直接看成加強版資料庫)。
但是由於真正的資料庫需要儲存引擎,而 mycat 並沒有儲存引擎,mycat服務不儲存真正的資料,所以並不是完全意義的分布式資料庫系統。所以稱mycat這樣型別的資料庫中間**服務的產品為資料庫中介軟體。
邏輯庫
對實際應用來說,並不需要知道中介軟體的存在,業務開發人員只需要知道資料庫的概念,所以資料庫中介軟體可以被看做是乙個或多個資料庫集群構成的邏輯庫。如圖一中,在mycat服務區中的db_user庫,只是邏輯上存在的資料庫,真正的資料**還是**mysql服務區中的兩台實際的mysql db例項。在mycat中邏輯庫在/conf/schema.xml 用標籤定義。如圖三
(圖三)
邏輯表
既然有邏輯庫,肯定將會存在邏輯表,分布式資料庫中,對應用來說,讀寫資料的表就是邏輯表。邏輯表的資料**,可以是資料進行切分後,分布在乙個或多個分片庫中,針對不同的資料分布和管理特點,我們將邏輯表又分為 分片表、全域性表、全域性表、er表、非分片表五種邏輯表型別。在schema.xml使用標籤對邏輯表進行定義。
分片表:是指那些原有的很大資料的表,需要切分到多個表,這樣,每個分片都有表的一部分資料,所有分片資料的合集構成了完整的表資料,如圖一種中mycat服務區的users錶即是分片表,通過userid欄位取模的方式進行資料的水平切分。如圖四中使用者(users)表
(圖四)
分片規則:將大資料的表,切分到多個資料分片的策略。如圖三中 rule="mod-userid-long",名字為mod-userid-long引用的詳細規則,將在mycat的rule.xml中(/conf/rule.xml)中進行定義,具體定義規則如圖五
(圖五)
分片規則mycat中內建了很多種,比如 按時間、按自定義數字範圍、十進位製取模、程式指定,字串hash,一致性hash等等,總體可將這些分片規則分為離散型和連續型兩種分片規則。離散型分片規則資料分布均衡,對資料的處理併發能力強,但是對於分片的擴縮容存在較大的挑戰。連續性分片資料分布較集中,更符合業務特性,但是對資料的處理併發能力受限資料的分布,分片的擴縮容有更好的支援。
全域性表:乙個真實的業務系統中,往往存在大量的類似資料字典表的表,資料字典表具有以下幾個特性:
• 資料變動不頻繁;
• 資料規模不大,資料量在十萬以內。
• 存在跟其他表(特別是分片表)有一點的關聯查詢要求
未了解決表與表的join查詢,mycat提倡大家將具有上訴特點的表通過資料冗餘的方式(全域性表的定義)進行解決,即所有的分片都有乙份資料的拷貝。通過mycat對這樣的表進行資料的操作時,資料的修改,新增,刪除時,所有的分片資料都將受到影響。
er表:關係型資料庫是基於實體關係模型(entity-relationship model)之上,通過其描述了真實世界中事物與關係,mycat 中的 er 錶即是**於此。根據這一思路,提出了基於 e-r 關係的資料分片策略,子表的記錄與所關聯的父表記錄存放在同乙個資料分片上,即子表依賴於父表,通過表分組(table group)保證資料 join 不會跨庫操作,如文中的案例,使用者表是分片表,使用者位址表與使用者表之間存在一對多的關係,若通過分片規則,將使用者表中的張三分在了分片1,則最好的資料儲存方式是將張三的使用者位址資訊跟隨張三一起分配在分片1中。這樣一種表分組的設計方式是解決跨分片資料 join 的一種很好的思路,也是資料切分規劃的重要一條規則。er表中在schema.xml中使用標籤進行描述和定義,如圖六
(圖六)
非分片表:乙個資料庫中並不是所有的表都很大,某些表是可以不用進行切分的,非分片是相對分片表來說的,就是那些不需要進行資料切分的表。在schema.xml中具體的定義,可參見圖七
(圖七)
分片節點
大資料表進行資料切分後,每個表分片所在的資料庫就是分片節點,狹義的理解可以認為乙個db例項就是乙個節點,在schema.xml中使用進行分片節點的定義如圖八
(圖八)
節點主機
資料切分後,每個分片節點(datanode)不一定都會獨佔一台機器,同一機器上面可以有多個分片資料庫,這樣乙個或多個分片節點(datanode)所在的機器就是節點主機,為了規避單節點主機併發數限制,盡量將讀寫壓力高的分片節點(datanode)均衡的放在不同的節點主機。在schema.xml中使用進行分片節點的定義如圖九
(圖九)
mycat是什麼 MYCAT學習2
1.mycat的使用 rule 1 的作用是什麼?指定使用的分片演算法 2 中name屬性的作用是什麼?name 屬性指定唯一的名字,用於標識不同的分片規則。內嵌的 rule 標籤則指定對物理表中的哪一列進行拆分和使用什麼分演算法 3 中columns屬性的作用是什麼?指定要拆分的列名字 4 中al...
mycat是什麼 Mycat簡單介紹
官網 乙個徹底開源的,面向企業應用開發的大資料庫集群 支援事務 acid 可以替代mysql的加強版資料庫 乙個可以視為mysql集群的企業級資料庫,用來替代昂貴的oracle集群 乙個融合記憶體快取技術 nosql技術 hdfs大資料的新型sql server 結合傳統資料庫和新型分布式資料倉儲的...
MyCat是什麼?為什麼要用MyCat?
實習的時候,在乙個專案當中,專案經理要求把原先的mysql資料連線基於mycat來進行改造 當時就在想mycat是什麼東西?為什麼要用它呢?一 什麼是mycat mycat是乙個開源的分布式資料庫系統,是乙個實現了mysql協議的伺服器,前端使用者可以把它看作是乙個資料庫 用mysql客戶端工具和命...