日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mycat水平分库

發布時間:2023/12/31 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mycat水平分库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一般來說,水平切分并不要對所有表進行



(只有業務原因,不能進行歷史歸檔的表才需要考慮是否水平切分)


(訂單經常要按用戶來查,此處選customer_id作為分片鍵)


node1修改schema.xml配置:

(并沒有增加主機,所以不需要增加dataHost。需要增加dataNode)

node1配置rule.xml來水平切分:

(order_master是在schema.xml中定義的。partitionByMod:取模的方式)

重啟mycat,并查看是否重啟成功:

插入模擬數據后在node2查看:


然而,通過mycat查詢邏輯庫數據,會發現order_id有重復,不是有序自增的:

所以要全局自增:

可以在一個統一的地方生成order_id,可以是redis等,這里用的是mycat提供的功能:

在node1,也就是mycat節點:

在mycat安裝目錄下的conf目錄下有個dbseq.sql,將其導入數據庫:

這個庫有一個表:

在server.xml(當然是node1中)中配置:

(sequnceHandlerType標簽配置生成全局序列號的方式:0.本地文件,1.數據庫,2.時間戳,3.zk遞增方式)

還要增加一個配置文件(指定相關表和函數所在的數據節點 ):

還要在schema.xml中新增一個數據節點:

(剛才建立的mycat數據庫的節點)

還要增加一個數據節點:

查看是否存在該用戶:

查看其權限:

但是,新增的全局庫/表中包含mysql的函數,而帳號未授權,插入數據會報錯,所以,增加執行函數/存儲過程的權限

在全局表中增加一條記錄:

(ORDER_MASTER:order水平分庫的全局自增。當前值1,以1遞增。注意:使用的是大寫的表名,在配置中也要大寫)

怎么告訴mycat要使用全局自增id呢?

(增加autoIncrement="true")

重啟mycat,查看是否啟動成功:

接下來插入數據,全局自增order_id成功


但是,如果需要關聯查詢:

order_master做了切片操作,而order_detail并沒有對它進行切片操作,所以是跨分片關聯!

那用什么方式解決呢?

可以用全局表,但顯然這是很大的表,并且是隨著增長的,修改頻繁,顯然不適合全局表場景,這里用到mycat提供的另外一個解決跨分片關聯問題的方法——ER分片表(通過ER關系來分片,可以把需要關聯的兩個表,根據它們的關聯鍵,把關聯的數據分布到同一個分片內,這樣就可以在同一個分片內解決關聯問題):

在orderdb01、orderdb02、orderdb03、orderdb04中創建表order_detail(node2、node3中):

同樣在orderdb02、orderdb03、orderdb04中創建表order_master......

編輯schema.xml(廢話,當然還是node1):

(刪掉dataNode)

(增加名為order_detail的子表/childTable,primarykey為該表本來的主鍵,關聯鍵joinkey,父表主鍵parentKey,同樣要使用全局自增id(autoIncrement="true"))

配置全局自增id:

插入測試數據后,order_master和order_detail都生成了10條數據:

看下數據的分布:

相同order_id的數據是放在同一個數據庫分片的:

現在可以進行關聯查詢了:

轉載于:https://blog.51cto.com/5660061/2391986

總結

以上是生活随笔為你收集整理的mycat水平分库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。