HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

关注

评论

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

Docker与低代码跨平台开发:实现高效跨平台开发的新范式

EquatorCoco

Docker 容器 低代码

区块链钱包浏览器开发功能,价格和时间周期

区块链开发团队DappNetWork

Game-Fi 新贵 MetaArena 项目全解析:重塑区块链游戏生态

股市老人

Game-Fi 新贵 MetaArena 项目全解析:重塑区块链游戏生态

股市老人

解决Python使用GPU

快乐非自愿限量之名

Python 开发语言

利用 AI 机器学习,轻松实现化合物配比最优化解决方案

Altair RapidMiner

人工智能 机器学习 数据分析 大模型

如何用二维码进行来访登记?这个模板帮你轻松实现!

草料二维码

草料二维码 访客登记 来访登记 访客来访二维码 来访二维码

从0到100:找搭子小程序开发笔记(一)

CC同学

智谱AI CodeGeeX代码大模型获信通院最高等级,成为国内首批通过可信AI评估的企业

技术研究院

低代码开发:智能财务系统开发应用

不在线第一只蜗牛

低代码

公链开发需要多少钱?

区块链开发团队DappNetWork

时序数据库 IoTDB 构筑长安汽车海量车况数据管理新引擎,助力智能网联汽车发展

Apache IoTDB

实力认可|心大陆多智能体入围“2024DIIRC大模型十大典范案例”服务商!

心大陆多智能体

火山引擎视频云发布赛事直播方案,延时缩短至1s

新消费日报

人工智能ChatGPT的多种应用:如何更好地提问

霍格沃兹测试开发学社

QEMU X86架构机器类型之pc-i440fx-piix

Linux内核拾遗

芯片 虚拟化 qemu

软件测试学习笔记丨Vue使用axios

测试人

Vue 软件测试 自动化测试 测试开发

IPv6改造技术:隧道技术的原理和优缺点

国科云

从票务到游戏:Celestia 首届黑客松亮点项目盘点

TechubNews

Go 1.23: 新包 Iter

huizhou92

Go

领域数据视图化和无代码设计原理

XIAOJUSURVEY

前端 低代码 搭建 schema 问卷模型

中小企业转型有招,华为云618营销季步步“智”胜

YG科技

蓝易云 - Ubuntu22.04交叉编译gcc9.5 for arm

百度搜索:蓝易云

ubuntu 内存 服务器 云服务器 GCC

蓝易云 - Redisson集成SpringBoot详解

百度搜索:蓝易云

Java redis spring Spring Boot redisson

推荐十个优秀的ASP.NET Core第三方中间件,你用过几个?

不在线第一只蜗牛

asp.net 后端 中间件

2024 年 5 月区块链游戏研报:市值增长、玩家参与变迁、迷你游戏兴起

Footprint Analytics

链游

如何用Vue3构建一个交互式3D图

秃头小帅oi

德国电动汽车生产:欧洲第一,世界第二

财见

低代码开发应用:国企数字化转型的思考与探索

快乐非自愿限量之名

低代码 数字化

Golang 1.23: 新的 unique 包

huizhou92

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