ShardingSphere-Proxy5.5.2 DistSQL
摘要
-
本文介绍 ShardingSphere-Proxy5.5.2 DistSQL 的使用。
DistSQL
-
DistSQL(Distributed SQL)是 Apache ShardingSphere 特有的操作语言。 它与标准 SQL 的使用方式完全一致,用于提供增量功能的 SQL 级别操作能力。
-
灵活的规则配置和资源管控能力是 Apache ShardingSphere 的特点之一。
-
在使用 4.x 及其之前版本时,开发者虽然可以像使用原生数据库一样操作数据,但却需要通过本地文件或注册中心配置资源和规则。然而,操作习惯变更,对于运维工程师并不友好。
-
从 5.x 版本开始,DistSQL(Distributed SQL)让用户可以像操作数据库一样操作 Apache ShardingSphere,使其从面向开发人员的框架和中间件转变为面向运维人员的数据库产品。
-
DistSQL 细分为 RDL、RQL、RAL 和 RUL 四种类型。
- RDL: Resource & Rule Definition Language,负责资源和规则的创建、修改和删除。
- RQL: Resource & Rule Query Language,负责资源和规则的查询和展现。
- RAL: Resource & Rule Administration Language,负责强制路由、熔断、配置导入导出、数据迁移控制等管理功能。
- RUL: Resource & Rule Utility Language,负责 SQL 解析、SQL 格式化、执行计划预览等功能。
示例准备
-
具体的语法,官网介绍的很详细,这里基于 SpringBoot3 + ShardingSphere-Proxy5.5.2 分库分表 中的配置进行示例说明。
-
为了尽可能多的使用 DistSQL 语法,这里仅在
global.yaml
中配置如下内容:
1 | # 配置为基于 zookeeper 集群模式,为了演示 DistSQL 语法,这里需要将配置持久化,使用 JDBC 的单机模式也可以 |
-
启动 ShardingSphere-Proxy 服务,并登录
1 | # 启动 ShardingSphere-Proxy |
全局配置,即global.yaml
中的配置
-
全局配置对所有逻辑数据库有效
属性配置
-
配置文件中的配置
1 | props: |
DistSQL 语法
-
设置属性,官方文档
1 | # 这里要注意,属性名需要使用下划线格式 |
-
查看属性,官方文档
1 | mysql> SHOW DIST VARIABLES; |
分布式事务配置
-
配置文件中的配置
1 | transaction: |
DistSQL 语法
-
查看事务规则,官方文档
1 | SHOW TRANSACTION RULE; |
-
修改事务规则,官方文档
1 | ALTER TRANSACTION RULE( |
规则配置,即database-xxx.yaml
中的配置
-
以下 DistSQL 仅可以在逻辑库中执行,所以需要先创建一个逻辑数据库
1 | mysql> CREATE DATABASE sharding_db; |
数据源配置
-
在 DistSQL中,官方将数据源叫做
存储单元(STORAGE UNIT)
-
配置文件中的配置
1 | dataSources: |
DistSQL 语法
-
注册存储单元,官方文档
1 | REGISTER STORAGE UNIT ds_0 ( |
-
查询存储单元,官方文档
1 | SHOW STORAGE UNITS FROM sharding_db \G; |
-
修改存储单元,官方文档
1 | ALTER STORAGE UNIT ds_1 ( |
-
取消注册存储单元,官方文档
1 | # 无法移除已经被规则使用的存储单元 |
单表配置
-
配置文件中的配置
1 | rules: |
DistSQL 语法
-
加载单表,官方文档
1 | LOAD SINGLE TABLE ds_0.t_address; |
-
查询单表,官方文档
1 | SHOW SINGLE TABLES; |
-
卸载单表,官方文档
1 | LOAD SINGLE TABLE ds_0.t_address; |
广播表配置
-
广播表,即所有数据源都包含的表,比如字典表
1 | rules: |
DistSQL 语法
-
创建广播表,官方文档
1 | CREATE BROADCAST TABLE RULE dict; |
分库分表配置
单分片键,Long 类型
1 | rules: |
DistSQL 语法
-
创建分片规则,官方文档
1 | CREATE SHARDING TABLE RULE course ( |
单分片键,String 类型
1 | rules: |
DistSQL 语法
-
创建分片规则
1 | CREATE SHARDING TABLE RULE t_user ( |
多分片键,Long 类型
1 | rules: |
DistSQL 语法
-
创建分片规则
1 | CREATE SHARDING TABLE RULE t_order_complex ( |
自动分片规则
-
上面介绍的都是手工配置分片规则,用于配置较为复杂的分片规则,如果分片规则比价简单,可以使用自动分片规则
1 | rules: |
DistSQL 语法
-
创建分片规则
1 | CREATE SHARDING TABLE RULE t_order ( |
其它分片操作语句
-
查询分片规则,官方文档
1 | # 查看当前逻辑库下的所有分片规则 |
-
修改分片规则,官网文档,与创建分片规则类似,将
CREATE
改为ALTER
即可
1 | ALTER SHARDING TABLE RULE t_order_item_complex ( |
-
删除分片规则,官网文档
1 | DROP SHARDING TABLE RULE t_order; |
数据加密规则
1 | rules: |
DistSQL 语法
-
创建加密规则,官方文档
1 | CREATE ENCRYPT RULE t_user ( |
-
修改加密规则
1 | ALTER ENCRYPT RULE t_user ( |
-
删除加密规则
1 | DROP ENCRYPT RULE t_user; |
-
查询加密规则,官方文档
1 | # 查询当前逻辑库中所有加密规则 |
数据脱敏规则
1 | rules: |
DistSQL 语法
-
创建脱敏规则,官方文档
1 | CREATE MASK RULE t_user ( |
-
修改脱敏规则
1 | ALTER MASK RULE t_user ( |
-
删除脱敏规则
1 | DROP MASK RULE t_user; |
-
查询脱敏规则,官方文档
1 | # 查询当前逻辑库中所有脱敏规则 |