文章目录

  • 1.1 按照水平分库的方式创建数据库和数据表
    • 1.1.1 创建分库1
    • 1.1.2 创建分库2
    • 1.1.3 创建分库1中的表1
    • 1.1.4 创建分库1中的表2
    • 1.1.5 创建分库2中的表1
    • 1.1.6 创建分库2中的表2
  • 1.2 创建SpringBoot工程
    • 1.2.1 pom.xml 如下:
    • 1.2.2 创建po实体类
    • 1.2.3 创建mapper 接口
    • 1.2.4 添加到MapperScan扫描
  • 1.3 配置水平分库策略
  • 1.4 测试水平分库
  • 1.5 Test Result
    • 1.5.1 分库1表1结果
    • 1.5.2 分库2表2结果
    • 1.5.3 根据cid和user_id从分库分表中查询结果

1.1 按照水平分库的方式创建数据库和数据表

1.1.1 创建分库1

CREATE SCHEMA `edudb1` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;

1.1.2 创建分库2

CREATE SCHEMA `edudb2` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ;

1.1.3 创建分库1中的表1

CREATE TABLE `edudb1`.`course1` ( `cid` BIGINT NOT NULL, `cname` VARCHAR(45) NOT NULL, `user_id` BIGINT NOT NULL, `cstatus` VARCHAR(45) NOT NULL, PRIMARY KEY (`cid`));

1.1.4 创建分库1中的表2

CREATE TABLE `edudb1`.`course2` ( `cid` BIGINT NOT NULL, `cname` VARCHAR(45) NOT NULL, `user_id` BIGINT NOT NULL, `cstatus` VARCHAR(45) NOT NULL, PRIMARY KEY (`cid`));

1.1.5 创建分库2中的表1

CREATE TABLE `edudb2`.`course1` ( `cid` BIGINT NOT NULL, `cname` VARCHAR(45) NOT NULL, `user_id` BIGINT NOT NULL, `cstatus` VARCHAR(45) NOT NULL, PRIMARY KEY (`cid`));

1.1.6 创建分库2中的表2

CREATE TABLE `edudb2`.`course2` ( `cid` BIGINT NOT NULL, `cname` VARCHAR(45) NOT NULL, `user_id` BIGINT NOT NULL, `cstatus` VARCHAR(45) NOT NULL, PRIMARY KEY (`cid`));

1.2 创建SpringBoot工程

1.2.1 pom.xml 如下:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ccb</groupId><artifactId>shardingsphere</artifactId><version>0.0.1-SNAPSHOT</version><name>shardingsphere</name><description>Sharding sphere project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.20</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.0-RC1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

1.2.2 创建po实体类

package com.ccb.sharding.po;public class Course {private Long cid;private String cname;private Long userId;private String cstatus;public Long getCid() {return cid;}public void setCid(Long cid) {this.cid = cid;}public String getCname() {return cname;}public void setCname(String cname) {this.cname = cname;}public Long getUserId() {return userId;}public void setUserId(Long userId) {this.userId = userId;}public String getCstatus() {return cstatus;}public void setCstatus(String cstatus) {this.cstatus = cstatus;}}

1.2.3 创建mapper 接口

package com.ccb.sharding.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ccb.sharding.po.Course;
import org.springframework.stereotype.Repository;@Repository
public interface CourseMapper extends BaseMapper<Course> {}

1.2.4 添加到MapperScan扫描

package com.ccb.sharding;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.ccb.sharding.mapper")
public class ShardingApplication {public static void main(String[] args) {SpringApplication.run(ShardingApplication.class, args);}}

1.3 配置水平分库策略

# sharding-JDBC分片策略
# 配置数据源,给数据源命名
# 水平分库,配置两个数据源
spring.shardingsphere.datasource.names=ds1,ds2# 配置ds1数据源具体内容,连接池、驱动、地址、用户名和密码
spring.shardingsphere.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSourcespring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds1.url=jdbc:mysql://localhost:3306/edudb1?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=chengwen# 配置ds2数据源具体内容,连接池、驱动、地址、用户名和密码
spring.shardingsphere.datasource.ds2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds2.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds2.url=jdbc:mysql://localhost:3306/edudb2?serverTimezone=GMT%2B8
spring.shardingsphere.datasource.ds2.username=root
spring.shardingsphere.datasource.ds2.password=chengwen# 一个实体类对应两张表,覆盖
spring.main.allow-bean-definition-overriding=true# 指定数据库分布情况,数据库里面表分布情况
# ds1 ds2 course1 course2
spring.shardingsphere.sharding.tables.course.actual-data-nodes=ds$->{1..2}.course$->{1..2}# 指定course 表里面主键cid 生成策略 SNOWFLAKE 雪花算法
spring.shardingsphere.sharding.tables.course.key-generator.column=cid
spring.shardingsphere.sharding.tables.course.key-generator.type=SNOWFLAKE# 指定表分片策略 约定cid的值偶数添加到course1表,奇数添加到course2表
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=cid
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course$->{cid % 2 + 1}# 指定数据库分片策略 约定user_id 的值是偶数添加到ds1库,奇数添加到ds2库
#spring.shardingsphere.sharding.default-database-strategy.inline.sharding-column==user_id
#spring.shardingsphere.sharding.default-database-strategy.inline.algorithm-expression=ds$->{user_id % 2 + 1}spring.shardingsphere.sharding.tables.course.database-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.tables.course.database-strategy.inline.algorithm-expression=ds$->{user_id % 2 + 1}
# 打印sql输出日志
spring.shardingsphere.props.sql.show=true

1.4 测试水平分库

