一、概述
根據表中的數據的邏輯關系,將同一個表中的數據按照某種條件拆分到多臺數據庫(主機)上面,這種切分稱之為數據的水平(橫向)切分。
二、案例場景
在業務系統中, 有一張表(日志表), 業務系統每天都會產生大量的日志數據 , 單臺服務器的數據存儲及處理能力是有限的, 可以對數據庫表進行拆分, 原有的數據庫表拆分成以下表 :
參考資料:《開源數據庫中間件MyCat實戰筆記》
快速入手通道:發送簡信“MyCat資料”免費獲取
三、準備工作
1.準備三臺數據庫實例
192.168.192.157
192.168.192.158
192.168.192.159
2.在三臺數據庫實例中創建數據庫
create database log_db DEFAULT CHARACTER SET utf8mb4;
四、schema.xml的配置
select user()
select user()
select user()
五、server.xml的配置
123456
LOG_DB
123456
LOG_DB
123456
LOG_DB
true
六、測試
1.在MyCat數據庫中執行建表語句
CREATE TABLE `tb_log` (
`id` bigint(20) NOT NULL COMMENT 'ID',
`model_name` varchar(200) DEFAULT NULL COMMENT '模塊名',
`model_value` varchar(200) DEFAULT NULL COMMENT '模塊值',
`return_value` varchar(200) DEFAULT NULL COMMENT '返回值',
`return_class` varchar(200) DEFAULT NULL COMMENT '返回值類型',
`operate_user` varchar(20) DEFAULT NULL COMMENT '操作用戶',
`operate_time` varchar(20) DEFAULT NULL COMMENT '操作時間',
`param_and_value` varchar(500) DEFAULT NULL COMMENT '請求參數名及參數值',
`operate_class` varchar(200) DEFAULT NULL COMMENT '操作類',
`operate_method` varchar(200) DEFAULT NULL COMMENT '操作方法',
`cost_time` bigint(20) DEFAULT NULL COMMENT '執行方法耗時, 單位 ms',
`source` int(1) DEFAULT NULL COMMENT '來源 : 1 PC , 2 Android , 3 IOS',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.插入數據
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`,
`return_class`, `operate_user`, `operate_time`, `param_and_value`, `operate_class`,
`operate_method`, `cost_time`,`source`)
VALUES('1','user','insert','success','java.lang.String','10001','2020-02-26 18:12:28','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.controller.UserController','insert','10',1);
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`,`return_class`,
`operate_user`, `operate_time`, `param_and_value`, `operate_class`, `operate_method`, `cost_time`,`source`)
VALUES('2','user','insert','success','java.lang.String','10001','2020-02-26 18:12:27','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.controller.UserController','insert','23',1);
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`, `return_class`, `operate_user`, `operate_time`, `param_and_value`, `operate_class`,
`operate_method`, `cost_time`,`source`)
VALUES('3','user','update','success','java.lang.String','10001','2020-02-26 18:16:45','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.controller.UserController','update','34',1);
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`,
`return_class`, `operate_user`, `operate_time`, `param_and_value`, `operate_class`,
`operate_method`, `cost_time`,`source`)
VALUES('4','user','update','success','java.lang.String','10001','2020-02-26 18:16:45','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.controller.UserController','update','13',2);
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`,
`return_class`, `operate_user`, `operate_time`, `param_and_value`, `operate_class`,
`operate_method`, `cost_time`,`source`)
VALUES('5','user','insert','success','java.lang.String','10001','2020-02-26 18:30:31','{\"age\":\"200\",\"name\":\"TomCat\",\"gender\":\"0\"}','cn.itcast.cont roller.UserController','insert','29',3);
INSERT INTO `tb_log` (`id`, `model_name`, `model_value`, `return_value`,
`return_class`, `operate_user`, `operate_time`, `param_and_value`, `operate_class`,
`operate_method`, `cost_time`,`source`)
VALUES('6','user','find','success','java.lang.String','10001','2020-02 2618:30:31','{\"age\":\"200\",\"name\":\"TomCat\",\"gender\":\"0\"}','cn.itcast.cont roller.UserController','find','29',2);
參考資料:《開源數據庫中間件MyCat實戰筆記》
快速入手通道:發送簡信“MyCat資料”免費獲取