概要

ShardingSphere

Apache ShardingSphere 本周迎来了 5.4.1 版本的发布,该版本历时两个多月,累计合并了来自全球团队和个人的 967 个 PR,新版本在功能、性能、测试、文档、示例等方面都进行了大量的优化。本次更新包含了不少能够提升用户体验、解决用户痛点的内容,本文与大家一起快速预览:

加密:加密规则除了明文列、密文列外不与逻辑列重名加密:Proxy 禁止密文列 DDL加密:衍生列格式和长度固定 varchar 4000适配:Proxy 连接池适配(druid、dbcp、c3p0)

功能预览

ShardingSphere

01加密规则除了明文列、密文列外不与逻辑列重名

背景说明

当前加密规则中未校验配置中衍生列的字段名称是否与逻辑列同名,本次新增衍生列列名校验,如果与逻辑列重名,则报错提示

技术实现

新增对 加密 Rule 的衍生列校验项,提示信息为:

assisted query column or like query column conflicts with logic column

private void checkColumnNames(final CreateEncryptRuleStatement sqlStatement) {

   for (EncryptRuleSegment each : sqlStatement.getRules()) {

       ShardingSpherePreconditions.checkState(isColumnNameNotConflicts(each),

               () -> new InvalidRuleConfigurationException("encrypt", "assisted query column or like query column conflicts with logic column"));

   }

}

private boolean isColumnNameNotConflicts(final EncryptRuleSegment rule) {

   for (EncryptColumnSegment each : rule.getColumns()) {

       if (null != each.getLikeQuery() && each.getName().equals(each.getLikeQuery().getName())) {

           return false;

       }

       if (null != each.getAssistedQuery() && each.getName().equals(each.getAssistedQuery().getName())) {

           return false;

       }

   }

   return true;

}

02  Proxy 禁止密文列 DDL

背景说明

当前配置加密规则后,未对加密表的 DDL 拦截,如果对加密列/明文列执行 DDL(如:修改字段类型、长度,甚至直接 drop 字段),可能直接影响数据写入、读取,造成故障问题等

本次新增对加密表的 ALTER 语句类型判断,放行 ALTER xxx ADD 语句,拦截 ALTER xxx CHANGE/MODIFY/DROP 语句,拦截提示信息:Unsupported operation 'xxx' for the cipher column"

技术实现

所有对加密表的 Alter 语句都需要通过 EncryptAlterTableTokenGenerator 改写生成实际执行语句,当前逻辑会对 密文列/明文列 生成语句

实现拦截需要在生成 Token 前增加判断,如果对 加密列/明文列 的操作则抛出异常

ShardingSpherePreconditions.checkState(!encryptTable.isEncryptColumn(columnName) && !encryptTable.isPlainColumn(columnName),

       () -> new UnsupportedOperationException("Unsupported operation 'modify' for the cipher column and plain column"));

03  衍生列格式和长度固定 varchar 4000

背景说明

在加密场景下,现有算法生成的密文均为字符串,但用户的逻辑列可能是数字或时间等类型,会导致生成的衍生列数据类型与逻辑列一致,即密文列、辅助查询列、模糊查询列的 data type 可能是 int、datetime 等类型,导致密文无法写入。需要为加密衍生列设置默认的文本类型

技术实现

生成的密文列、辅助查询列、模糊查询列均使用默认数据类型 VARCHAR(4000)

04  Proxy 连接池适配(druid、dbcp、c3p0)

背景说明

当前全局默认使用 Hikari 连接池,用户不能自行选择、更换连接池

技术实现

1、ConnectionConfiguration 类新增字段 dataSourceClassName

public final class ConnectionConfiguration {

   

   private final String dataSourceClassName;

   

   private final String url;

   

   private final String username;

   

   private final String password;

}

2、构建 DataSourceProperties 由固定 com.zaxxer.hikari.HikariDataSource 修改为获取 dataSourceClassName

public static DataSourceProperties create(final DataSourceConfiguration dataSourceConfig) {

   return new DataSourceProperties(dataSourceConfig.getConnection().getDataSourceClassName(), createProperties(dataSourceConfig));

}

3、实现连接池的 DataSourcePoolMetaData SPI,当前 Hikari、DBCP、C3P0 已实现

4、实现连接池 DataSourcePoolFieldMetaData、DataSourcePoolPropertiesValidator、DataSourcePoolActiveDetector

更新日志

ShardingSphere

01  新功能

Proxy 连接池适配(druid、dbcp、c3p0)Metadata: 单机模式适配新版本元数据

02  功能增强

Mode: 优化 Standalone 模式 JDBC 类型初始化数据重置Scaling: 隔离分片数据源 Standalone 模式的存储,相互不影响Scaling: 禁用 system-schema-metadata-enabled 提升性能JDBC: 把 ShardingSphereDriver 注册为 JDBC java.sql.Driver SPI,便于用户使用Scaling: SHOW MIGRATION CHECK ALGORITHMS 新增校验算法列Scaling: SHOW MIGRATION CHECK ALGORITHMS 新增 type_aliases 列加密:除了密文列外不能与逻辑列重名,增加加密规则时遇到重名时应报错加密:Proxy 禁止密文列 DDL加密:衍生列格式和长度固定 varchar 4000

03  问题修复

Scaling: 修复问题:存在相似表名的情况下断点续传可能获取到错误的全量任务进度Scaling: 修复问题:当首个全量任务完成的时候全量断点续传无法开启(CDC Importer 没有启动)Single Table: 修复 CREATE/DROP table 修改 Single 规则时未切换版本问题JDBC: 修复上一版本中 MySQL JDBC 内存泄漏问题

相关链接

ShardingSphere

 下载链接

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

社区贡献

ShardingSphere

此次 Apache ShardingSphere 5.4.1 版本的发布,共有 47 位 Contributor 提交了  967 个 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 和真正参与到社区的建设。

长按识别回复“志愿者”了解更多吧~

关于 Apache ShardingSphere

Apache ShardingSphere 是一款分布式 SQL 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强。

点击阅读原文下载体验吧~

精彩链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。