【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

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

关注

评论

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

ASP.NET Core 性能优化最佳实践

newbe36524

微服务 性能优化 .net core ASP.NET Core

实践案例丨基于Raft协议的分布式数据库系统应用

华为云开发者联盟

raft 华为云

【写作群星榜】9.1~9.13写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 文章

什么是云服务器,ECS它能干什么?

德胜网络-阳

鹰眼 | 分布式日志系统上云的架构和实践

腾讯云大数据

大数据

从linux源码看epoll

无毁的湖光

Linux TCP Linux Kenel

Docker映射详解,没问题了!

程序员的时光

Docker

碰撞率下降75%!Mobileye与所托瑞安宣布双方合作重大进展

最新动态

中途转行学Java,如何赛过科班生?你只需要做到这几点

小Q

Java 程序员 架构 技术 基础

PB级大规模Elasticsearch集群运维与调优实践

腾讯云大数据

大数据

同城双活与异地多活架构分析

vivo互联网技术

架构 高可用 架构设计 高可用系统的架构

将DevOps视为哲学——实施DevOps的绝佳方式

禅道项目管理

DevOps 测试 开发 持续交付

东方证券企业架构之技术架构转型实践

BoCloud博云

云计算 容器 微服务 PaaS 博云

大项目写代码写到晕头转向?敏捷多项目框架解君愁

Learun

敏捷开发 软件开发

记一次node项目重构改进

华为云开发者联盟

Java 项目 方案

TNFE-Weekly[第七十二周已更新]

莹姐🙈

小程序 大前端 周刊

docker 安装consul

云辰

图计算黑科技:打开中文词嵌入训练实践新模式

腾讯云大数据

大数据

想学习数据结构和算法,推荐给你 10 本优质书单

沉默王二

数据结构 算法 书单推荐

一定要写点什么?!

使用Valgrind调试Linux C++程序

Simon

c++ gdb Valgrind memcheck 内存泄漏

5分钟带你掌握Makefile分析

华为云开发者联盟

makefile 脚本

Python中的with是测试常用到的资源打开利器

陈磊@Criss

看动画学算法之:排序-快速排序

程序那些事

排序 快速排序 数据结构和算法 看动画学算法

基于electron桌面级脚手架的设计

久违

设计 大前端 全栈

不想码代码,你还能做什么?(一)

研发管理Jojo

项目管理 技术管理 PMO

案例解析丨Spark Hive自定义函数应用

华为云开发者联盟

spark UDF

USDT承兑商支付系统搭建,区块链支付平台开发

java中实现List集合中对象元素按其属性的中文拼音排序

云辰

创建spring boot starter

曾彪彪

Java spring Boot Starter

程序员快乐器之JAVA代码生成工具

Philips

敏捷开发 程序设计 软件架构 开发工具

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