写点什么

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

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

关注

评论

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

从体系建设到深化应用,中国管理会计实现十年跃迁(上)

用友智能财务

SD-WAN加速海外SaaS访问速度

Ogcloud

网络加速 SD-WAN SD-WAN组网 SDWAN SD-WAN国际专线

鸿蒙 NEXT 开发之后台任务开发服务框架学习笔记

威哥爱编程

HarmonyOS HarmonyOS框架 HarmonyOS NEXT HarmonyOS5.0

DNS DDoS攻击威胁加剧,国科云解析筑牢网络安全防线

国科云

实力认可|质变科技获2024爱分析·数据智能优秀厂商奖项

AI数据云Relyt

数据分析 数据智能 AI-ready Data Cloud 质变科技 爱分析

大规模数据分析提效|行列混存格式下的读链路优化

AI数据云Relyt

数据仓库 AI-ready 数据云

【YashanDB知识库】IMP跨网络导入慢问题

YashanDB

数据库 yashandb

【YashanDB知识库】如何处理no free block in dictionary cache

YashanDB

数据库 yashandb

极致性价比|从存算分离到Serverless,数仓要解决的关键问题

AI数据云Relyt

大数据 Serverless 数据仓库 数据湖 存算分离架构

喜讯!云起无垠荣膺信通院 2023 - 2024 年度 “铸链” 案例自主研发创新成果奖

云起无垠

【YashanDB知识库】insert语句有编码不识别字,执行卡住问题

YashanDB

数据库

《Django 5 By Example》读后感

codists

Python django

决赛预告|2024数据库编程大赛前8名入围,决赛将评选出SQL大师!

NineData

Kali Linux 2024.4 发布 - 领先的渗透测试发行版

sysin

kali Linux

李飞飞团队多模态模型统一动作与语言;OpenAI 推出电话服务,让更多人与 Chatgpt 对话丨 RTE 开发者日报

声网

1219| 清华AI助攻科研升职 | Anthropic揭示模型风险 | Genesis开源物理引擎 | 字节新视觉理解模型 | OpenAI功能革新 | 武汉大学成立AI学院 | 上海报业数字人上线

言寡意多

原生稳定|如何构建 Auto Table Service 保证高性能查询

AI数据云Relyt

数据库 大数据 数据仓库 数据湖

天谋科技时序数据库 IoTDB 入选工信部中国电子信息行业联合会优秀创新软件产品推广目录

Apache IoTDB

【杂谈】服务端能同时处理多少个 Socket 连接?背后的资源与限制分析

不在线第一只蜗牛

网络 服务器

为什么技术高管汇报一定要用数据说话?

思码逸研发效能

程序员 研发效能 IT管理 研发效能度量 管理技术团队

AutoMQ 流表一体新特性 Table Topic 发布: 无缝集成 AWS S3 Table 和 Iceberg

AutoMQ

kafka iceberg 3S reinvent

一文彻底弄懂MySQL的各个存储引擎,InnoDB、MyISAM、Memory、CSV、Archive、Merge、Federated、NDB

快乐非自愿限量之名

MySQL 数据库

苹果M4芯片玩游戏怎么样?全新MacBook Pro 适合打游戏吗?

阿拉灯神丁

crossover pd虚拟机 MacBook Pro 苹果mac游戏 macOS 14 Sonoma

扫段攻击来袭,DDoS防御面临新挑战

网络安全服务

IP udp syn DDoS DDoS 攻击

KaiwuDB 智能综采应用项目获中国信通院数据库星河“典型案例”

KaiwuDB

数据库

【YashanDB知识库】服务器重启后Yashandb无法启动

YashanDB

数据库 yashandb

几张图带你了解.NET 8中的 String

快乐非自愿限量之名

.net

一触“伙伴+华为”体系,传媒行业点亮数智之光

脑极体

AI 传媒

【YashanDB知识库】in大量参数时查询性能慢

YashanDB

数据库 yashandb

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