终于可以一行代码也不用改了!ShardingSphere 原生驱动问世
一、背景
ShardingSphereDataSourceFactory 是 Apache ShardingSphere-JDBC 端的最基础用户 API,它用于将用户的规则配置对象进行转化,并生成为标准 DataSource 的实现。除此之外,它还提供了用于 YAML 配置的 YamlShardingSphereDataSourceFactory,以及用于 Spring 的自定义命名空间和 Spring Boot Starter。
DataSource 是标准的 Java JDBC 接口,工程师可以通过它进一步创建符合 JDBC 标准的 Connection、Statement、PreparedStatement、ResultSet 等耳熟能详的标准对象。完全符合 JDBC 接口的实现,让工程师使用 Apache ShardingSphere-JDBC 与使用原生的 JDBC 没有区别,也可以透明化的对接各种 ORM 框架。
二、痛点
虽然标准的 JDBC 接口,可以在开发过程中完全适配,但通过 ShardingSphere API 创建 DataSource,却改变了工程师的原有的数据库驱动加载方式。虽然只需要修改少量(一行)的启动代码,但是对于希望平滑迁移至 ShardingSphere 的系统来说,切实地增加了额外的开发成本;且对于无法掌握源码的系统(如:外采系统)来说,使用 ShardingSphere 则困难重重。
一直以来,ShardingSphere 都缺乏 JDBC 驱动的实现,这主要受限于它的设计初衷。通过 Java 配置的 ShardingSphere-JDBC 可以将灵活度提升到可编程级别,但 JDBC 的 Driver 接口则并未提供太多可额外配置的空间,仅通过 URL 和 Properties,会大幅限制 ShardingSphere 的配置灵活度。YAML 配置虽然可以和 Driver 的 URL 更好的适配,且可读性更强,但属于静态配置的范畴,与动态配置的灵活度相比,则明显不足。因此,ShardingSphere-JDBC 采用数据库连接池的相似策略,绕过了 JDBC 标准接口的限制,直接将 DataSource 暴露给用户。
然而,改动一行代码和一行代码都不改动是不可逾越的天堑,这也成为了 ShardingSphere-JDBC 易用性的最大痛点。
三、契机
随着 ShardingSphere 的另一款产品 —— ShardingSphere-Proxy 的逐渐成熟,它的两个重要的生态类功能——混合部署和 DistSQL 应运而生。
ShardingSphere-JDBC 的轻量级和高性能的特性,使其更加适合于面向应用运行时的 CRUD 操作;ShardingSphere-Proxy 的易用性和兼容性,则使其更加适合于面向数据库管控的 DDL 操作。两个产品共同使用,互相取长补短,成为了更加完善的新一代架构方案。
兼具编程和 SQL 展现力的 DistSQL,在灵活性和易用性之间取得了完美的平衡。因此,在 ShardingSphere-JDBC 的配置属性大幅降低的架构模型中,使用 JDBC 的 URL 连接治理中心,并采用 DistSQL 进行配置操作,是最佳的解决方案。DistSQL 的安全性,是 Java 和 YAML 的配置方式所不具备的,它天然支持权限控制和 SQL 审计等高阶能力,让 DBA 运维数据库集群更加得心应手。
四、实现
在前提条件一一达成之后,ShardingSphere-JDBC 5.1.2 版本顺势而为,提供了 JDBC 驱动。它可以仅通过配置变更即可使用,工程师再也无需修改代码。
驱动类名称
org.apache.shardingsphere.driver.ShardingSphereDriver
URL 配置说明
-
以
jdbc:shardingsphere
: 为前缀 -
配置文件:
xxx.yaml
,配置文件格式与 YAML 配置一致 -
配置文件加载规则:
-
无前缀表示从绝对路径加载配置文件
-
classpath: 前缀表示从类路径中加载配置文件
-
五、使用步骤
使用原生驱动
Class.forName("org.apache.shardingsphere.driver.ShardingSphereDriver"); String jdbcUrl = "jdbc:shardingsphere:classpath:config.yaml"; String sql = "SELECT i.* FROM t_order o JOIN t_order_item i ON o.order_id=i.order_id WHERE o.user_id=? AND o.order_id=?"; try ( Connection conn = DriverManager.getConnection(jdbcUrl); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setInt(1, 10); ps.setInt(2, 1000); try (ResultSet rs = preparedStatement.executeQuery()) { while(rs.next()) { // ... } } }
使用数据库连接池
String driverClassName = "org.apache.shardingsphere.driver.ShardingSphereDriver"; String jdbcUrl = "jdbc:shardingsphere:classpath:config.yaml";// 以 HikariCP 为例 HikariDataSource dataSource = new HikariDataSource(); dataSource.setDriverClassName(driverClassName); dataSource.setJdbcUrl(jdbcUrl); String sql = "SELECT i.* FROM t_order o JOIN t_order_item i ON o.order_id=i.order_id WHERE o.user_id=? AND o.order_id=?"; try ( Connection conn = dataSource.getConnection(); PreparedStatement ps = conn.prepareStatement(sql)) { ps.setInt(1, 10); ps.setInt(2, 1000); try (ResultSet rs = preparedStatement.executeQuery()) { while(rs.next()) { // ... } } }
参考信息
- JDBC 驱动
https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/jdbc-driver/
六、结语
ShardingSphere-JDBC 驱动的出现,使 ShardingSphere 的易用性获得了前所未有的加强。在未来规划中,JDBC 驱动可以进一步简化,直接在 URL 中提供治理中心地址即可。Apache ShardingSphere 已大踏步向多元化的分布式集群迈进。新时代已经到来,快来体验一下 ShardingSphere 的新版本的强大功能吧!
以上就是本次分享的全部内容,如果有对 Apache ShardingSphere 有任何疑问或建议,欢迎在 GitHub issue 列表提出,或可前往中文社区交流讨论。
GitHub issue:
https://github.com/apache/shardingsphere/issues
贡献指南:
https://shardingsphere.apache.org/community/cn/contribute/
中文社区:
https://community.sphere-ex.com/
Apache ShardingSphere 官网:
https://shardingsphere.apache.org/
SphereEx 官网:
作者
张亮,SphereEx CEO,Apache ShardingSphere PMC Chair。主要负责 ShardingSphere 架构演进和技术难点攻克。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
视频化全链路智能上云?一文详解什么是阿里云视频云「智能媒体生产」
视频化链路在革新 人工向智能、小众向大众 标准向定制、慢钝向实时 视频创作与传播的全流程在革新。 对于视频的生产与消费,其全链路包含采集、制作、管理、分发、消费五个阶段,而云计算和网络的发展,为每个环节都带来巨大的势能变化。 例如: 采集阶段,以往需要使用专业的摄像设备进行拍摄,现在仅一台移动端设备即可完成高品质拍摄。 生产制作阶段,以往需要用专业的非线性编辑软件来制作,而现在以云剪辑服务工具即可实现在线全端剪辑。 在分发传播阶段,以往的新闻传媒需要经历长时间的“采编播”过程,而如今的云上实时将制播一体化,以实时的效能让观众以第一时间如临第一现场,并可通过直播带来丰富的实时互动体验。 从中可见一斑,视频化链路的发展正在从人工编排到智能处理、从专业小众到普惠全众、从标准化单向传递到实时个性化双向互动。 在这个一切皆可视频化的“超视频化”时代,我们希望通过“云”的能量打破原有壁垒,推动演进的发生,利用媒体生产制作的云端一体服务,为整个泛视频产业带来新的变革,而「智能媒体生产」就是聚焦这一领域的企业级视频制作工具。 「智能媒体生产」定位于一款基于云端协作,来实现批量视频高效制作的企业级工具,...
- 下一篇
企业实战|复杂业务关系下的银行业运维指标体系建设
背景 银行 IT 系统在云化、容器化、中心化、微服务等架构迭代演化进程中,系统架构和业务调用关系复杂,运维管理难度日益凸显。银行业务系统多采取烟囱式建设方法,数据互通困难,运维团队无法做到及时响应、及时发现并解决问题。目前,银行业整体上已具备结合业务场景收集比较完整的 IT 指标数据的能力,亟待一套指标数据分析体系为 IT 管理与业务分析提供可量化、可视化、集约化的决策支撑。 然而,中国银行业在实践指标管理体系的过程中会遇到以下几方面的挑战: 统筹全局运维数据源的挑战 中国银行业正处于传统向互联网转型期,云计算、大数据等新兴技术也在逐步开展,而且银行业需要海量的 IT 计算力和实时的响应速度才可以满足持续推出创新业务的诉求。简言之,银行业运维数据源的数据量级在增加,而业务部门对实时处理响应时间的期望值在减短。 此外,对于单个业务部门的指标数据,可以依赖个人对业务场景的经验快速作出判断并应用于 IT 运维管理工作。但银行系统时时刻刻都会产生海量的指标数据,IT 管理人员无法判断指标数据对于业务的重要性、优先级,更无从下手梳理指标数据与业务的关联性,从而无法聚焦某个业务场景内的指标数据,导...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7