在 Apache ShardingSphere 5.1.1 发布后,ShardingSphere 合并了来自全球的团队或个人的累计 1028 个 PR,为大家带来 5.1.2 新版本。该版本在功能、性能、测试、文档、示例等方面均有不少优化。
值得一提的是,本次更新带来了以下全新功能:
ShardingSphere-Proxy Helm Chart
SQL 方言翻译
以 Driver 形式使用 ShardingSphere-JDBC
这些全新的能力让 ShardingSphere 的数据网关能力得到了质的提升,助力 ShardingSphere 在云上部署,优化用户体验。
除了上述新功能,本次更新大量提升了 SQL 解析支持度,内核、运行模式、弹性伸缩都完善了对 PostgreSQL / openGauss schema 的支持,弹性伸缩、事务、DistSQL 在健壮性与用户体验方面也有不少提升。
本篇将给大家介绍 ShardingSphere 5.1.2 版本更新内容。
ShardingSphere-Proxy 提供了 Docker 镜像以便于用户容器化部署。不过,对于需要在 Kubernetes 部署 ShardingSphere-Proxy 的用户,还需要自行处理数据库驱动挂载、配置挂载、自定义算法挂载等必要步骤,部署过程相对繁琐,运维成本相对较高。
ShardingSphere 本次更新带来了全新的 ShardingSphere-Proxy Helm Chart。这项新功能由企业级、云原生数据增强计算产品及解决方案提供商 SphereEx 向 Apache ShardingSphere 社区捐赠,推动 Apache ShardingSphere 在云原生方向前进。
ShardingSphere 在集群模式下依赖注册中心存储元数据,ShardingSphere-Proxy 的 Helm Chart 能够自动部署 ZooKeeper 集群,帮助用户快速搭建 ShardingSphere-Proxy 集群。
受限于开源协议,ShardingSphere-Proxy 的二进制发布包、Docker 镜像受限于开源协议,无法打包 MySQL JDBC 驱动,用户需要手动添加 MySQL JDBC 驱动到 classpath 才能使用 MySQL 作为 ShardingSphere 的存储节点。对于这类情况,ShardingSphere-Proxy Helm Chart 能够在 Pod 的 Init 容器自动获取 MySQL JDBC 驱动,降低了用户的部署操作成本。
随着数据库碎片化趋势的不可逆转,多种类型数据库的共存已渐成常态。使用一种 SQL 方言访问异构数据库的场景在不断增加。
多样化的数据库的存在,使访问数据库的 SQL 方言难于标准化,工程师需要针对不同种类的数据库使用不同的方言,缺乏统一化的查询平台。
将不同类型的数据库方言自动翻译为后端数据库所使用的方言,让工程师可以使用任意一种数据库方言访问所有的后端异构数据库,可以极大地降低开发和维护成本。
Apache ShardingSphere 5.1.2 在打造极具生产力的数据网关的路途中迈出了重要的一步。本次更新带来了全新的 SQL 方言翻译能力,能够支持主流开源数据库之间的方言转换。例如,用户可以使用 MySQL 客户端连接 ShardingSphere-Proxy 并发送基于 MySQL 方言的 SQL,ShardingSphere 能自动识别用户协议与存储节点类型,自动完成 SQL 方言转换,访问 PostgreSQL 等异构存储节点,反之亦然。
在过去的 ShardingSphere 版本中,ShardingSphere-JDBC 以 DataSource 的形式向用户提供服务。对于不使用 DataSource 的项目或工具,需要进行改造才能引入 ShardingSphere-JDBC,增加了用户的使用成本。
在 Apache ShardingSphere 5.1.2 中,ShardingSphere-JDBC 实现了标准的 JDBC Driver 接口,用户可以通过 Driver 的形式引入 ShardingSphere-JDBC。
用户可以直接通过 DriverManager 获取 Connection:
Class.forName("org.apache.shardingsphere.driver.ShardingSphereDriver");
Connection conn = DriverManager.getConnection("jdbc:shardingsphere:classpath:config.yaml");
也可以使用 DataSource 获取 Connection:
// 以 HikariCP 为例
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName("org.apache.shardingsphere.driver.ShardingSphereDriver");
dataSource.setJdbcUrl("jdbc:shardingsphere:classpath:config.yaml");
Connection conn = dataSource.getConnection();
本次更新,ShardingSphere 合并了大量提升 SQL 解析支持度的 PR,在更新日志中可见 SQL 解析的优化项占了较大篇幅。
ShardingSphere 在 5.1.1 对 PostgreSQL / openGauss 的 schema 提供了初步支持,在本次 5.1.2 更新,内核、集群模式、弹性伸缩对 PostgreSQL / openGauss 的 schema 的支持度也有所提升,例如元数据对增加了对 schema 结构的支持,内核、弹性伸缩支持自定义 schema。
随着使用 ARM 架构 CPU 的服务器市场渐成气候,ShardingSphere-Proxy 在 Docker 方面也提供了适用于 arm64 架构的镜像。
在 MySQL 方面,ShardingSphere-Proxy 修复了无法接收长度超过 8 MB 数据包的问题,并支持接收总长度超过 16 MB 的数据。
弹性伸缩在除了支持 PostgreSQL 自定义 schema 外,也实现了迁移 PostgreSQL 时自动建表的功能,并修复了 PostgreSQL 增量迁移遇到 null
字段值会报错的问题。除功能方面,弹性伸缩还减少了迁移过程中的资源占用,以及对 openGauss 3.0 增量迁移提供了支持。
欢迎大家使用或升级 ShardingSphere 5.1.2,ShardingSphere 社区期待您的反馈!
以下为 ShardingSphere 5.1.2 的全部更新日志。需要注意的是,本次更新调整了少量 API,调整项请参考本文更新日志的 API 调整部分。
内核:支持 MySQL 和 PostgreSQL 的 SQL 方言转换的 alpha 版本
内核:支持 PostgreSQL 和 openGauss 自定义 schema
内核:支持 PostgreSQL 和 openGauss create/alter/drop view 语句
内核:支持 openGauss cursor 语句
内核:支持使用自定义系统库
内核:支持获取 openGauss 和 MySQL 的创建表语句
内核:支持获取 PostgreSQL 的创建表语句
接入端:正式支持使用 Helm 在 Kubernetes 中快速部署一个包含 ZooKeeper 集群的 ShardingSphere-Proxy 集群
接入端:支持 ShardingSphere JDBC Driver
弹性伸缩:支持 PostgreSQL 自动建表
弹性伸缩:支持 PostgreSQL 和 openGauss 自定义 schema 的表迁移
弹性伸缩:支持字符串主键表迁移
运行模式:治理中心支持 PG/openGauss 三级结构
运行模式:治理中心支持 Database 级别的分布式锁
内核:支持 PostgreSQL 和 openGauss copy 语句
内核:支持 PostgreSQL 的 alter/ drop index 语句
内核:支持 MySQL update force index 语句
内核:支持 openGauss create/alter/drop schema 语句
内核:优化 RoundRobinReplicaLoadBalanceAlgorithm 和 RoundRobinTrafficLoadBalanceAlgorithm 算法逻辑
内核:优化在前端驱动数据库类型和后端不一致时元数据加载逻辑
内核:重构元数据加载逻辑
内核:show processlist 语句功能性能优化
内核:提升大量表场景下的加载性能
内核:支持 comment 语句的执行
内核:支持 PostgreSQL 和 openGauss 分片场景下的 view 语句的执行
内核:支持 ORACLE 的 CREATE ROLLBACK SEGMENT 语句
内核:支持解析 openGauss DROP TYPE
内核:支持解析 openGauss ALTER TYPE
内核:支持解析 Oracle DROP DISKGROUP
内核:支持解析 Oracle CREATE DISKGROUP
内核:支持解析 Oracle DROP FLASHBACK ARCHIVE
内核:支持解析 openGauss CHECKPOINT
内核:支持解析 Oracle CREATE FLASHBACK ARCHIVE
内核:支持解析 PostgreSQL Close
内核:支持解析 openGauss DROP CAST
内核:支持解析 openGauss CREATE CAST
内核:支持解析 Oracle CREATE CONTROL FILE
内核:支持解析 openGauss DROP DIRECTORY
内核:支持解析 openGauss ALTER DIRECTORY
内核:支持解析 openGauss CREATE DIRECTORY
内核:支持解析 PostgreSQL Checkpoint
内核:支持解析 openGauss DROP SYNONYM
内核:支持解析 openGauss CREATE SYNONYM
内核:支持解析 openGauss ALTER SYNONYM
内核:支持解析 PostgreSQL CALL Statement
内核:支持解析 Oracle CREATE PFILE
内核:支持解析 Oracle CREATE SPFILE
内核:支持解析 Oracle ALTER SEQUENCE
内核:支持解析 Oracle CREATE CONTEXT
内核:支持解析 Oracle ALTER PACKAGE
内核:支持解析 Oracle CREATE SEQUENCE
内核:支持解析 Oracle ALTER ATTRIBUTE DIMENSION
内核:支持解析 Oracle ALTER ANALYTIC VIEW
内核:使用 ShardingSphere Spi 加载 SQLVisitorFacade
内核:使用 ShardingSphere Spi 加载 DatabaseTypedSQLParserFacade
内核:支持解析 Oracle ALTER OUTLINE
内核:支持解析 Oracle DROP OUTLINE
内核:支持解析 Oracle drop edition
内核:支持解析 SQLServer WITH Common Table Expression
内核:优化 SubquerySegment 在 with 语句中的开始和结束索引
内核:重构 JoinTableSegment
内核:支持解析 Oracle DROP SYNONYM
内核:支持解析 Oracle CREATE DIRECTORY
内核:支持解析 Oracle CREATE SYNONYM
内核:支持解析 SQLServer XmlNamespaces Clause
内核:支持解析 Oracle Alter Database Dictionary
内核:支持解析 SQLServer Clause of SELECT Statement
内核:支持解析 Oracle ALTER DATABASE LINK
内核:支持解析 Oracle CREATE EDITION
内核:支持解析 Oracle ALTER TRIGGER
内核:支持解析 SQLServer REVERT Statement
内核:支持解析 PostgreSQL DROP TEXT SEARCH
内核:支持解析 PostgreSQL drop server
内核:支持解析 Oracle ALTER VIEW
内核:支持解析 PostgreSQL drop access method
内核:支持解析 PostgreSQL DROP ROUTINE
内核:支持解析 SQLServer DROP USER
内核:支持解析 Oracle DROP TRIGGER
内核:支持解析 PostgreSQL Drop subscription
内核:支持解析 PostgreSQL drop operator class
内核:支持解析 PostgreSQL DROP PUBLICATION
内核:支持解析 Oracle DROP VIEW
内核:支持解析 PostgreSQL DROP TRIGGER
内核:支持解析 Oracle DROP DIRECTORY
内核:支持解析 PostgreSQL DROP STATISTICS
内核:支持解析 PostgreSQL drop type
内核:支持解析 PostgreSQL DROP RULE
内核:支持解析 SQLServer ALTER LOGIN
内核:支持解析 PostgreSQL DROP FOREIGN DATA WRAPPER
内核:支持解析 PostgreSQL DROP EVENT TRIGGER statement
接入端:ShardingSphere-Proxy MySQL 支持接收长度超过 16 MB 的请求数据包
接入端:ShardingSphere-Proxy 增加 SO_BACKLOG 配置项
接入端:ShardingSphere-Proxy 默认启用 SO_REUSEADDR
接入端:ShardingSphere-Proxy Docker image 增加 aarch64 支持
接入端:ShardingSphere-Proxy MySQL 支持配置默认 MySQL 版本号
接入端:ShardingSphere-Proxy PostgreSQL / openGauss 支持更多字符集
接入端:ShardingSphere-Proxy 增加默认端口配置项
弹性伸缩:openGauss 3.0 启用 thread_pool 时,Scaling 兼容 HA port 进行数据同步
弹性伸缩:优化 PipelineJobExecutor 中 Zookeeper 事件处理的逻辑,避免 zk 阻塞事件
弹性伸缩:Scaling 数据同步不区分表名大小写
弹性伸缩:改进 PostgreSQL/openGauss 复制槽清理
弹性伸缩:改进准备阶段锁保护
弹性伸缩:改进 PostgreSQL 同一记录删除后重建场景下的数据同步
弹性伸缩:Scaling 创建的数据源在底层不缓存
弹性伸缩:尽量复用数据源,减少数据库连接占用
DistSQL:REFRESH TABLE METADATA 支持指定 PostgreSQL’s schema
DistSQL:ALTER SHARDING TABLE RULE 时增加对绑定表的校验
运行模式:ShardingSphere-JDBC 支持配置数据库连接名
分布式事务:事务中禁止执行 DistSQL
分布式事务:autocommit = 0, DDL 部分 DML 会自动开启事务
内核:修复 PostgreSQL 和 openGauss show 语句解析异常
内核:修复 PostgreSQL 和 openGauss time extract function 解析异常
内核:修复 PostgreSQL 和 openGauss select mod fucntion 解析异常
内核:修复读写分离场景下多 schema join 语句的执行异常
内核:修复加密场景下执行 create schema 语句的路由异常
内核:修复 drop schema if exist 语句的异常
内核:修复执行 LAST_INSERT_ID() 路由错误
内核:修复 use database 在无数据源状态下执行异常的问题
内核:修复带有 set var 的 fucntion 创建语句
接入端:修复 ShardingSphere-Proxy PostgreSQL / openGauss Desc
ribe PreparedStatement 因字段大小写不匹配导致的空指针
接入端:修复 ShardingSphere-Proxy PostgreSQL / openGauss 执行 schema DDL 后没有返回正确 tag 的问题
弹性伸缩:修复 MySQL unsigned 类型在 Scaling 过程中出错
弹性伸缩:修复一致性检查创建数据源失败时产生连接泄漏的问题
弹性伸缩:修复 ShardingSphereDataSource 初始化忽略分片以外规则的问题
弹性伸缩:支持 job 在准备阶段被关闭
弹性伸缩:修复数据源 url 和 jdbcurl 兼容性问题
弹性伸缩:修复 openGauss 数据复制槽创建时机问题,避免可能的增量数据丢失
弹性伸缩:改进 job 状态持久化,确保特殊情况下不会被覆盖为老状态
弹性伸缩:修复 PostgreSQL 使用 TestDecoder 进行增量迁移时无法正确解析 null
DistSQL:修复单机和内存模式下,SET VARIABLE 修改不生效的问题
DistSQL:修复 SHOW INSTANCE LIST 与实际数据不一致的问题
DistSQL:修复分片规则大小写敏感的问题
运行模式:修复 Scaling 功能更改分表规则后新版本元数据丢失数据
分布式事务:修复根据 catalog 获取 indexinfo 为空问题
弹性伸缩:重构 jobConfig,方便新类型 job 复用及扩展
运行模式:优化注册中心计算节点存储结构
运行模式:使用 uuid 替代 ip@port 作为实例唯一标识
DistSQL:EXPORT SCHEMA CONFIG 调整为 EXPORT DATABASE CONFIG
DistSQL:IMPORT SCHEMA CONFIG 调整为 IMPORT DATABASE CONFIG
运行模式:调整 db-discovery 算法配置
DistSQL:SHOW SCHEMA RESOURCES 调整为 SHOW DATABASE RESOURCES
DistSQL:COUNT SCHEMA RULES 调整为 COUNT DATABASE RULES
权限:权限提供者 ALL_PRIVILEGES_PERMITTED
更新为 ALL_PERMITTED
权限:权限提供者 SCHEMA_PRIVILEGES_PERMITTED
更新为 DATABASE_PERMITTED
下载链接:
https://shardingsphere.apache.org/document/current/cn/downloads/
更新日志:
https://github.com/apache/shardingsphere/blob/master/RELEASE-NOTES.md
项目地址:
https://shardingsphere.apache.org/
此次 Apache ShardingSphere 5.1.2 版本的发布,共有 54 位 Contributor 提交了 1028 个 PR,感谢社区伙伴们的大力支持。
吴伟杰,SphereEx 基础设施研发工程师,Apache ShardingSphere PMC。专注于 Apache ShardingSphere 接入端及 ShardingSphere 子项目 ElasticJob 的研发。
欢迎点击链接,了解更多内容:
Apache ShardingSphere 官网:https://shardingsphere.apache.org/
Apache ShardingSphere GitHub 地址:https://github.com/apache/shardingsphere