广播表调整为全局表 CDC 功能完善 Single table 元数据加载逻辑优化
功能预览
功能描述
广播表指所有的分片数据源中都存在的表,表结构及其数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表。目前广播表只能存在于使用分片表内的数据源中。为了解决单表和广播表如果不在同一个存储节点时无法关联查询的问题,现调整为可以使用逻辑库下的全部数据源,所以需要把广播表从分片规则中移出。
API 变更
元数据
新增 BroadcastRule 已有的 ShardingSphereRuleMetaData 中 rules 集合会存储 BroadcastRule ShardingRuleConfiguration 中去掉 broadcastTables ShardingRule 中去掉 broadcastTables YamlShardingRuleConfiguration 中去掉 broadcastTables
DistSQL
CREATE BROADCAST TABLE RULE 内部逻辑调整,SQL 语句无影响
DROP BROADCAST TABLE RULE 内部逻辑调整,SQL 语句无影响
SHOW BROADCAST TABLE RULES 内部逻辑调整,SQL 语句无影响
COUNT SHARDING RULE FROM sharding_db 结果集中移除 broadcast_table 信息,SQL 语句无影响
mysql> COUNT SHARDING RULE FROM sharding_db;
+--------------------------+----------------+-------+
| rule_name | database | count |
+--------------------------+----------------+-------+
| sharding_table | sharding_db | 2 |
| sharding_table_reference | sharding_db | 2 |
| broadcast_table | sharding_db | 0 |
+--------------------------+----------------+-------+
3 rows in set (0.00 sec)
新增 COUNT BROADCAST RULE (FROM sharding_db) 语句
YAML
config-sharding.yaml 配置文件中原有 SHARDING RULE 下去掉 broadcastTables 配置 config-sharding.yaml 配置文件中新增 BROADCAST RULE 配置广播表
JAVA Config
新增 YamlBroadcastRuleConfiguration 新增 BroadcastRuleConfiguration
SPI 接口
新增 YamlBroadcastRuleConfigurationSwapper 类实现 YamlRuleConfigurationSwapper 接口 新增 BroadcastSQLRouter 类实现 SQLRouter接口
CDC 功能完善
CDC 即 Change Data Capture(变更数据捕获),是数据库的常见功能,大部分关系型数据库也都提供了 CDC 功能,比如:MySQL、PostgreSQL、openGauss 等。变更包括记录的增删改,也可能是结构的变化。CDC 系统捕获到变更数据之后,分发给订阅变更数据的下游,再写入其它系统,比如:OLTP、OLAP 或者 MQ 系统。CDC 可用于数据同步,也可用于 ETL。
CDC 支持纯增量模式

StartCDCClientParameter parameter = new StartCDCClientParameter();
// full 的值默认就是 false,表示只订阅纯增量数据
parameter.setFull(false);
......
new CDCClient(parameter, records -> {
}).start();
CDC 增量数据按事务输出

