前言

官方文档是中文的,大量图文,很详细,这里就不啰嗦,本篇主要是实操。

简介

如果非要说下什么是Sharding-JDBC,正如官网所说,它就是一个增强版的JDBC驱动,用来实现分库分表的SQL操作。还有一款产品是Sharding-Proxy 数据库代理,可以实现读写分离。

既然用Sharding-JDBC进行分库分表,那么为什么要分库分表、分库分表的背景、以及分库分表带来的各种难题,这是肯定要去了解的,Sharding-JDBC也只是个工具而已。

另外还支持分布式事务,也是一个大亮点。

基本概念

虽然说是实操,但还是要解释下Sharding-JDBC中的一些术语概念。从官网摘抄

逻辑表

水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例如:订单数据根据主键尾数拆分为10张表,分别是t_order_0t_order_9,他们的逻辑表名为t_order

真实表

在分片的数据库中真实存在的物理表。即上个示例中的t_order_0t_order_9

数据节点

数据分片的最小单元。由数据源名称和数据表组成,例:ds_0.t_order_0

广播表

指所有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表。

绑定表

指分片规则一致的主表和子表。例如:t_order表和t_order_item表,均按照order_id分片,则此两张表互为绑定表关系。绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。

分片键

将某个表进行拆分,一般会根据某个关键字段进行分片,例如:用订单表的主键为分片字段进行取模,该字段就是分片键。一条SQL中如果没有分片键,那么会进行全路由,性能很差。

分布式主键

这个有很多实现方案,例如:UUID,雪花算法(snowflake)等等。默认使用雪花算法来生成主键。

执行过程

上面说到Sharding-JDBC是增强版的JDBC,重写了JDBC,它由SQL解析 => 执行器优化 => SQL路由 => SQL改写 => SQL执行 => 结果归并流程组成。
image.png

Sharding-JDBC整合SpringBoot操作

SpringBoot+Sharding-JDBC+Mybatis-Plus+MySQL的整合。

主要是一些配置的说明,但是官网也都有,配置项也有读写分离的的配置说明,读写分离需要配置MySQL主从,详见demo

参考资料