声明
- 本文会基于
Springboot + mybatis + shardingsphere + mysql5.6 + druid
进行实战讲解 - 本文的实战内容为分表、以及数据分片, 不涉及分库, 读写分离之类的
- 本文不会介绍
shardingsphere
的历史、概念以及分库分表的相关理论 - 本文采用的
shardingsphere
版本是 5.0.0-alpha, 具体见 pom 文件 - 文中贴出的代码片段难免会出现错误, 请以 上传的案例源码 为准
- 本文涉及的源码请参考 码云地址
- 如果看 官方文档 时, 请选对版本 !!!
正文
实现目标
我们有一张逻辑用户表 user_info
, 我们把它水平拆分成 user_info0
和 user_info1
两张物理表
当我们往用户表插数据时, 数据会按照一定的规则(根据id取模), 写入到其中一张 user_info 表中.
准备工作
1. 数据库表
create database miaosha;
DROP TABLE IF EXISTS `user_info0`;
CREATE TABLE `user_info0` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_label` varchar(32) COLLATE utf8_bin DEFAULT NULL,
`username` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`email` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`phone` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`password` varchar(128) COLLATE utf8_bin NOT NULL,
`active` tinyint(4) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
DROP TABLE IF EXISTS `user_info1`;
CREATE TABLE `user_info1` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_label` varchar(32) COLLATE utf8_bin DEFAULT NULL,
`username` varchar(64) COLLATE utf8_bin DEFAULT NULL,
`email` varchar(64) COLLATE utf8_bin DEFAULT