springboot mysql日志表_SpringBoot整合Sharding-JDBC实现数据分表+读写分离

本文介绍了如何利用SpringBoot结合Sharding-JDBC实现数据库的读写分离和数据分表。通过示例详细讲解了配置数据源、分表策略及API测试,展示了在高并发场景下提升系统性能的有效方法。
摘要由CSDN通过智能技术生成

读写分离

在上一篇文章介绍了如何使用Sharing-JDBC实现数据库的读写分离。读写分离的好处就是在并发量比较大的情况下,将查询数据库的压力 分担到多个从库中,能够满足高并发的要求。比如上一篇实现的那样,架构图如下:

057100460e4fae9a273e2d8beac5ac34.png

数据分表

当数据量比较大的时候,比如单个表的数据量超过了500W的数据,这时可以考虑将数据存储在不同的表中。比如将user表拆分为四个表user0、user1、 user2、user3装在四个表中。此时如图所示:

9c01b8c9e0a84fbc7d3376f65fb1e242.png

案例详解

和上一篇文章使用的数据库是同一个数据库,数据库信息如下:

372b0fa727b1f68cfe977059d89800e3.png

在主库初始化Mysql数据的脚本,初始化完后,从库也会创建这些表,脚本信息如下:

5cc28b20aa2e4d558bc2fb68a8127c98.png

bc2abd4800bab33512b808ddaa7db40f.png

本案例还是在上一篇文章的案例基础之上进行改造,工程的目录和pom的依赖见上一篇文章或者源码。在工程的配置 文件application.yml做Sharding-JDBC的配置,代码如下:

7ddb66690c58cacb21d2268e4a4ae631.png

e1a2d65390ffced327f62f97abc86dc7.png

在上面的配置中,sharding.jdbc.dataSource部分是配置的数据源的信息,本案例有三个数据源db-test0、db-test1、db-test2。sharding.jdbc.config.sharding.master-slave-rules.ds0.master-data-source-name配置的是主库的数据库名,本案例为db-test0,其中ds0为分区名。sharding.jdbc.config.sharding.master-slave-rules.ds_0.slave-data-source-names配置的是从库的数据库名,本案例为db-test1、db-test2。sharding.jdbc.config.sharding.tables.user.actual-data-nodes配置的分表信息,真实的数据库信息。ds0.user$->{0..3},表示读取ds0数据源的user0、user1、user2、user_3。sharding.jdbc.config.sharding.tables.user.table-strategy.standard.sharding-column配置的数据分表的字段,是根据id来分的。sharding.jdbc.config.sharding.tables.user.table-strategy.standard.precise-algorithm-class-name是配置数据分表的策略的类,这里是自定义的类MyPreciseShardingAlgorithm。MyPreciseShardingAlgorithm是根据id取模4来获取表名的,代码如下:

fc6286620d4b082caabf602f32aa7bae.png

测试

写一个API来测试,代码如下:

cd89dcb3f77a62fa0a45cad652fe4ac1.png

启动Spring Boot工程,在浏览器上执行localhost:8080/add,然后去数据库中查询,可以看到user0、user1、user2、user3分别插入了数据。 然后访问localhost:8080/users,可以查询数据库中四个表中的所有数据。可见Sharding-JDBC在插入数据的时候,根据数据分表策略,将数据存储在 不同的表中,查询的时候将数据库从多个表中查询并聚合。

在数据库的主机的日志里面,可以看到查询的日志也验证了这个结论,如下:

f1798bfb02df2494da4b7801c5fc5940.png

从库查询日志:

d2d442dfcc60c34889f0b9e0d08bbeff.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值