分库分表背景:
数据库性能瓶颈:主要分为按照业务来划分或者按照数据量来划分
拆分方式:
水平拆分(每个表的结构都一样):订单表数据量大,我们可以水平拆分 ,分成order表1、order表2、order表3 。。。
垂直拆分:一个多字段的表拆分成多个表
例如:order订单表和oderItem订单详情表
一个订单会购买多件商品,因此,订单order表中会只有一条数据,orderItem订单项表会对应这个订单购买的多件商品

文章目录

  • 一、基础准备
    • 1. 技术选型
    • 2. 搭建mysql主从复制服务器
    • 1. 引入 Maven 依赖
    • 2. 规则配置
    • 3. 实体
    • 4. 接口
    • 5. 表结构
    • 6. 测试类
    • 7. 完整pom
一、基础准备
1. 技术选型
组件/框架 版本
spring-boot 2.4.3
jpa 2.4.3
shardingsphere 5.0.0-alpha
mysql 5.7.3
hikari 3.4.5
2. 搭建mysql主从复制服务器

基于Docker的Mysql主从复制搭建_mysql5.7.x

1. 引入 Maven 依赖
      <dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0-alpha</version></dependency>
2. 规则配置
spring.shardingsphere.datasource.names=primary-ds,replica-ds-0spring.shardingsphere.datasource.common.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.common.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.common.username=root
spring.shardingsphere.datasource.common.password=123456spring.shardingsphere.datasource.primary-ds.jdbc-url=jdbc:mysql://192.168.43.202:3339/ds0?serverTimezone=UTC&useSSL=false
spring.shardingsphere.datasource.replica-ds-0.jdbc-url=jdbc:mysql://192.168.43.202:3340/ds0?serverTimezone=UTC&useSSL=falsespring.shardingsphere.rules.replica-query.data-sources.ds0.primary-data-source-name=primary-ds
spring.shardingsphere.rules.replica-query.data-sources.ds0.replica-data-source-names=replica-ds-0
spring.shardingsphere.rules.replica-query.data-sources.ds0.load-balancer-name=round-robin# 负载均衡算法配置
spring.shardingsphere.rules.replica-query.load-balancers.round-robin.type=ROUND_ROBIN
spring.shardingsphere.rules.replica-query.load-balancers.round-robin.props.default=0spring.shardingsphere.props.sql-show=true# 配置 t_order 表规则
spring.shardingsphere.rules.sharding.tables.t_order.actual-data-nodes=ds0.t_order_$->{0..1}# 配置分表策略
spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-column=order_id
spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-algorithm-name=table-inline# 配置 分片算法
spring.shardingsphere.rules.sharding.sharding-algorithms.table-inline.type=INLINE
spring.shardingsphere.rules.sharding.sharding-algorithms.table-inline.props.algorithm-expression=t_order_$->{order_id % 2}# 分布式序列策略配置
spring.shardingsphere.rules.sharding.tables.t_order.key-generate-strategy.column=order_id
spring.shardingsphere.rules.sharding.tables.t_order.key-generate-strategy.key-generator-name=snowflake# 分布式序列算法配置
spring.shardingsphere.rules.sharding.key-generators.snowflake.type=SNOWFLAKE
spring.shardingsphere.rules.sharding.key-generators.snowflake.props.worker-id=123

3. 实体
package com.gblfy.distributedsharding.entity;import lombok.Data;import javax.persistence.*;@Data
@Entity
@Table(name = "t_order")
public class OrderEntity {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long orderId;private Integer userId;
}
4. 接口
package com.gblfy.distributedsharding.mapper;import com.gblfy.distributedsharding.entity.OrderEntity;
import org.springframework.data.jpa.repository.JpaRepository;import java.util.List;public interface OrderMapper extends JpaRepository<OrderEntity, Long> {OrderEntity findByOrderId(Long orderId);List<OrderEntity> findByUserId(Integer userId);
}
5. 表结构

在master主库执行

