写点什么

分布式数据库中间件 Sharding-JDBC 1.5.0 发布:自研 SQL 解析引擎 + 全数据库支持里程碑版本

  • 2017-07-31
  • 本文字数:1778 字

    阅读完需:约 6 分钟

Sharding-JDBC 是什么?

Sharding-JDBC 是一个开源的分布式数据库中间件。它定位为轻量级 java 框架,由客户端直连数据库,以 jar 包形式提供服务,未使用中间层,无需额外部署,无其他依赖,DBA 无需改变原有的运维方式,可理解为增强版的 JDBC 驱动,旧代码迁移成本几乎为零。

Sharding-JDBC 完整的实现了分库分表,读写分离和分布式主键功能,并初步实现了柔性事务。架构图如下:

左边部分是部署架构图,右边部分则是核心逻辑架构图。

从 2016 年开源至今,它已发布了 15 个版本,其中包含 5 个里程碑版本升级。在经历了整体架构的数次精炼以及稳定性打磨后,如今它已积累了足够的底蕴,相信可以成为开发者选择技术组件时的一个参考。

项目的开源地址:

https://github.com/dangdangdotcom/sharding-jdbc

Sharding-JDBC 的定位是什么?

Sharding-JDBC 目前精力主要集中在透明化分布式数据库这部分,经常有人问 Sharding-JDBC 和基于 Proxy 的数据库中间层有什么区别?和 NewSQL 数据库又有什么区别?

尽管部署架构不同,但当前功能上的差异确实不明显。不过结构的不同终会将它们推向不同的方向。Sharding-JDBC 与业务代码部署在一起的架构,非常适合作为微服务的数据访问层基础开发组件。Proxy 和 NewSQL 是面向运维的数据库,而 Sharding-JDBC 的定位与当当一并开源的 DubboX、Elastic-Job 一样,是面向开发的微服务基础类库,它始终以云原生的基础开发套件为目标。

Sharding-JDBC 1.5.0 版本有什么关键更新?

Sharding-JDBC 1.5.0 版本是针对 SQL 兼容性的行全面提升。它主要包含自研 SQL 解析引擎、多数据库兼容、SQL 改写优化和结果归并优化这 4 个方面主要的提升:

  1. 自研 SQL 解析引擎

SQL 解析作为分库分表类产品的核心,从 1.5.0 版本开始,Sharding-JDBC 采用完全自研的 SQL 解析引擎。由于目的不同,它并不需要将 SQL 转为 AST 语法树,也无需通过 Visitor 的方式二次遍历。它采用对 SQL“半理解”的方式,仅提炼分片需要关注的上下文,因此 SQL 解析的性能和容错性得到了进一步的提高。

  1. 多数据库兼容

Sharding-JDBC 之前仅可以支持 MySQL。1.5.0 版本开始对 Oracle、SQLServer 和 PostgreSQL 的全面支持,包括各种 SQL 方言以及分页等关键语法的兼容。由于 Oracle 与 SQLServer 的分页需要子查询支持,因此 Sharding-JDBC 也最大限度的支持了分页、COUNT 等子查询。

  1. SQL 改写优化

在 Sharding-JDBC 1.5.0 版本,SQL 改写进行了调整和大量优化。1.4.x 及之前版本,SQL 改写是在 SQL 路由之前完成的,在 1.5.x 中调整为 SQL 路由之后,因为 SQL 改写可以根据路由至单库表还是多库表而进行进一步优化。

  1. 结果归并优化

Sharding-JDBC 1.5.0 重写了结果归并模块,并且进一步的优化了分组归并。目前支持的结果归并从功能上分为遍历、排序、分组和分页 4 种类型,它们是组合而非互斥的关系。从结构划分,可分为流式归并、内存归并和装饰者归并。流式归并和内存归并是互斥的,装饰者归并可以在流式归并和内存归并之上做进一步的处理。流式归并是将数据游标与结果集的游标保持一致,顺序的从结果集中一条条的获取正确的数据。内存归并则是需要将结果集的所有数据都遍历并存储在内存中,再通过内存归并后,将内存中的数据伪装成结果集返回。

结果归并模块重写后的类图如下:

Sharding 1.5.0 版本与旧版本兼容么?

新里程碑版本做了如此大的内核修改和提升,那么从旧版本升级至新版本有哪些地方需要修改?相信很多老用户有这样的疑问。答案是:仅需要微小的改动。

Sharding-JDBC 由于扩展自 JDBC 协议,因此无迁移成本。但为了使用更加便利,在分布式主键的配置部分做了细微的调整。

Sharding-JDBC 下一步要做什么?

