1.为什么要分库分表
随着业务反展,某些表数据越来越多,热点数据查询的速度将会慢下来,传统的优化手段,索引,读写分离等逐渐遇到的性能瓶颈。这些常见的优化方法将失去作用,此时把单表水平划分到多库多表中,提升查询速度,而sharding-jdbc可以帮你完成水平拆分。
2.Sharding-JDBC 架构:
使用实践
准备: jdk8+,mysql5.7
创建单库多表
创建库test 和两个分表t_user0和t_user1
以mysql为例
create database test;
use test;
CREATE TABLE `t_user0` (
`id` bigint(20) NOT NULL,
`username` varchar(64) DEFAULT NULL COMMENT '名称',
`password` varchar(32) DEFAULT NULL COMMENT '密码',
`city_id` int(12) DEFAULT NULL COMMENT '城市',
`sex` tinyint(1) DEFAULT NULL COMMENT '性别',
`mobile` varchar(32) DEFAULT NULL COMMENT '手机号码',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `t_user1` (
`id` bigint(20) NOT NULL,
`username` varchar(64) DEFAULT NULL COMMENT '名称',
`password` varchar(32) DEFAULT NULL COMMENT '密码',
`city_id` int(12) DEFAULT NULL COMMENT '城市',
`sex` tinyint(1) DEFAULT NULL COMMENT '性别',
`mobile` varchar(32) DEFAULT NULL COMMENT '手机号码',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
spring项目
1 引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>gridcloud-sharding-jdbc</artifactId>
<groupId>com.tianque.grid</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sharding-jdbc-spring</artifactId>
<name>sharding-jdbc-spring</name>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>