CREATE DATABASE ds0;
use ds0;
CREATE TABLE `t_order_0` (`order_id` bigint(20) unsigned NOT NULL,`user_id` int(11) DEFAULT NULL,PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;CREATE TABLE `t_order_1` (`order_id` bigint(20) unsigned NOT NULL,`user_id` int(11) DEFAULT NULL,PRIMARY KEY (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
6. 测试类
package com.gblfy.distributedsharding;import com.gblfy.distributedsharding.entity.OrderEntity;
import com.gblfy.distributedsharding.mapper.OrderMapper;
import org.apache.shardingsphere.infra.hint.HintManager;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.Random;@SpringBootTest
class DistributedShardingApplicationTests {@Autowiredprivate OrderMapper orderMapper;@Testvoid insert() {for (int i = 0; i <20 ; i++) {OrderEntity entity = new OrderEntity();entity.setUserId(new Random().nextInt(999));orderMapper.save(entity);}}@Testvoid findByOrderId() {//在主库负责增删改查 从库负责查询 场景中 ,存在刚把数据写入主库中,// 为来得急同步从库,因此会导致从库没有查询的数据,但实际,数据在主库是存在的,// 从库负责查询只是为了环节主库的数据库查询的压力,因此,在特殊场景,需要从主库// 查询数据,可以通过配置五主库中查询数据HintManager.getInstance().setPrimaryRouteOnly();orderMapper.findByOrderId(570271967295811584L);}@Testvoid findByUserId() {orderMapper.findByUserId(556);}@Testvoid updateByOrderId() {OrderEntity byOrderId = orderMapper.findByOrderId(570279923689172992L);byOrderId.setUserId(1000);orderMapper.save(byOrderId);}
}
7. 完整pom
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId><version>5.0.0-alpha</version></dependency>



从库查询

Springboot2.x +JPA 集成 Apache ShardingSphere 分表+读写分离相关推荐

  1. Springboot2.x +JPA 集成 Apache ShardingSphere 分库分表

    分库分表背景: 数据库性能瓶颈:主要分为按照业务来划分或者按照数据量来划分. 拆分方式: 水平拆分(每个表的结构都一样):订单表数据量大,我们可以水平拆分 ,分成order表1.order表2.ord ...

  2. Springboot2.x +JPA 集成 Apache ShardingSphere 同库分表

    分库分表背景: 数据库性能瓶颈:主要分为按照业务来划分或者按照数据量来划分. 拆分方式: 水平拆分(每个表的结构都一样):订单表数据量大,我们可以水平拆分 ,分成order表1.order表2.ord ...

  3. Springboot2.x +JPA 集成 Apache ShardingSphere 读写分离

    分库分表背景: 数据库性能瓶颈:主要分为按照业务来划分或者按照数据量来划分. 拆分方式: 水平拆分(每个表的结构都一样):订单表数据量大,我们可以水平拆分 ,分成order表1.order表2.ord ...

  4. MySQL使用Mycat实现分库分表-读写分离

    MySQL使用Mycat实现分库分表-读写分离 Mycat Mycat介绍 什么是Mycat? Mycat架构 Mycat核心概念 MyCat主要解决的问题 MyCat对多数据库的支持 Mycat分片 ...

  5. ShardingSphere JDBC 分库分表 读写分离 数据加密

    简介 在上篇文章中,在本地搭建了运行环境,本地来体验下ShardingSphere JDBC的三个功能:分库分表.读写分离.数据加密 示例运行 首先把概念先捋一捋,参考下面的文档: 数据分片 读写分离 ...

  6. Shardingsphere的分库分表+读写分离+分页条件查询

    Shardingsphere的分库分表与读写分离 导入依赖 <dependencies><dependency><groupId>org.springframewo ...

  7. Sharding-JDBC教程:Spring Boot整合Sharding-JDBC实现数据分表+读写分离

    点击上方"方志朋",选择"置顶公众号" 技术文章第一时间送达! 读写分离 在上一篇文章介绍了如何使用Sharing-JDBC实现数据库的读写分离.读写分离的好处 ...

  8. DB层面上的设计 分库分表 读写分离 集群化 负载均衡

    第1章  引言 随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题.对于一个大型的 互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载.对于系统的稳定性和扩展性造成了极大的 ...

  9. Windows环境下使用Mycat模拟分库分表-读写分离案例

    一.基本环境 W7 64位.Mycat1.6.MySQL8.0 二.Mycat核心配置文件配置 解压Mycat1.6,并对server.xml.schema.xml.rule.xml三个核心配置文件做 ...

最新文章

  1. PCL:点云特征描述子3D_object_recognition_(descriptors)
  2. 文件 单片机_单片机C语言编程中reg52.h头文件的作用
  3. 最后一场「屏之争」:汽车大佬与硅谷巨头的贴身肉搏
  4. [异常解决] How make ubuntu use Google Search
  5. 012_HttpServletResponse响应乱码
  6. Bing Maps 开发入门 - 1
  7. oracle 数据立方_大数据之数据仓库分层
  8. armadillo 配置
  9. python实现最小二乘法的线性回归_最小二乘法求线性回归的python实现
  10. 业务赋能利器之外卖特征档案
  11. 016、JVM实战总结:大厂面试题:JVM中有哪些垃圾回收算法,每个算法各自的优劣?
  12. 【无标题】排序算法(C语言)
  13. js文件之间函数的调用
  14. 小型制造类企业IT云平台
  15. ico图标生成器系统 断网情况下快速生成ico文件
  16. 135、137、138、139和445端口
  17. anki怎么设置学习计划_anki如何设置选项(学习任务)?
  18. 中国SAP顾问在美国的跳槽经历
  19. Android瘦身之tiny图片处理
  20. 计算机辅助英语,计算机辅助英语教学

热门文章

  1. 点击button后改变文字_27. 教你零基础搭建小程序:小程序的常见组件—button
  2. 1971旗舰cpu intel_CPU的历史
  3. GC算法-引用计数法
  4. unixODBC的使用
  5. 中国剩余定理(模板+代码)
  6. 系统困境与软件复杂度,为什么我们的系统会如此复杂
  7. Flink on Zeppelin 流计算处理最佳实践
  8. 【详谈 Delta Lake 】系列技术专题 之 Streaming(流式计算)
  9. 人工智能的时代来了,新的商业机会在哪里?
  10. 带您探究云存储的奥秘,三分钟帮您快速了解OSS