分库分表的概念Apache ShardingSphere 由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的基于数据库作为存储节点的增量功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。
垂直切分
垂直分表
将数据库中的一张表部分字段存储到一张表中,再把这张表中的另外一部分字段存储到另外一张表中,对数据列进行拆分
垂直分库
把单一数据库按照业务划分到不同的数据库,不同模块对应不同数据库
水平切分
水平分表
在同一数据库中,建立多张相同的表,表结构一致
水平分库
将数据库创建多个相同结构的数据库
ShardingSphere-JDBC定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。
-
适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC;
-
支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, HikariCP 等;
-
支持任意实现 JDBC 规范的数据库,目前支持 MySQL,PostgreSQL,Oracle,SQLServer 以及任何可使用 JDBC 访问的数据库。
docker安装mysql
-
查询镜像
docker search mysql
-
获取最新镜像
docker pull mysql:latest
-
查看镜像
docker images
-
编写shell脚本mysql.sh
#!/bin/bash docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
-
执行脚本
./mysql.sh
创建数据库与表结构
-
建表语句
CREATE TABLE `student_0` ( `id` bigint NOT NULL, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `age` int NOT NULL, `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; CREATE TABLE `student_1` ( `id` bigint NOT NULL, `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `age` int NOT NULL, `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
创建项目
-
导入依赖
org.springframework.boot spring-boot-startermysql mysql-connector-javaruntime org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest com.baomidou mybatis-plus-boot-starter3.4.3.4 com.baomidou mybatis-plus-generator3.4.1 org.freemarker freemarker2.3.31 org.apache.shardingsphere sharding-jdbc-spring-boot-starter4.1.1 -
创建实体类与对应实体的mapper 文件
-
配置文件进行配置
# 真实数据源名称,多个数据源用逗号区分 spring.shardingsphere.datasource.names= ds1 # 配置第 1 个数据源 spring.shardingsphere.datasource.ds1.type= com.zaxxer.hikari.HikariDataSource spring.shardingsphere.datasource.ds1.driver-class-name= com.mysql.cj.jdbc.Driver spring.shardingsphere.datasource.ds1.jdbc-url= jdbc:mysql://172.28.93.158:3306/shardingsphere?serverTimezone=GMT%2B8 spring.shardingsphere.datasource.ds1.username= root spring.shardingsphere.datasource.ds1.password= root # 指定表的分布情况,配置表在哪儿数据库里,表名称都是什么 ds1.student_0 ds1.student_1 spring.shardingsphere.sharding.tables.student.actual-data-nodes= ds1.student_$->{0..1} # 指定student表里的主键id 生成策略 SNOWFLAKE spring.shardingsphere.sharding.tables.student.key-generator.column= id spring.shardingsphere.sharding.tables.student.key-generator.type= SNOWFLAKE # 指定分片策略 约定偶数添加到student_0 奇数添加到student_1 spring.shardingsphere.sharding.tables.student.table-strategy.inline.sharding-column= id spring.shardingsphere.sharding.tables.student.table-strategy.inline.algorithm-expression= student_$->{id%2} spring.shardingsphere.props.sql.show= true
-
测试类
@Test void contextLoads() { for (int i = 1; i < 11; i++) { studentMapper.insert(new Student().setName("zhangsan"+i).setAge(18+i).setAddress("beijing"+i)); } } @Test void testSelect(){ studentMapper.selectById(1469979914989998081L); studentMapper.selectById(1469979919918305282L); }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)