新版来啦|ShardingSphere 5.4.0 重磅发布

2023-11-12

·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 的问题

相关链接

									
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

新版来啦|ShardingSphere 5.4.0 重磅发布 的相关文章

  • 利用python来制作动态二维码

    前言 为什么要学习python 是因为不仅很多工作需要用到python 同时我们可以利用python做很多好玩儿的事儿 今天就来教大家如何利用python制作动态二维码 代码说明 我们以小猪佩奇gif图片为例 如果我们利用的背景图是gif动
  • 工厂实施MES系统可以带来哪些效益?

    众多工厂生产现状 1 设施设备先进 但是管理方式落后 手工管理模式的存在 造成数据的不准确和不完全 没有完全实现信息化管理 2 生产计划协调性差 作业调度困难 生产作业计划主要依据调度员的经验制定 设备利用率低 任务进度监控难 紧急插单普遍
  • C++虚基类

    问题引出 问题 A中数据 在D中保存了两份 虚继承 虚继承的目的是让某个类做出声明 承诺愿意共享它的基类 其中 这个被共享的基类就称为虚基类 Virtual Base Class 虚派生只影响从指定了虚基类的派生类中进一步派生出来的类 它不
  • 扎心!为何HR看了你的简历却不通知面试?

    还只是老老实实地写简历 投简历 默默地等待面试通知 那只有两种可能 你太天真 或者是 你真的很久没有 求职 了 如果你细心观察会发现 当你完成一份简历之后 它的状态也会有变化 然而 却有很多求职者并没有搞清楚这些 状态 到底代表着什么 但小
  • idea 配置 JavaWeb 项目的 tomcat

    目录 第一步 单击 idea 靠右上部位的 添加配置 Add Config Run Config 第二步 点击 添加新 或者图中箭头指向的任意一个地方 第三步 选择 Tomcat 服务器 本地 不是 TomEE 第四步 若以前从未配置 To
  • 使用SARIMA做季节时间序列预测全流程(附MATLAB代码)

    在之前的专栏中我们用ARIMA的方法做了时间序列的趋势性预测 不过我们经常还会遇到一种情况 即某些时间序列中存在明显的周期性变化 这种周期是由于季节性变化 季度 月度等 引起的 如下图所示 为1949年到1960年每月国际航空公司的乘客人数
  • C# pdf文件加数字证书,防篡改

    C 指定文件夹内新创建pdf文件加签数字证书 代码实现 引用 Spire Pdf string files Directory GetFiles Config pdfPath 需加数字证书pdf存放文件夹地址 string filesLis
  • 进程信号生命周期详解

    信号和信号量半毛钱关系都没有 每个信号都有一个编号和一个宏定义名称 这些宏定义可以在signal h中找到 例如其中有定 义 define SIGINT 2 查看信号的机制 如默认处理动作man 7 signal SIGINT的默认处理动作
  • c++自定义类型和预处理

    struct 内部初始化变量时 不能用 struct data int x 12 float f 122 5f int pi x data da cout lt lt da f lt lt endl data dap new data 使用
  • 配置 nginx 遇到错误排查(初级)

    系统版本 ubuntu 14 04 nginx 版本 nginx 1 4 6 Ubuntu 本文不是一步步搭建 nginx 的过程 而是我在使用 nginx 的过程中 整理自己遇到的的一些问题 适用于 nginx 遇到问题 排查问题的 ch
  • Neo4J 初次启动与密码

    初次安装成功Neo4J在安装的文件中会有一个bin文件夹 powershell进入bin文件夹执行 neo4j sonsole会有以下结果 D neo4j bin gt neo4j console 2020 09 04 00 57 31 0
  • Python基于PyTorch实现卷积神经网络分类模型(CNN分类算法)项目实战

    说明 这是一个机器学习实战项目 附带数据 代码 文档 视频讲解 如需数据 代码 文档 视频讲解可以直接到文章最后获取 1 项目背景 卷积神经网络 简称为卷积网络 与普通神经网络的区别是它的卷积层内的神经元只覆盖输入特征局部范围的单元 具有稀
  • oracle 9i在线重定义,在oracle 9i下在线重定义表

    9i提供了联机重定义表的方法 可以让你在基本不影响原表的DML情况下修改表结构 实际上 联机重定义表并不是完全的联机重定义 在最后交换表名的时候会短暂地锁定原表和中间表 但这个过程很短暂 相对于传统方法来说 这是一个进步 9i提供了联机重定
  • CNN、BiGRU、BiLSTM代码

    toxicCommentsclassification BiLSTMAttentionNetwork py at master AmritSatpathy toxicCommentsclassification GitHubtoxic co
  • BlueStore 架构及原理分析

    BlueStore 架构及原理分析 Ceph 底层存储引擎经过了数次变迁 目前最常用的是 BlueStore 在 Jewel 版本中引入 用来取代 FileStore 与 FileStore 相比 Bluesore 越过本地文件系统 直接操
  • 算法训练营第四十一天(9.2)

    Leecode 1143 最长公共子序列 题目地址 力扣 LeetCode 官网 全球极客挚爱的技术成长平台 题目类型 最长子序列 class Solution public int longestCommonSubsequence str
  • cython代码编译和setup.py文件编写

    Cython 官方文档 https cython readthedocs io en latest 中文文档 https www bookstack cn read cython doc zh https cython apachecn o
  • visjs DataSet支持的数据类型和选择

    数据类型 DataSet 支持以下数据类型 Name Description Examples Boolean A JavaScript Boolean true false Number A JavaScript Number 32 2
  • MFC的ActiveX控件 - 1

    转自 https blog csdn net babykangaroo article details 45795079 本文是入门学习ActiveX的学习笔记 属于系统学习整个框架部分 具体细节自己写代码时再深入 学习参考书籍是 MFC
  • 找环

    文章目录 找环 1 算法分析 1 1 判断是否存在环 1 2 找出所有环上的所有点 1 3 类拓扑排序找出与度数有关的点集 gt 退化到度数为2的环 1 4 找到以s为源点的最小环 1 5 floyd找到有向图 无向图的最小环 2 模板 2

