mycat是資料庫分庫分表的中介軟體,mycat使用最多的兩個功能是:讀寫分離和分庫分表功能,支援全域性表和e-r關係(這兩個比較實用)
mycat相當於是乙個**,可以將多個實際資料庫組合成乙個完整的虛擬資料庫
我們可以直接訪問mycat的埠,其使用的是mysql原生的協議連線資料庫進行通訊
mycat主要用來解決水平拆分的問題,因為水平拆分和架構無關資料量大了就必須要做,而垂直拆分更多的是架構設計的問題
配置mycat可以實現分庫分表
配置檔案:
類似mycat的有tddl、sharding-jdbc、cobar
mycat核心概念:
mycat通過定義表的分片規則來實現分片,每個**可以**乙個分片規則,每個分片規則指定乙個分片欄位並繫結乙個函式,來實現動態分片演算法
1.schema:邏輯庫,與mysql中的database(資料庫)對應,乙個邏輯庫中定義了所包括的table,schema可以有多個,具體配置如下:
《-- rule 分片規則, subtables="news$1-3" 資料表儲存在資料庫dn1的news1,news2,news3表中 --》
《-- datanode="dn1,dn2" ,一張表存在於多個資料庫裡--》
2.table:邏輯表,即物理資料庫中儲存的某一張表,與傳統資料庫不同,這裡的**需要宣告其所儲存的邏輯資料節點datanode。在此可以指定表的分片規則。
3.datanode:mycat的邏輯資料節點,是存放table的具體物理節點,也稱之為分片節點(也就是物理資料庫),通過datasource來關聯到後端某個具體資料庫上 ,如下所示:
《--datahost指的是伺服器端口是乙個連線,database是乙個資料庫乙個伺服器可以有多個資料庫--》
select user()
**4.datasource:**定義某個物理庫的訪問位址,用於**到datanode上
5.datahost物理資料庫配置
6.er表
childtable是附屬於其父表,也就是說子表和父表之間存在關聯關係,mycat會將子表和父表關聯資料存放在同乙個節點上
分片規則 rule.xml
id
func1
操作
分片表 在schema,xml裡面定義的分片表如下:
上面的**定義了乙個邏輯分片表hotnews,宣告了其資料分別儲存於資料節點dn1,dn2,dn3裡面
分片規則定義在rule.xml中,mod-long是將id作為分片鍵,按照某個數進行取模,動態計算資料應該存放在何處
全域性表 在schema,xml裡面定義的全域性表如下:
company表是全域性表,通過mycat對全域性表的操作所有的資料節點都會同步改變
使用示例:
例如:我們將一張user表拆分成了三張,根據一定規則路由,假如插入了六條資料
當我們使用select * from user
mycat會給語句加上limit100,然後從三張表中載入資料,組合起來返回
如果使用select * from user where id = 1;
mycat會路由到指定的表,因為我們定義的id是分片鍵
但是如果使用查詢語句select * from user where name = 『***』;
mycat無法使用路由,會在三個資料表中都執行查詢語句
因此在定義分片鍵的時候需要考慮這個問題
分片方式
1.連續分片
日期,數字範圍等
例如:在rule.xml裡面有定義例如sharding-by-month按月分片
autopartition-long.txt
按照數字範圍進行劃分,具體的劃分規則例如 0-- 10000 放在第1個,10001-20000放在第二個分片
2.離散分片
取模,列舉,hash等
3.綜合分片
先取模,然後再定義範圍
分片總結
1.根據業務資料特性選擇分片規則
2.善用全域性表,er關係表解決join操作
3.用好primarykey讓效能起飛
mycat註解
mycat是無法執行函式的,那麼怎麼辦呢?
可以使用mycat註解直接指定函式語句需要在哪個節點執行,mycat識別到指定註解的時候會直接把後面的sql語句傳送到指定的節點解析執行
例如:
/*!mycat:sql=select * from users where userid =1*/ select fun() from dual;
mycat關聯查詢
1.用好er表
2.善用全域性表
3.使用註解
/*!mycat:catlet=io.mycat.catlets.sharejioin*/
目前只支援兩張表的關聯查詢 Mycat分庫分表
schema.xml 配置 name dn1 datahost localhost1 database db1 name dn2 datahost localhost1 database db2 name dn3 datahost localhost1 database db3 把localhost...
mycat分庫分表
一 修改schema.xml select user 二 修改server.xml 0 0 10 011m 1k0 384m true 123456 testdb user testdb true 三 啟動關閉1 進入bin目錄,2 啟動輸入.mycat start。關閉命令 mycat stop ...
mycat 分庫分表
記錄一下,方便檢視 1.分庫分表解決方案 應用層 jar包 噹噹 sharding jdbc 阿里 tddl 2.拆分原則 2.1能不拆分盡量不拆分 2.2如果要拆分一定要選擇合適的拆分規則,提前規劃好 2.3資料拆分盡量通過資料冗餘或表分組來降低跨庫join的可能 2.4跨庫join是共同難題,所...