java垂直拆分,MyCat分片:垂直拆分实例解析和代码实现
一、概述
一種是按照
不同的表(或者Schema)來切分到不同的數據庫(主機)之上,這種切分可以稱之為數據的
垂直(縱向)切分。
二、案例場景
在業務系統中, 有以下表結構 ,但是由于用戶與訂單每天都會產生大量的數據, 單臺服務器的數據存儲及處理能力是有限的, 可以對數據庫表進行拆分, 原有的數據庫表:
三、準備工作
1.準備三臺數據庫實例
192.168.192.157?192.168.192.158?192.168.192.159
2.在三臺數據庫實例中建庫建表
將準備好的三個SQL腳本, 分別導入到三臺MySQL實例中 ;
登錄MySQL數據庫之后, 使用
source命令導入 ;
四、schema.xml的配置
<?xml ?version="1.0"?>?mycat:schema?SYSTEM?"schema.dtd">?
select?user()
select?user()
select?user()
五、server.xml的配置
123456
ITCAST_DB??
123456
ITCAST_DB??
123456
ITCAST_DB
true?
六、測試
1.查詢數據
select?*?from?tb_goods_base;??select?*?from?tb_user;??select?*?from?tb_order_master;
2.插入數據
insert?into?tb_user_address(id,user_id,province_id,city_id,town_id,mobile,address,contact,is_default,notes,create_date,alias)?values?(null,'java00001',NULL,NULL,NULL,'13900112222','鐘樓','張三','0',NULL,NULL,NULL)
insert?into?tb_order_item(id,item_id,goods_id,order_id,title,price,num,total_fee,pic_path,seller_id)?values?(null,19,149187842867954,3,'3G?6','1.00',5,'5.00',NULL,'qiandu')
3.測試跨分片的查詢
SELECT?order_id?,?payment?,receiver,?province?,?city?,?area?FROM?tb_order_master?o?,?tb_areas_provinces?p?,?tb_areas_city?c?,?tb_areas_region?r?WHERE?o.receiver_province?=?p.provinceid?AND?o.receiver_city?=?c.cityid?AND?o.receiver_region?=?r.areaid?;
當運行上述的SQL語句時, MyCat會報錯, 原因是因為
當前SQL語句涉及到跨域的join操作?;
七、全局表配置
1.數據備份
將
數據節點user_db中的關聯的字典表
tb_areas_provinces?,
tb_areas_city?,
tb_areas_region中的數據備份 ;
mysqldump?-uroot?-pitcast?user_db?tb_areas_provinces?>?provinces;?mysqldump?-uroot?-pitcast?user_db?tb_areas_city?>?city;?mysqldump?-uroot?-pitcast?user_db?tb_areas_region?>?region;
2.將備份的表結構及數據信息, 遠程同步到其他兩個數據節點的數據庫中;
scp?city?root@192.168.192.158:/root?scp?city?root@192.168.192.159:/root?scp?provinces?root@192.168.192.158:/root?scp?provinces?root@192.168.192.159:/root?scp?region?root@192.168.192.158:/root?scp?region?root@192.168.192.159:/root
3.導入到對應的數據庫中
mysql?-uroot?-p?goods_db?
4.MyCat邏輯表中的配置
??5.重啟MyCat
bin/mycat?restart
6.測試
再次執行相同的連接查詢 , 是可以正常查詢出對應的數據的 ;
SELECT?order_id?,?payment?,receiver,?province?,?city?,?area?FROM?tb_order_master?o?,?tb_areas_provinces?p?,?tb_areas_city?c?,?tb_areas_region?r?WHERE?o.receiver_province?=?p.provinceid?AND?o.receiver_city?=?c.cityid?AND?o.receiver_region?=?r.areaid?;
當我們對Mycat全局表進行增刪改的操作時, 其他節點主機上的后端MySQL數據庫中的數據時會同步變化的;
update?tb_areas_city?set?city?=?'石家莊'?where?id?=?5;
總結
以上是生活随笔為你收集整理的java垂直拆分,MyCat分片:垂直拆分实例解析和代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php zip 编码,encoding
- 下一篇: 斐波那契序列 集锦