工作需要使用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上。試想一下,使用者表
存放在memsql上,大量讀頻率遠超過寫頻率的資料如訂單的快照資料存放於innodb中,一些日誌資料存放於mongodb中,
而且還能把oracle的表跟mysql的表做關聯查詢,你是否有一種不能呼吸的感覺?而未來,還能通過mycat自動將一些計算分析
後的資料灌入到hadoop中,並能用mycat+storm/spark stream引擎做大規模資料分析,看到這裡,你大概明白了,mycat是
什麼?mycat就是bigsql,big data on sql database。
對於dba來說,可以這麼理解mycat:
mycat就是mysql server,而mycat後面連線的mysql server,就好象是mysql的儲存引擎,如innodb,myisam等,因
此,mycat本身並不儲存資料,資料是在後端的mysql上儲存的,因此資料可靠性以及事務等都是mysql保證的,簡單的
說,mycat就是mysql最佳伴侶,它在一定程度上讓mysql擁有了能跟oracle pk的能力。
對於軟體工程師來說,可以這麼理解mycat:
mycat就是乙個近似等於mysql的資料庫伺服器,你可以用連線mysql的方式去連線mycat(除了埠不同,預設的mycat端
口是8066而非mysql的3306,因此需要在連線字串上增加埠資訊),大多數情況下,可以用你熟悉的物件對映框架使用
mycat,但建議對於分片表,盡量使用基礎的sql語句,因為這樣能達到最佳效能,特別是幾千萬甚至幾百億條記錄的情況下。
對於架構師來說,可以這麼理解mycat:
mycat是乙個強大的資料庫中介軟體,不僅僅可以用作讀寫分離、以及分表分庫、容災備份,而且可以用於多租戶應用開發、雲平
臺基礎設施、讓你的架構具備很強的適應性和靈活性,借助於即將發布的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發展到現在,適用的場景已經很豐富,而且不斷有新使用者給出新的創新性的方案,以下是幾個典型的應用場景:
單純的讀寫分離,此時配置最為簡單,支援讀寫分離,主從切換
分表分庫,對於超過1000萬的表進行分片,最大支援1000億的單錶分片
多租戶應用,每個應用乙個庫,但應用程式只連線mycat,從而不改造程式本身,實現多租戶化
報表系統,借助於mycat的分表能力,處理大規模報表的統計
替代hbase,分析大資料
作為海量資料實時查詢的一種簡單有效方案,比如100億條頻繁查詢的記錄需要在3秒內查詢出來結果,除了基於主鍵的查
詢,還可能存在範圍查詢或其他屬性查詢,此時mycat可能是最簡單有效的選擇
mycat長期路線圖
強化分布式資料庫中介軟體的方面的功能,使之具備豐富的外掛程式、強大的資料庫智慧型優化功能、全面的系統監控能力、以及方
進一步挺進大資料計算領域,深度結合spark stream和storm等分布式實時流引擎,能夠完成快速的巨表關聯、排序、分組
聚合等 olap方向的能力,並整合一些熱門常用的實時分析演算法,讓工程師以及dba們更容易用mycat實現一些高階資料分
析處理功能。
根據tt_waybill
表的id
欄位來進行分片
分片方法為
id值取
3的模,根據模值確定在
db1,
db2,
db3中的某個分片
id =12330;
db2 –> select * from tt_waybill where waybill_no =88661;
db3 –> select * from tt_waybill where waybill_no =88661;
:[0,1,2,3,4,10,11,12,13,14]
db2:
[5,6,7,8,9,16,17,18,19]
db3:
[20,21,22,23,24,25,26,27,28,29]
db2: [5,6]
db3: [20,21]
orderby id limit 2;
limit 5,2;
db2: [5,6,7,8,9,16,17]
db3: [20,21,22,23,24,25,26]
參考:
mycat 簡單介紹
一 mycat?1.為什麼叫mycat 其實mycat在最早的初期版本只支援mysql一種資料庫,換句話說mycat其實就是mysql的增強版 在mysql中只是資料庫,並沒有讀寫分離和分庫分表,這些操作全部都是由mycat進行實現 主從複製 資料同步 功能mycat沒有,必須要使用mysql所提供...
mycat是什麼 Mycat簡單介紹
官網 乙個徹底開源的,面向企業應用開發的大資料庫集群 支援事務 acid 可以替代mysql的加強版資料庫 乙個可以視為mysql集群的企業級資料庫,用來替代昂貴的oracle集群 乙個融合記憶體快取技術 nosql技術 hdfs大資料的新型sql server 結合傳統資料庫和新型分布式資料倉儲的...
三 MyCat主要配置介紹
1 server.xml mycat的配置檔案,設定賬號 引數等 2 schema.xml mycat對應的物理資料庫和資料庫表的配置 3 rule.xml mycat分片 分庫分表 規則 testdb user 使用者配置節點 name 登入的使用者名稱,也就是連線mycat的使用者名稱 pass...