前言
官方文档是中文的,大量图文,很详细,这里就不啰嗦,本篇主要是实操。
简介
如果非要说下什么是Sharding-JDBC,正如官网所说,它就是一个增强版的JDBC驱动,用来实现分库分表的SQL操作。还有一款产品是Sharding-Proxy 数据库代理,可以实现读写分离。
既然用Sharding-JDBC进行分库分表,那么为什么要分库分表、分库分表的背景、以及分库分表带来的各种难题,这是肯定要去了解的,Sharding-JDBC也只是个工具而已。
另外还支持分布式事务,也是一个大亮点。
基本概念
虽然说是实操,但还是要解释下Sharding-JDBC中的一些术语概念。从官网摘抄。
逻辑表
水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例如:订单数据根据主键尾数拆分为10张表,分别是t_order_0
到t_order_9
,他们的逻辑表名为t_order
。
真实表
在分片的数据库中真实存在的物理表。即上个示例中的t_order_0
到t_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执行 => 结果归并
流程组成。
Sharding-JDBC整合SpringBoot操作
SpringBoot+Sharding-JDBC+Mybatis-Plus+MySQL的整合。
主要是一些配置的说明,但是官网也都有,配置项也有读写分离的的配置说明,读写分离需要配置MySQL主从,详见demo。