Springboot2.x + ShardingSphere 实现分库分表


	Springboot2.x + ShardingSphere 实现分库分表
[编程语言教程]

概念解析

垂直分片

按照业务拆分的方式称为垂直分片,又称为纵向拆分,它的核心理念是专库专用。 在拆分之前,一个数据库由多个数据表构成,每个表对应着不同的业务。而拆分之后,则是按照业务将表进行归类,分布到不同的数据库中,从而将压力分散至不同的数据库。 下图展示了根据业务需要,将用户表和订单表垂直分片到不同的数据库的方案。

技术图片

垂直分片往往需要对架构和设计进行调整。通常来讲,是来不及应对互联网业务需求快速变化的;而且,它也并无法真正的解决单点瓶颈。 垂直拆分可以缓解数据量和访问量带来的问题,但无法根治。如果垂直拆分之后,表中的数据量依然超过单节点所能承载的阈值,则需要水平分片来进一步处理。

水平分片

水平分片又称为横向拆分。 相对于垂直分片,它不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个分片仅包含数据的一部分。 例如:根据主键分片,偶数主键的记录放入0库(或表),奇数主键的记录放入1库(或表),如下图所示。

技术图片

水平分片从理论上突破了单机数据量处理的瓶颈,并且扩展相对自由,是分库分表的标准解决方案。

开发准备

分库分表常用的组件就是shardingsphere,目前已经是apache顶级项目,这次我们使用springboot2.1.9 + shardingsphere4.0.0-RC2(均为最新版本)来完成分库分表的操作。

假设有一张订单表,我们需要将它分成2个库,每个库三张表,根据id字段取模确定最终数据的位置,数据库环境配置如下:

  • 172.31.0.129
    • blog
      • t_order_0
      • t_order_1
      • t_order_2
  • 172.31.0.131
    • blog
      • t_order_0
      • t_order_1
      • t_order_2

三张表的逻辑表为t_order,大家可以根据建表语句准备好其他所有数据表。 

DROP TABLE IF EXISTS `t_order_0;
CREATE TABLE `t_order_0` (
`id` bigint(20) NOT NULL,
`name` varchar(255) DEFAULT NULL COMMENT ‘名称‘,
`type` varchar(255) DEFAULT NULL COMMENT ‘类型‘,
`gmt_create` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘创建时间‘,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Springboot2.x + ShardingSphere 实现分库分表