Springboot整合ShardingSphere实现分库分表,垂直拆分、水平拆分、公共表的处理

垂直拆分 操作数据库中某张表,把这张表中一部分字段数据存到一张新表里面,再把这张表…

垂直拆分

操作数据库中某张表,把这张表中一部分字段数据存到一张新表里面,再把这张表另一 部分字段数据存到另外一张表里面 例如:将商品基本信息放在一张表,商品详情放在一张表

水平拆分

将一个数据库,拆分为两个相同结构的数据库,存储数据

存储方式

方式一:按id取模方式实现,缺点:不好扩容

方式二:按id分片实现,缺点:因为id连续,热点数据可能会集中到一个数据库

其他思路:大范围按时间分,小范围取模分

分库分表可能出现的问题:

事务一致性问题:单表操作事务执行失败可以回滚,分表之后可能会插入到多条数据库

跨节点关联查询:当查询固定范围的数据也在多个数据库中

主键避重问题:数据库表主键冲突

所以在开发中:数据增加不要立马做水平拆分,首先考虑缓存处理,读写分离,使用索引等

ShardingSphere

开源分布式数据库中间件解决方案,主要有Sharding-JDBC和Sharding-Proxy

客户端分库分表:以jar包形式放在java应用里,通过Sharding-JDBC去找对应数据,主要作用数据分片,读写分离

服务端分库分表:利用Sharding-Proxy伪装成数据库,分库分表由Sharding-Proxy实现

Sharding-JDBC实现水平分表

创建数据库,按水平分表方式

在数据库创建两张表 course_1 和 course_2

约定规则:如果添加课程 id 是偶数把数据添加 course_1,如果奇数添加到 course_2

创建springboot项目,添加依赖

实体类

mapper层

启动类加注解

配置 Sharding-JDBC 分片策略

在配置文件中配置

springboot版本不同可能会报错,由于一个实体类对应两个数据库,在配置文件添加

spring.main.allow-bean-definition-overriding=true

水平分库

创建两个数据库,每个数据库里创建两个表分别为course_1 和 course_2

约定分片规则:userid为偶数加入第一个数据库,cid为偶数放入course_1表

修改之前代码:配置分片规则,在配置文件中加入

测试同上

垂直分库

专库专用,查询用户信息时去用户数据库查用户表

创建数据库user_db,创建用户信息表t_user

创建实体类与mapper

配置文件添加

公共表

存储固定数据,很少发生变化,查询时需要进行关联,例如用户的状态表,字典等

在多个数据需中都创建相同结构的表

在配置文件中添加

当有修改操作时,会向多个数据库中t_udict表进行修改

本文来自网络,不代表软粉网立场,转载请注明出处:https://www.rfff.net/p/6188.html

作者: HUI

发表评论

您的电子邮箱地址不会被公开。

返回顶部