
聊聊 Sharding-JDBC 分库分表(三)
Sharding-JDBC 实战
上述内容基本介绍了Sharding-JDBC的基本知识点,下面通过 Spring Boot + Sharding-JDBC 的方式实战演示一下。
1. Sharding-JDBC 的 pom 依赖
想要使用Sharding-JDBC只需要添加一个maven依赖即可,如下:
“笔者这里使用的版本为:4.1.1”
“源码已经上传GitHub,关注公众号:码猿技术专栏,回复关键词:9532 获取!”
2. 垂直分表、分库
垂直切分一般针对数据行数不大,但是单行的某些字段数据很大,表占用空间很大,检索的时候需要执行大量的IO,严重降低性能,此时需要将拆分到另外一张表,且与原表是一对一的关系,这就是垂直分表。
比如商品表中的商品描述数据很大,严重影响查询性能,可以将商品描述这个字段单独抽离出来存储,这样就拆分成了两张表(垂直分表),如下图:
垂直分表
通过垂直分表性能得到了一定程度的提升,但是还没有达到要求,并且磁盘空间也快不够了,因为数据还是始终限 制在一台服务器,库内垂直分表只解决了单一表数据量过大的问题,但没有将表分布到不同的服务器上,因此每个 表还是竞争同一个物理机的CPU、内存、网络IO、磁盘。
此时就需要进行垂直分库,如下之前是在单独的卖家库存储的,现在需要将商品的信息给垂直切分出去,分成了两个库:商品库product_db、店铺库shop_db:
垂直分库
方案已经有了,那么现在就需要用Sharding-JDBC去实现。
“product_db和shop_db的SQL会放在源码中,这里就不再贴了”
Sharding-JDBC 使用非常简单,只需要在配置文件中指定数据源信息和切片规则即可实现分库分表。
这里支持三种配置,如下:
- yml配置文件
- properties配置文件
- Java Config 编码配置
这里笔者使用的是第一种yml配置方式,详细配置如下:
上述配置非常简单,分为如下几个步骤:
1、数据源配置
由于垂直分库涉及到shop_db,product_db,肯定是要配置两个数据源,如下:
这个很好理解,两个数据源名称分别为ds1,ds2,自己任意取名,然后配置相关信息。
2、数据节点配置
这里数据节点很重要,你要告诉Sharding-JDBC 你要操作的那张表在哪个库中,对应表的名称。
上述涉及到三张表,分别是shop、product_base、product_description,因此需要配置三个数据节点,如下:
ds$->{1} 采用的是Groovy表达式,表示ds1
数据节点要具体到指定的数据库、表名。
“spring.shardingsphere.sharding.default-data-source-name=ds1可以指定默认的数据源”
文章转自公众号:码猿技术专栏
