前言
ShardingSphere可以支撑分库分表,刚果商城采用了垂直分库(根据不同业务拆分数据库),因此此文章只演示水平分表。
垂直分库
不同业务拆分为不同的数据库(例如商城业务)
水平分表
分表可以通过将大表拆分为多个小表,减少单表的数据量,从而提高查询性能。好处比较多…
分表命名格式最好为逻辑表_num
这个格式,方便后续操作
介绍完基本的概念,开始实践。
ShardingSphere官方文档
接下来重点关注分片算法
和加密算法
核心依赖
我这里使用的是5.2.0版本
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
<version>5.2.0</version>
</dependency>
配置文件(核心)
spring:
shardingsphere:
datasource:
# 为每个数据源进行配置,有几个配几个
ds-0:
driver-class-name: com.mysql.jdbc.Driver
type: com.zaxxer.hikari.HikariDataSource
# 配置数据源,可以配置多个
names: ds-0
props:
# 打印sql日志方便观察
sql-show: true
max-connections-size-per-query: 10
rules:
encrypt:
encryptors:
# 自定义加密算法名称
customer-user-encryptor:
props:
# AES 使用的 KEY
aes-key-value: ADbisulBtxnnKFoW
type: AES
tables:
# 指定表相应字段加密算法
customer_user:
# 加密字段
columns:
mail:
cipher-column: mail
encryptor-name: customer-user-encryptor
phone:
cipher-column: phone
encryptor-name: customer-user-encryptor
receive_address:
columns:
phone:
cipher-column: phone
encryptor-name: customer-user-encryptor
detail_address:
cipher-column: detail_address
encryptor-name: customer-user-encryptor
sharding:
sharding-algorithms:
# 自定义分片算法名称 哈希取模分片算法 对 16 取余
sharding_by_mod:
props:
sharding-count: 16
type: HASH_MOD # hash算法
tables:
# 不同表配置分片算法
customer_user:
# 指定真实表表名称 `$->{0..15}` 即 0-15
actual-data-nodes: ds-0.customer_user_$->{0..15}
table-strategy:
standard:
sharding-algorithm-name: sharding_by_mod
sharding-column: id # 分片字段
operation_log:
actual-data-nodes: ds-0.operation_log_$->{0..15}
table-strategy:
standard:
sharding-algorithm-name: sharding_by_mod
sharding-column: customer_user_id
receive_address:
actual-data-nodes: ds-0.receive_address_$->{0..15}
table-strategy:
standard:
sharding-algorithm-name: sharding_by_mod
sharding-column: customer_user_id
分片算法
:
加密算法
:
代码实践
配置完之后,使用起来就很简单了,只需将实体类指定逻辑表名称
,使用起来是无感知的。
测试一下
调用【新增用户】接口。
入参:
执行时,会发现有个逻辑SQL
和实际SQL
,可以看到当前用户通过配置的Hash分片算法
,被分配到了customer_user_5表中
同时加密算法也起了作用,phone和mail字段都被加密。
ShardingSphere
使用起来就是这么滴简单。希望这篇文章对大家有帮助,有什么错误可以联系(私信)博主改正。
欢迎大家点赞 + 收藏 + 关注。
关注小李不迷路~
详细分库分表内容可以看我这篇博客 MySQL与分布式