Single table 元数据加载逻辑优化
启动速度变慢(元数据扫描耗时较长) 占用内存增多(大量单表和元数据对象)
ShardingSphere 管理的数据源较多,但一部分表与当前业务无关 历史项目迭代,遗留的单表过多
YAML
# YAML 配置
databaseName: sharding_db
- !SINGLE
tables:
# MySQL 模式
- ds_0.t_single
- ds_2.*
- "*.*"
# PostgreSQL, openGauss 支持指定 schema
- ds_1.public.t_config
- ds_1.public.*
- ds_1.*.*
- "*.*.*"
# 既存,控制 CREATE TABLE 路由
defaultDataSource: ds_0
DistSQL
-- MySQL
LOAD SINGLE TABLE ds_0.t_single;
LOAD SINGLE TABLE ds_0.*;
LOAD SINGLE TABLE *.*;
-- PostgreSQL, openGauss
LOAD SINGLE TABLE ds_0.public.t_single;
LOAD SINGLE TABLE ds_0.public.*;
LOAD SINGLE TABLE ds_0.*.*;
LOAD SINGLE TABLE *.*.*;
-- 查看未加载的单表
SHOW UNLOADED SINGLE TABLES;
-- 查看单表及分布(既存)
SHOW SINGLE (TABLES | TABLE tableName);
-- 移除单表,格式与 LOAD 对应
UNLOAD SINGLE TABLE ds_0.t_single;
Encrypt、Mask 等规则中已经配置的表名,如存在于单表中,自动加载 用户执行 CREATE TABLE 时,若该表为单表,自动加载
单表无需配置 加载所有单表及其元数据
调整后:
新增单表配置和 DistSQL 语法 单表按需求加载,提高启动速度,降低内存消耗 其它规则中需要的单表,自动加载 CREATE TABLE 创建的单表,自动加载
更新日志
API 调整
| 元数据:Sharding 广播表调整为全局表类型 |
| JDBC:全局规则移除叹号 ! |
| DistSQL:Encrypt DistSQL 中 ASSISTED_QUERY、LIKE_QUERY 关键字简化 |
| DistSQL:SQL_PARSER RULE 语法更新 |
| 加密:加密 API YAML 配置调整,以区分加密、LIKE、辅助查询列的差异 |
| 加密:移除明文列 & queryWithCipherColumn 切换开关 |
| 读写分离:API 优化调整 |
| Proxy:移除配置项 proxy-instance-type |
| Proxy:移除配置项 proxy-backend-executor-suitable |
| Proxy:移除配置项 proxy-mysql-default-version |
| Scaling:CDC commit/rollback streaming 替换为 drop streaming |
| 【实验性功能】数据分片缓存规则合并到数据分片规则中 |
新功能
DistSQL:新增 SQL_FEDERATION 规则管理语句 |
Proxy:支持 Unix Domain Socket |
功能增强
Scaling:CDC 支持纯增量模式 Scaling:CDC 增量数据按事务输出 Scaling:CDC 支持 MySQL 和 PostgreSQL Scaling:CDC 支持单表 Scaling:CDC 支持 openGauss 所有字段类型 Scaling:CDC 支持 openGauss 增量复制断线重连 Scaling:移除 DataConsistencyCalculateAlgorithmChooser,存在加密规则的时候不兼容 Scaling:优化整型主键表全量任务拆分,避免大数据量情况下耗时过长 Scaling:调整 process 配置默认值,优化资源消耗 Scaling:数据迁移不再需要手动执行 refresh table metadata Scaling:PostgreSQL/openGauss 创建 slot 需要检查 slot 对应的 database 是否为空 Scaling:一致性校验未执行完成时 result 不应该为 false,避免误导用户 Scaling:CRC32_MATCH 一致性校验开启源端目标端并发计算 Scaling:pipeline 作业兼容分片审计策略 元数据:ShardingSphere 元数据体系结构重构开发&新结构切换 元数据:单表元数据加载逻辑优化 元数据:支持 MySQL/PostgreSQL/openGauss 系统表空查询 DistSQL:读写分离增加 transactionalReadQueryStrategy 支持 DistSQL:增强算法 properties 校验 事务:增加权限校验 事务:移除 TransactionTypeHolder,只创建当前事务管理器 SQL 支持度:支持单表、广播表执行 MySQL LOAD DATA, LOAD XML 语句 SQL 支持度:完善 MySQL Test 程序测试结果中高优先级的 SQL SQL 支持度:Oracle SQL 解析支持中文逗号 加密:加密功能支持投影子查询中包含加密字段查询 内核:为 INSERT, DELETE, UPDATE 和 SELECT 语句增加表是否存在元数据校验 JDBC:ShardingSphereStatement 实现批量操作方法 Proxy:前端支持 TLS Proxy:PostgreSQL/openGauss 协议支持处理 Flush 消息
Proxy:PostgreSQL 协议支持 bit 与 bool 类型
| Scaling:CDC 支持纯增量模式 |
| Scaling:CDC 增量数据按事务输出 |
| Scaling:CDC 支持 MySQL 和 PostgreSQL |
| Scaling:CDC 支持单表 |
| Scaling:CDC 支持 openGauss 所有字段类型 |
| Scaling:CDC 支持 openGauss 增量复制断线重连 |
| Scaling:移除 DataConsistencyCalculateAlgorithmChooser,存在加密规则的时候不兼容 |
| Scaling:优化整型主键表全量任务拆分,避免大数据量情况下耗时过长 |
| Scaling:调整 process 配置默认值,优化资源消耗 |
| Scaling:数据迁移不再需要手动执行 refresh table metadata |
| Scaling:PostgreSQL/openGauss 创建 slot 需要检查 slot 对应的 database 是否为空 |
| Scaling:一致性校验未执行完成时 result 不应该为 false,避免误导用户 |
| Scaling:CRC32_MATCH 一致性校验开启源端目标端并发计算 |
| Scaling:pipeline 作业兼容分片审计策略 |
| 元数据:ShardingSphere 元数据体系结构重构开发&新结构切换 |
| 元数据:单表元数据加载逻辑优化 |
| 元数据:支持 MySQL/PostgreSQL/openGauss 系统表空查询 |
| DistSQL:读写分离增加 transactionalReadQueryStrategy 支持 |
| DistSQL:增强算法 properties 校验 |
| 事务:增加权限校验 |
| 事务:移除 TransactionTypeHolder,只创建当前事务管理器 |
| SQL 支持度:支持单表、广播表执行 MySQL LOAD DATA, LOAD XML 语句 |
| SQL 支持度:完善 MySQL Test 程序测试结果中高优先级的 SQL |
| SQL 支持度:Oracle SQL 解析支持中文逗号 |
| 加密:加密功能支持投影子查询中包含加密字段查询 |
| 内核:为 INSERT, DELETE, UPDATE 和 SELECT 语句增加表是否存在元数据校验 |
| JDBC:ShardingSphereStatement 实现批量操作方法 |
| Proxy:前端支持 TLS |
Proxy:PostgreSQL/openGauss 协议支持处理 Flush 消息 |
Proxy:PostgreSQL 协议支持 bit 与 bool 类型 |
问题修复
Scaling:修复 j |
Scaling:CDC delete 事件 record.beforeList 为空 |
Scaling:修复 openGaus 增量 mpp 插件 解析字符串中的单引号错误的问题 |
Scaling:job 结束后线程池未关闭 |
Scaling:修复 task 启动前关闭 job 的问题 |
元数据:修复了 H2 数据库加载模式元数据时区分大小写的问题 |
元数据:修复用户配置 PostgreSQL/openGauss schema name 做为逻辑库名时,出现的 object not found 异常 |
DistSQL:修复执行 SHOW DIST VARIABLE 时 check_table_metadata_enabled 的错误结果 |
加密:修复 PostgreSQL/openGauss Encrypt LIKE 小写导致的改写异常 |
分片:支持空分片条件传递给分片算法,允许用户控制空值路由 |
SQL 支持度:支持 MySQL Projection 中包含 BETWEEN AND 表达式解析 |
脱敏:修复脱敏算法 KEEP_FROM_X_TO_Y 配置相同 from-x 和 to-y 参数时错误脱敏结果 |
构建:修复错误码方言模块缺少 pgjdbc JAR 会报错 ClassNotFound 的问题 |
Proxy:修复 MySQL 协议下无法正确处理连续命令的 Sequence ID 的问题 |
相关链接
🔗 下载链接
https://shardingsphere.apache.org/document/current/cn/downloads/
🔗 更新日志
https://github.com/apache/shardingsphere/blob/master/RELEASE-NOTES.md
🔗 项目地址
https://shardingsphere.apache.org/
🔗 Cloud 子项目地址
https://github.com/apache/shardingsphere-on-cloud
社区建设
此次 Apache ShardingSphere 5.4.0 版本的发布,共有 53 位 Contributor 提交了 1271 个 PR,非常感谢社区伙伴们的大力支持,也欢迎越来越多的开发者积极参与 Apache ShardingSphere 社区建设,在纯粹的技术氛围中,提升个人技能、收获自我成长。
欢迎更多的开源技术爱好者加入 Apache ShardingSphere 官方交流群,携手全球技术精英共同成长,共建社区生态!

如何加入 ShardingSphere 社区成为贡献者
「社区答疑」积极在社区中进行答疑、分享技术、帮助群内的其他开源爱好者解决问题。 「代码贡献」社区整理了简单且容易上手的任务,非常适合新人做代码贡献。可以查阅新手任务列表:
🔗 https://github.com/apache/shardingsphere/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22%2Cdiscussion+no%3Aassignee
「内容贡献」发布 ShardingSphere 相关的内容,比如安装部署教程、使用经验、案例实践等,形式不限,欢迎扫码投稿给社区助手。 「社区布道」积极参与社区活动、成为社区志愿者、帮助社区宣传、为社区发展提供有效建议等。 「官方文档贡献」发现文档的不足、优化文档,持续更新文档等方式参与社区贡献。通过文档贡献,让开发者熟悉如何提交 PR 和真正参与到社区的建设。





