写点什么

分布式数据库中间件 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:337420
用户头像

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

关注

评论

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

LeetCode题解:69. x 的平方根,二分查找,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

云话题 | 第3期 你女朋友在买买买时,程序员小哥在干嘛?

阿里云Edge Plus

CDN 直播 直播带货

单例模式原来是这么简单?!

后台技术汇

28天写作 2月春节不断更

面试杀手锏!2021最新Android常用开源库总结,Android校招面试指南

欢喜学安卓

android 程序员 面试 移动开发

Elasticsearch 从 0 到千万级数据查询实践

📿

Java spring elasticsearch Spring Cloud spring data

CodeDay#5 全程回顾——一场关于动态化开发实践的技术探讨

蚂蚁集团移动开发平台 mPaaS

mPaaS Codeday 技术沙龙

疫情又反扑,除了不乱跑,我们还能干点啥?

数据君

如何避免让微服务测试成为研发团队最大的瓶颈?

阿里巴巴中间件

领域的边界,一个小讨论

李小腾

领域驱动设计 DDD

最基础的3道java面试题,你真的答得上来吗

田维常

面试

字节面试太刁钻了:不加机器,怎么提升系统并发100倍

Java架构师迁哥

new的过程是怎样的?看完这一篇就懂了

codevald

Java JVM原理 面向对象编程 类对象

【内含福利】流行在CDN圈内的黑话有哪些?

阿里云Edge Plus

CDN

Linux-Lab 入门:体验

贾献华

Docker Linux 嵌入式 内核 Lab

勿让 Docker Volume 引发 Terminating Pod

黄久远

Docker 云计算 Kubernetes 容器 云原生

面试看这个就够了!6年菜鸟开发面试字节跳动安卓研发岗,学习路线+知识点梳理

欢喜学安卓

android 程序员 面试 移动开发

2020-21《全球质量报告》解读

BY林子

质量保障 质量赋能 敏捷测试

软件架构模式之事件驱动架构

架构精进之路

软件架构 七日更 28天写作 2月春节不断更

疫情成本遭不住?一招降本85%,架构特性全部公开!

数据君

DIY一款能随周围环境变化的智能灯泡,求婚必备!

IoT云工坊

人工智能 物联网 人脸识别 sdk IoT App

点赞系统软件开发

luluhulian

滴滴 Flink-1.10 升级之路

Apache Flink

flink

话题讨论 | 你现在还会推荐亲朋做程序员吗?

石云升

话题讨论 2月春节不断更

MySQL字段类型最全解析

Simon

MySQL 数据库数据类型

第三周

ALone

2020已过,2021来临,iOS 开发市场如何?一切都是未知!【未来可期】

ios 程序员

List去除重复数据的五种方式

xcbeyond

Java ArrayList 28天写作

运动健身市场越来越大,你的客户却越来越少?

IoT云工坊

人工智能 App 物联网 健身房 智能健身房

k8s-client-go源码剖析(三)

远鹏

Kubernetes Kubernetes源码 Go 语言

GraphX 在图数据库 Nebula Graph 的图计算实践

NebulaGraph

图数据库 图数据库实战

这只猫在云端定居了?边缘计算在天猫精灵云应用上的落地实践

阿里云Edge Plus

CDN IoT 边缘计算 云桌面

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