概要
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 事务和查询引擎,可通过数据分片、弹性伸缩、加密等能力对任意数据库进行增强。
点击阅读原文下载体验吧~
精彩链接
发表评论