Sharding-JDBC 1.6.x 的目标是配置动态化和数据库治理,通过将配置存入注册中心,达到治理分库分表 + 读写分离的数据库的目的。在应用端进行数据库发现、流量疏导、故障转移、熔断等功能,向治理服务一样治理数据库。

Sharding-JDBC 将作为面向 OLTP 在线业务的分片化的数据库治理微服务基础组件积极的发展下去。

对于新手来说使用 Sharding-JDBC 很难么?

由于完全兼容 JDBC 协议,除了掌握了配置,以及了解 SQL 的不支持列表,目前并未其他使用成本。只需在 pom.xml 中引入 Elastic-Job 的 maven 坐标,并且参照在 github 上的 example 编写几行代码即可。

最后,请允许我再重复一次,** 项目的开源地址,** 欢迎使用、吐槽和提出建议。

2017-07-31 19:337370
用户头像

发布了 25 篇内容, 共 26.0 次阅读, 收获喜欢 118 次。

关注

评论

发布
暂无评论
发现更多内容

MatrixDB v4.5.0 重磅发布,全新推出 MARS2 存储引擎!

YMatrix 超融合数据库

数据库 存储引擎 超融合数据库 版本迭代 YMatrix

无代码是否能成为主流

间隔

有奖征文 | “用 TDengine,写 TDengine”,万元大奖等你来瓜分!

TDengine

tdengine TDengine征文

产品负责人 VS 产品经理

ShineScrum

产品经理 产品负责人

PCB工程师最实用的拼版案例合集请查收!

华秋PCB

PCB PCB设计 拼版

我人傻了!新入职的同事三下五除二就搭建了一个简易版秒杀系统

程序员小毕

程序员 程序人生 后端 架构师 秒杀系统

一名曾因线上P0故障导致月工资扣了10%的码农心得:如何在故障10分钟黄金时间快速排障

KINDLING

Java 运维 可观测性 线上故障 ebpf

软件测试丨只需学会Docker,环境问题再也不是测开路上的「坑」

测试人

Docker 容器 软件测试 自动化测试 测试开发

StoneDB荣获"2022年度优秀开源技术团队" : 决心做好下一代MySQL高性能分析加速器

StoneDB

MySQL 开源 HTAP 数据库· StoneDB

云计算技术是基于互联网和网络的新技术

Finovy Cloud

云服务器 云技术 云渲染

数据治理:聊聊数据血缘!

用友BIP

ubuntu18.04编译webrtc_android库

Geek_pwdeic

android WebRTC

Zebec正在以流支付的方式,推动加密支付走向主流

股市老人

QSDK/ipq5018/2T2R/Bluetooth BT5.1 supporting QCN9074/industrial wifi6 module

wallysSK

QCN9074 ipq5018

研发 Leader 怎样写出非研发也看得懂的年终总结?

思码逸研发效能

研发效能 年终总结

AI作画技术实践第二期|用腾讯云智能图片融合优化AI绘画的效果

牵着蜗牛去散步

腾讯云 腾讯 AI作画 腾讯云智能 智能内容创作

多线程安全问题原理和4种解决办法

华为云开发者联盟

开发 华为云 12 月 PK 榜

阿里面试败北:5种微服务注册中心如何选型?这几个维度告诉你!

架构师之道

微服务 java面试

公司项目终于用上了插入式注解,真香!

Java永远的神

程序员 程序人生 项目 架构师 后端开发

可以保存ins照片的软件~距离实现ins图片下载自由只差这一个步骤!

frank

ins图片下载

ROMA集成关键技术:增量数据集成

华为云开发者联盟

云计算 后端 华为云 12 月 PK 榜

行业方案 | 新规落地,企业集团财务公司如何构建数智财务体系?

袋鼠云数栈

柏睿数据完成阿里云PolarDB数据库产品生态集成认证

阿里云数据库开源

阿里云 polarDB PolarDB-X PolarDB-PG PolarDB for PostgreSQL

能让Java开发者提高效率的10个工具

千锋IT教育

2022年牛客网最新版大厂Java八股文面试题总结(覆盖所有面试题考点)

架构师之道

编程 程序员 java面试

LeaRun.net代码生成器 一键生成前后端代码

力软低代码开发平台

任务管理轻松实现大规模设备管理控制——设备管理类

阿里云AIoT

运维 监控 云安全 消息中间件 储存

Java: 在Excel中插入和提取图片

Geek_249eec

Java Excel 图片

面对复杂中国式报表,哪款BI商业智能工具适合你?

小偏执o

体验百度Java后端一面凉经,让我有了新的感悟

小小怪下士

Java 百度 程序员 面试

分布式数据库中间件Sharding-JDBC 1.5.0发布:自研SQL解析引擎+全数据库支持里程碑版本_语言 & 开发_张亮_InfoQ精选文章