新版来啦|ShardingSphere 5.4.0 重磅发布

·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 支持纯增量模式

be9c58d0fa274501347301e0c2bf92db.png

纯增量模式可以在创建 CDCClient 的时候指定,此时 CDC 会跳过全量数据同步阶段,并尽早的初始化增量的位点。

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

CDC 增量数据按事务输出

为了保证同一事务的数据可以完整的输出到客户端,对 CDC 的增量阶段进行了优化,尽量保证物理库级别的事务完整输出。

d51decdf5dd79261027bce65a2ac0adc.png

场景 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  官方交流群,携手全球技术精英共同成长,共建社区生态!

3eef408bd690c54eb81017f31fe95af0.png

如何加入 ShardingSphere 社区成为贡献者

  • 「社区答疑」积极在社区中进行答疑、分享技术、帮助群内的其他开源爱好者解决问题。

  • 「代码贡献」社区整理了简单且容易上手的任务,非常适合新人做代码贡献。可以查阅新手任务列表:

🔗 https://github.com/apache/shardingsphere/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22%2Cdiscussion+no%3Aassignee
  • 「内容贡献」发布 ShardingSphere 相关的内容,比如安装部署教程、使用经验、案例实践等,形式不限,欢迎扫码投稿给社区助手。

  • 「社区布道」积极参与社区活动、成为社区志愿者、帮助社区宣传、为社区发展提供有效建议等。

  • 「官方文档贡献」发现文档的不足、优化文档,持续更新文档等方式参与社区贡献。通过文档贡献,让开发者熟悉如何提交 PR 和真正参与到社区的建设。

9cb0bc7bd2aaf96d8ab505d7c366ac3c.png

扫 / 码 / 加 / 群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Linux系统中安装gcc 5.4.0版本,您可以按照以下步骤进行操作: 首先,确保您的Linux系统已经安装了基本的编译工具和依赖项。您可以通过在终端中运行以下命令来检查gcc的安装情况: ``` gcc --version ``` 如果已经安装了gcc,将会显示当前安装的gcc版本信息。如果未安装gcc,将会显示未找到命令的错误信息。 接下来,您需要在终端中输入以下命令来安装gcc 5.4.0所需的依赖项: ``` sudo apt-get install build-essential sudo apt-get install libssl-dev ``` 第一条命令将会安装编译工具集合,而第二条命令将会安装OpenSSL开发库,这是gcc 5.4.0所需的一个依赖项。 完成依赖项的安装后,您可以继续执行以下命令来下载和安装gcc 5.4.0: ``` wget https://ftp.gnu.org/gnu/gcc/gcc-5.4.0/gcc-5.4.0.tar.gz tar -xf gcc-5.4.0.tar.gz cd gcc-5.4.0 ./configure make sudo make install ``` 第一条命令将会从GNU官方网站下载gcc 5.4.0的源代码压缩包。接下来,通过tar命令解压缩源代码,并切换到解压后的目录。然后,执行configure命令来配置安装选项。紧接着,运行make命令来编译源代码,并运行sudo make install命令来安装gcc 5.4.0。这可能需要一些时间来完成。 安装完成后,您可以通过以下命令来验证gcc安装是否成功: ``` gcc --version ``` 如果显示的版本信息为5.4.0,则说明安装成功了。 这就是在Linux系统中安装gcc 5.4.0的步骤。希望能对您有所帮助! ### 回答2: 要在Linux系统上安装gcc 5.4.0版本,可以按照以下步骤进行: 1. 首先,从gcc官方网站或镜像站点上下载gcc 5.4.0的源代码包(通常是一个tar.gz或tar.bz2压缩文件)。 2. 在终端中,使用以下命令解压缩下载的源代码包: ``` tar -xf gcc-5.4.0.tar.gz ``` 3. 进入解压缩后的源代码目录: ``` cd gcc-5.4.0 ``` 4. 创建一个用于构建gcc的目录,并进入该目录: ``` mkdir build cd build ``` 5. 运行以下命令以配置gcc的构建: ``` ../configure ``` 6. 如果缺少某些依赖库文件,可以根据错误提示,使用软件包管理工具安装相应的依赖项。 7. 配置完成后,运行以下命令进行构建和安装: ``` make sudo make install ``` 8. 安装完成后,可以在终端中输入以下命令验证gcc版本是否为5.4.0: ``` gcc --version ``` 以上是在Linux系统上安装gcc 5.4.0的一种方法。请注意,安装过程可能会因为不同的Linux发行版而有所差别,具体步骤可以参考gcc官方文档或相关的Linux发行版文档。 ### 回答3: 要在Linux上安装gcc 5.4.0,可以按照以下步骤进行操作: 1. 打开终端,以root用户或具有sudo权限的用户身份登录。 2. 确保系统已经更新到最新版本,可以运行以下命令进行更新: ``` sudo apt-get update sudo apt-get upgrade ``` 3. 安装gcc编译器和其他必要的组件,运行以下命令: ``` sudo apt-get install build-essential ``` 4. 下载gcc 5.4.0的源代码。可以从官方gcc网站(https://gcc.gnu.org/releases.html)上下载tar.gz压缩包,并使用以下命令解压: ``` tar xzf gcc-5.4.0.tar.gz ``` 5. 进入解压后的目录: ``` cd gcc-5.4.0 ``` 6. 运行以下命令配置编译选项: ``` ./configure ``` 7. 编译安装gcc,运行以下命令: ``` make sudo make install ``` 8. 安装完成后,可以使用以下命令验证gcc版本: ``` gcc --version ``` 安装完成后,您应该能够成功在Linux上使用gcc 5.4.0进行编译和运行程序。注意,在使用此版本之前,请确保您的系统满足gcc 5.4.0的硬件和软件要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值