随机推荐

  • 神秘时代服务器信息没汉化,[聊天

    Server thread ERROR Could not load plugins Msgreplace1 0 jar in folder plugins org bukkit plugin InvalidPluginException
  • Qt界面小技巧之设置不同模块不同颜色

    文章目录 一 效果图 二 使用场景 三 使用方法及分析 3 1 步骤 3 2 分析 总结 一 效果图 下图为不同模块不同颜色的效果图 下方每一个字符都是独立的QLabel控件 模块对应的颜色码 1 rgb 170 85 255 2 rgb
  • 日志异常检测初步实践与探索

    1 背景 日志的主要目的是记录系统 包括服务和业务等 状态和重要的事件帮助定位系统的问题 日志对于理解系统状态和定位性能问题至关重要 因此 日志是在线监控和异常检测的一个重要信息源 在很多业务和服务的故障自愈过程中 日志异常检测与根因分析是
  • 人工智能3d建模算法_从2D到3D的跨越,康云全球首创“人工智能AI+3D自动化建模与展示技术”...

    康云 人工智能AI 3D自动化建模与展示技术 第八届中国创新创业大赛 广东赛区 暨第七届 珠江天使杯 科技创新创业大赛 获奖项目巡礼系列报道八 你还在使用传统的3D建模技术 传统3D建模 模型制作成本高耗时耗力 模型体积大不方便传输 传播
  • 【DirectX12】3.配置FBX_SDK

    配置FBX SDK 1 介绍 FBX格式是现在最主流的用于游戏的3D模型格式 要使用DirectX12绘制模型 当然需要先用这个库来解析模型数据 它的版权协议如下 不是开源的并且是非商用的 假设你完成了一个引擎到时候还需要联系他们讨论版权的
  • 巨头的联盟链选择

    FISCO BCOS是完全开源的联盟区块链底层技术平台 由金融区块链合作联盟 深圳 简称金链盟 成立开源工作组通力打造 开源工作组成员包括博彦科技 华为 深证通 神州数码 四方精创 腾讯 微众银行 亦笔科技和越秀金科等金链盟成员机构 代码仓
  • leetcode-每日一题2022.4.16 最大回文数乘积

    题目 力扣 思路 一个n位数的范围在10 n 1 到10 n 1之间 两个n位数的乘积的位数是2n或2n 1位 除了n 1以外 最大回文整数的位数都是2n位 从大到小枚举每一个可能的回文整数 判断它是否能用两个n位数的乘积来表示 回文整数可
  • ESP32开发-HTTP POST请求发送图片

    HTTP POST请求发送图片 ESP32中有HTTP相关的请求demo 但是demo中只是简单的HTTP header加上body 如果服务器对POST请求有要求 比如数据以key value的形式传输 那么服务器会无法正常处理请求 从而
  • 在 Linux 系统中查找 MAC 地址的方法

    参考文章 多种方法在Linux上找到MAC地址 引言 MAC Media Access Control 地址是网络设备 如网卡 的唯一标识符 用于在局域网中进行通信 在 Linux 系统中 有几种方法可以查找设备的 MAC 地址 在本文中
  • 线性代数(六)——二次型

    文章目录 前言 二次型是什么 二次型的表示 合同矩阵与合同二次型 正定二次型 正定矩阵 二次型的题型 前言 一直对二次型和线性代数的关系不解 导致一系列的知识点因为没有理解而常常忘记 在这里对二次型进行梳理 希望可以加深对二次型的印象 二次
  • 【软件测试】POST请求包含哪些参数

    POST请求包含哪些参数 HTTP 协议是以 ASCII 码传输 建立在 TCP IP 协议之上的应用层规范 规范把 HTTP 请求分为三个部分 请求行 状态行 URL 请求头 Headers 请求体 消息主体 Body 协议规定 POST
  • 容器编排学习(一)容器技术

    一 容器 1 Linux 容器的起源 容器的起源可以追溯到1979年 UNIX 系统中提供的chroot命令 容器的最初的设计目标是为了隔离计算机中的各类资源以便降低软件开发 测试阶段的风险 或者充当蜜罐 吸引黑客的攻击 以便监视黑客的行为
  • 计算机组成原理笔记

    CPU的功能和结构 运算器 对数据进行加工 算术逻辑单元ALU 暂存寄存器 通用寄存器 累加寄存器ACC 程序状态字寄存器PSW 移位器 计数器 控制器 取指令 分析指令 执行指令 中断处理 程序计数器PC 指令寄存器IR 指令译码器 时序
  • 第53步 深度学习图像识别:Bottleneck Transformer建模(Pytorch)

    基于WIN10的64位系统演示 一 写在前面 1 Bottleneck Transformer Bottleneck Transformer 简称 BotNet 是一种深度学习模型 在2021年由Google的研究人员在论文 Bottlen
  • 【Mysql】数据库第三讲(表的约束、基本查询语句)

    表的约束和基本查询 1 表的约束 1 1 空属性 1 2默认值 1 3列描述 1 4 zerofill 1 5主键 1 6 自增长 1 7 唯一键 1 8外键 1 表的约束 真正约束字段的是数据类型 但是数据类型约束很单一 需要有一些额外的
  • 腾讯应用宝米大师直购模式支付流程以及服务端php回调校验

    一 米大师简介 1 米大师 Midas 为腾讯官方唯一虚拟支付平台 2 YSDK已经内置了米大师 Midas 支付模块 游戏开发者接入YSDK后 可以通过相应的配置开启米大师的支付功能 并调用YSDK已经封装好的接口 即可快速实现支付能力
  • windows 10 下安装labelme出错

    请大件帮我看看问题在哪 谢了
  • MongoDB的身份验证

    1 当开启了安全检查之后 只有通过身份认证的用户才能进行数据的读写操作 2 admin和local是两个特殊的数据库 它们当中的用户可对任何数据库进行操作 3 经认证后 管理员用户可对任何数据库进行读写操作 同时能执行只有管理员才能执行的命
  • 关于进制(十进制,二进制,八进制,十六进制)

    进制 十进制 在日常生活中使用 满10进1 计数 0 1 2 3 4 5 6 7 8 9 10 11 12 18 19 20 单位数字有10个 0 9 二进制 满2进1 计数 0 1 10 11 100 101 110 111 单位数字有2
  • 新版来啦|ShardingSphere 5.4.0 重磅发布

    Apache ShardingSphere 本周迎来了 5 4 0 版本的发布 该版本历时两个月 共合并了来自全球的团队和个人累计 1271 个 PR 新版本在功能 性能 测试 文档 示例等方面都进行了大量的优化 本次更新包含了不少能够提升
Powered by Hwhale