写点什么

当当开源 sharding-jdbc,轻量级数据库分库分表中间件

  • 2016-01-25
  • 本文字数:964 字

    阅读完需:约 3 分钟

近期,当当开源了数据库分库分表中间件 sharding-jdbc

Sharding-JDBC 是当当应用框架 ddframe 中,从关系型数据库模块 dd-rdb 中分离出来的数据库水平分片框架,实现透明化数据库分库分表访问。Sharding-JDBC 是继 dubbox 和 elastic-job 之后,ddframe 系列开源的第 3 个项目。
Sharding-JDBC 直接封装 JDBC 协议,可以理解为增强版的 JDBC 驱动,旧代码迁移成本几乎为零。
Sharding-JDBC 定位为轻量级 java 框架,使用客户端直连数据库,以 jar 包形式提供服务,无 proxy 代理层,无需额外部署,无其他依赖,DBA 也无需改变原有的运维方式。

主要包括以下特点:

  1. 可适用于任何基于 java 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC。
  2. 可基于任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid 等。
  3. 理论上可支持任意实现 JDBC 规范的数据库。虽然目前仅支持 MySQL,但已有支持 Oracle,SQLServer 等数据库的计划。
  4. 分片策略灵活,可支持等号,between,in 等多维度分片,也可支持多分片键。
  5. SQL 解析功能完善,支持聚合,分组,排序,limit,or 等查询,并支持 Binding Table 以及笛卡尔积表查询。
  6. 性能高。单库查询 QPS 为原生 JDBC 的 99.8%;双库查询 QPS 比单库增加 94%。

架构图

与常见开源产品对比
这里仅列出目前停止更新,但仍然在数据库分片领域非常有影响力的几个项目。

功能 Cobar Cobar-client TDDL Sharding-JDBC 分库 有 有 未开源 有 分表 无 无 未开源 有 中间层 是 否 否 否 ORM 支持 任意 仅 MyBatis 任意 任意 数据库支持 仅 MySQL 任意 任意 任意 异构语言 可 仅 Java 仅 Java 仅 Java 外部依赖 无 无 Diamond 无 Sharding-JDBC 严格遵循 Apache 2.0 许可证的要求。测试覆盖率 95%,目前已部署至 maven 中央仓库。可使用以下坐标引用:

复制代码
<groupId>com.dangdang</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>1.0.0</version>

Sharding-JDBC 将保持持续更新,后续会完善读写分离、柔性分布式事务和高可用等相关功能。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2016-01-25 18:0030589
用户头像

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

关注

评论

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

ITerm2 + Oh my ZSH + Powerlevel10k

JDoe

配置

从技术层面理解对于区块链技术的10.24集体学习讲话

Tux Hu

区块链 智能合约 以太坊 加密货币 去中心化网络

每个人都应该知道的性能参数

ElvinYang

也谈程序员的核心竞争力

我心依然

学习 程序员 竞争力 独立思考 清晰表达

错过了初恋,别错过WebFlux

稻草鸟人

stream Spring5 WebFlux Reactive

接口限流算法有哪些,看完这篇又能和面试官互扯了~

不才陈某

Java 分布式 后端

Git clone过慢问题

JDoe

git

你的团队属于部落的哪个阶段?

Yanel 说敏捷产品

敏捷 敏捷开发 敏捷精髓

认识数据产品经理(二 数据产品经理的稀缺性)

马踏飞机747

大数据 互联网 数据分析 产品经理

如何高效阅读

ElvinYang

Python程序性能分析和火焰图

ElvinYang

游戏夜读 | 如何制作互动剧?

game1night

功不唐捐

Janenesome

读书笔记 思考 坚持

危机过后,「表格文档协同」需要具备什么能力?

葡萄城技术团队

大前端 开发者工具 Excel

Linux学习-2020.05.11

Flychen

DDD 实践手册(6. Bounded Context - 限界上下文)

Joshua

企业架构 设计模式 领域驱动设计 DDD 架构模式

工具集系列|值得收藏的几个免费在线学习国外网站

一尘观世界

学习 工具 网站 提升

Java 为什么需要包装类

Rayjun

Java

带你吃透原型设计

Yanel 说敏捷产品

产品 产品经理 产品设计 产品开发 产品推荐

如何让团队产生“多米诺骨牌”效应?

Yanel 说敏捷产品

项目管理 敏捷 敏捷开发 敏捷精髓

回"疫"录(12):一“罩”难求

小天同学

疫情 回忆录 现实纪录 纪实

良好的工作习惯——及时存档、备份

小匚

工作效率

NIO 看破也说破(三)—— 不同的IO模型

小眼睛聊技术

Java 学习 深度思考 程序员 架构

追光逐影:读《我们这一代》

北风

ShedLock:一个轻量级的定时任务协调组件

kk

定时任务 shedlock

用Go替代Python在生产环境中进行数据分析

良少

人工智能 大数据 数据分析 pandas Go 语言

医院陪护5天的四点感受

赵新龙

身心健康 医院

Try-Catch包裹的代码异常后,竟然导致了产线事务回滚!

牧码哥

Java spring 事务

你真的懂"看板文化"么?

Yanel 说敏捷产品

敏捷 敏捷开发 敏捷精髓

目光聚集之处,金钱必将追随

Tom

学习 个人成长 思考 读书

【解析+示例】2种方法,通过SpreadJS在前端实现甘特图

葡萄城技术团队

大前端 甘特图 SpreadJS 表格控件

当当开源sharding-jdbc,轻量级数据库分库分表中间件_语言 & 开发_张亮_InfoQ精选文章