BT

您是否属于早期采用者或者创新人士?InfoQ正在努力为您设计更多新功能。了解更多

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

| 作者 张亮 关注 0 他的粉丝 发布于 2017年8月1日. 估计阅读时间: 不到一分钟 | 智能化运维、Serverless、DevOps......2017年有哪些最新运维技术趋势?CNUTCon即将为你揭秘!

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编写几行代码即可。

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

关注蛮久了 by steel steel

关注蛮久了,赞一个

还好 by 联想 联想

还好

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT