共计 6148 个字符,预计需要花费 16 分钟才能阅读完成。
Apache ShardingSphere 本周迎来了 5.4.0 版本的公布,该版本历时两个月,共合并了来自寰球的团队和集体累计 1271 个 PR,新版本在性能、性能、测试、文档、示例等方面都进行了大量的优化。本次更新蕴含了不少可能晋升用户体验、解决用户痛点的内容,本文与大家一起疾速预览:
- 播送表调整为全局表
- 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。
ShardingSphere 5.4.0 次要有如下两个方面的优化
CDC 反对纯增量模式
纯增量模式能够在创立 CDCClient 的时候指定,此时 CDC 会跳过全量数据同步阶段,并尽早的初始化增量的位点。
StartCDCClientParameter parameter = new StartCDCClientParameter();
// full 的值默认就是 false,示意只订阅纯增量数据
parameter.setFull(false);
......
new CDCClient(parameter, records -> {}).start();
CDC 增量数据按事务输入
为了保障同一事务的数据能够残缺的输入到客户端,对 CDC 的增量阶段进行了优化,尽量保障物理库级别的事务残缺输入。
场景 A 所有的数据库都能反对。
场景 B 是一个 XA 事务,多个物理数据库之间的是相互独立的,目前只反对 openGuass。
openGauss 提供了 GLT 组件,确保在同一个 XA 事务中,多个数据库实例的 CSN 是一样的。CDC 在输入数据的时候,依据
CSN 进行排序,保障了 XA 事务的程序。
CSN(Commit Sequence Number):待提交事务的序列号,在 openGauss 外部应用 CSN 作为逻辑工夫戳,模仿数据库外部的时序。
GLT:全局逻辑时钟,保护了 next CSN,ShardingSphere 会对立下发 CSN 到 openGauss 实例,确保任意两个事务之间的可见性在各分片上是统一的。
Single table 元数据加载逻辑优化
从 5.0 版本开始,ShardingSphere 可能主动的扫描单表(非分片表)和记录单表元数据,在用户执行相干 SQL 时进行正确的路由。
然而,因为应用环境的复杂性,一些用户场景中呈现了大量单表的状况,导致了以下问题:
- 启动速度变慢(元数据扫描耗时较长)
- 占用内存增多(大量单表和元数据对象)
通过剖析,呈现大量单表的次要起因有: - ShardingSphere 治理的数据源较多,但一部分表与以后业务无关
- 历史我的项目迭代,遗留的单表过多
思考到该问题的普遍性,咱们设计了一种新的机制,容许用户按需导入单表,防止启动阶段或者执行 REGISTER STORAGE UNIT 时主动加载过多单表元数据。
从 5.4.0 版本开始,用户能够依据须要进行单表加载的治理,新增的 YAML 配置和 DistSQL 语句如下:
- 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:修复 job 筹备阶段失败后重启 job 导致的断点续传问题
- 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 和真正参加到社区的建设。
(扫 / 码 / 加 / 群)