package com.ccb.sharding;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ccb.sharding.mapper.CourseMapper;
import com.ccb.sharding.po.Course;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class ShardingApplicationTests {@AutowiredCourseMapper courseMapper;// =============== 测试水平分库 ===============@Testpublic void addCourseDB() {Course course = new Course();course.setCname("Mysql");course.setCstatus("Normal");course.setUserId(100L);courseMapper.insert(course);}@Testpublic void addCourseDBS() {for (int i = 1; i <= 10; i ++){Course course = new Course();course.setCname("Mysql" + i);course.setCstatus("Normal" + i);course.setUserId(100L + i);courseMapper.insert(course);}}@Testpublic void getCourseDB() {QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("cid",482547343917318145L);queryWrapper.eq("user_id",100L);Course course = courseMapper.selectOne(queryWrapper);System.out.println(course);}
}

1.5 Test Result

1.5.1 分库1表1结果

1.5.2 分库2表2结果

1.5.3 根据cid和user_id从分库分表中查询结果

3、ShardingSphere 之 Sharding-JDBC 实现水平分库相关推荐

  1. ShardingSphere(三) 水平分库配置搭建,实现写入读取

    概述:本章将介绍如何通过Sharding jdbc来实现数据库的水平分库操作,并从零搭建一个SpringBoot工程实现分库的读写操作.本文章在上一章节基础上改造,其中内容包含了表的水平拆分内容 环境 ...

  2. Spring boot + Sharding JDBC 分库分表 及 分布式事务处理

    Sharding JDBC 基础概念 Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC.Proxy 和 Sidecar(规划中)这 3 款既能够 ...

  3. SpringBoot + Sharding JDBC,一文搞定分库分表、读写分离

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 30 分钟. 来自:blog.csdn.net/qq_40378034/article/details/115264837 S ...

  4. SpringBoot + Sharding JDBC 读写分离、分库分表

    Sharding-JDBC 最早是当当网内部使用的一款分库分表框架,到2017年的时候才开始对外开源,这几年在大量社区贡献者的不断迭代下,功能也逐渐完善,现已更名为 ShardingSphere,20 ...

  5. Sharding-Sphere,Sharding-JDBC_分库分表(水平分库_水平分表)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记004

    然后我们前面说了垂直分库,分表,我们要了解什么是垂直分库分表 1.垂直分表,就是比如,我们有个课程的表,但是我们数据量太大的话,我们把这个课程表,可以分成 课程基本信息表,课程描述表,这两个表,这样的 ...

  6. Sharding jdbc

    一.Sharding Sphere简介 定义:Apache ShardingSphere 是一款开源分布式数据库生态项目,由 JDBC.Proxy 和 Sidecar(规划中) 3 款产品组成.其核心 ...

  7. Sharding JDBC分片和读写分离详解

    目录 Sharding Sphere简介 开始使用Sharding JDBC 数据分片 简单示例 Spring Boot示例 代码分析 属性分析 绑定表和广播表 真实表 绑定表 广播表 Shardin ...

  8. Sharding JDBC(四) 分片策略一:标准分片策略StandardShardingStrategy

    目录 一.标准分片策略StandardShardingStrategy 二.StandardShardingStrategy配置实现 分库分表最核心的两点SQL 路由  . SQL 改写 applic ...

  9. 理解Sharding jdbc原理,看这一篇就够了

    相比于Spring基于AbstractRoutingDataSource实现的分库分表功能,Sharding jdbc在单库单表扩展到多库多表时,兼容性方面表现的更好一点.例如,spring实现的分库 ...

最新文章

  1. ado.net操作数据库常用方法集锦
  2. “为啥Kaggle奖金那么少?”一场25000美元的比赛,却因“抠门”引发激烈讨论...
  3. Java高并发编程:同步工具类
  4. springmvc.xml 中 url-pattern/url-pattern节点详解
  5. CTF-攻防世界-reverse进阶-srm-50;(巨详细)
  6. druid连接池_SpringBoot整合JDBCTemplate及Druid连接池
  7. 微脉java面试,微脉医疗开放平台
  8. python比较运算符重载_python运算符重载
  9. 【数据结构(C语言)】数据结构-树
  10. Oracle 数据库基础学习 (二)
  11. arcgis 快速制图插件_AutoCAD操作+视频教程+辅助工具和插件,限时分享无套路
  12. webex无法用计算机呼叫,CiscoWebExMeetingsServer疑难解答指引.PDF
  13. 如何优化Web网站性能?
  14. 第一个FPGA项目:led_flash简介项目流程和项目中遇到的问题
  15. 2021_IJCAI_Graph Learning based Recommender Systems: A Review—(IJCAI, 2021)
  16. 数据结构(C语言版)-- 数据结构基础
  17. 游戏数据分析-玩家战力分析
  18. C18-PEG-ICG18碳烷基链-聚乙二醇-吲哚菁绿,Cholesterol-PEG-ICG胆固醇-聚乙二醇-吲哚菁绿
  19. fnv1 java_笔记本热键驱动_笔记本万能fn键驱动 v1.1 通用版-126g驱动网
  20. 神经网络Neural Networks概述

热门文章

  1. 简述python函数调用过程_python函数定义和调用过程详解
  2. python求平方根的代码_python如何求平方根
  3. 安装飞利浦系统服务器,DOS系统安装Windows全攻略
  4. access超过255列数据_Access的数据类型,与Excel虽类似,数据库+sql更适合大量数据管理...
  5. 解决win10资源管理器右键菜单卡死问题
  6. 小米4硬改教程_小米手环3美化/修改资源包教程(含加入二维码教程)
  7. cocos 报错dts文件未导入_cocos2dx 3.4项目 导入到 eclipse 爬过的坑
  8. asp.net web开发框架_百小僧:拥抱.NET 5,从这个极速开发Web应用框架开始,Fur开源了!...
  9. 在线安装非GPU版的tensorflow流程
  10. java选择题答案_Java习题附答案