最近公司一个新项目,需要进行分库分表,本人调研了mycat和sharding-jdbc后决定使用sharding-jdbc来进行分库分表,至于这两个的区别以及特点可以自行到官网查看,mycat更偏向于运维部署层面的分库分表,基于插件来动态代理,sharding-jdbc是基于jar包依赖的配置,调研后就是demo的编写。按照我下面的讲解保证能够搭建成功,并且对于一些可能出现的问题也会提醒注意。
1.这里使用的是项目中的文件存储系统服务的分库分表例子,数据库为file_center,将原来的file_info表进行分表为file_info_0和file_info_1两张表,对存储数据按照id进行分片算法来决定存入哪张表,具体见后面配置。这里file_info就是逻辑表名,file_info_0和file_info_1才是真实的数据表。建表语句如下。
CREATE DATABASE IF NOT EXISTS `file_center` DEFAULT CHARACTER SET = utf8;
Use `file_center`;
DROP TABLE IF EXISTS `file_info_0`;
CREATE TABLE `file_info_0` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件md5',
`name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`is_img` tinyint(1) NOT NULL,
`content_type` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`size` int(11) NOT NULL,
`path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '物理路径',
`url` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`thumb_image_url` varchar(1024) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '缩略图路径',
`create_time` datetime(0) NULL DEFAULT NULL,
`update_time` datetime(0) NULL DEFAULT NULL,
`tenant_id` varchar(32) DEFAULT '' COMMENT '租户字段',
PRIMARY KEY (`id`),
KEY `idx_create_time` (`create_time`),
KEY `idx_tenant_id` (`tenant_id`)
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS `file_info_1`;
CREATE TABLE `file_info_1` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件md5',
`name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`is_img` tinyint(1) NOT NULL,
`content_type` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`size` int(11) NOT NULL,
`path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '物理路径',
`url` varch