TDDL 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
TDDL 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议 GPL
开发语言 Java
操作系统 跨平台
软件类型 开源软件
开发厂商 阿里巴巴
地区 国产
提 交 者 滔哥
适用人群 未知
收录时间 2014-02-24

软件简介

注意:tddl2.0是2010年的版本,已经没有人维护了。当前版本是5.1.7,网上能够找到的最新版本。项目地址为:https://www.oschina.net/p/tddl5

淘宝根据自己的业务特点开发了TDDL(Taobao Distributed Data Layer 外号:头都大了 ©_Ob)框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,具有主备,读写分离,动态数据库配置等功能。

TDDL所处的位置(tddl通用数据访问层,部署在客户端的jar包,用于将用户的SQL路由到指定的数据库中):

淘宝很早就对数据进行过分库的处理, 上层系统连接多个数据库,中间有一个叫做DBRoute的路由来对数据进行统一访问。DBRoute对数据进行多库的操作、数据的整合,让上层系统像操作 一个数据库一样操作多个库。但是随着数据量的增长,对于库表的分法有了更高的要求,例如,你的商品数据到了百亿级别的时候,任何一个库都无法存放了,于是 分成2个、4个、8个、16个、32个……直到1024个、2048个。好,分成这么多,数据能够存放了,那怎么查询它?这时候,数据查询的中间件就要能 够承担这个重任了,它对上层来说,必须像查询一个数据库一样来查询数据,还要像查询一个数据库一样快(每条查询在几毫秒内完成),TDDL就承担了这样一 个工作。在外面有些系统也用DAL(数据访问层) 这个概念来命名这个中间件。
下图展示了一个简单的分库分表数据查询策略:

主要优点:
1.数据库主备和动态切换
2.带权重的读写分离
3.单线程读重试
4.集中式数据源信息管理和动态变更
5.剥离的稳定jboss数据源
6.支持mysql和oracle数据库
7.基于jdbc规范,很容易扩展支持实现jdbc规范的数据源
8.无server,client-jar形式存在,应用直连数据库
9.读写次数,并发度流程控制,动态变更
10.可分析的日志打印,日志流控,动态变更
TDDL必须要依赖diamond配置中心(diamond是淘宝内部使用的一个管理持久配置的系统,目前淘宝内部绝大多数系统的配置,由diamond来进行统一管理,同时diamond也已开源)。
TDDL动态数据源使用示例说明:http://rdc.taobao.com/team/jm/archives/1645
diamond简介和快速使用:http://jm.taobao.org/tag/diamond%E4%B8%93%E9%A2%98/
TDDL源码:https://github.com/alibaba/tb_tddl
TDDL复杂度相对较高。当前公布的文档较少,只开源动态数据源,分表分库部分还未开源,还需要依赖diamond,不推荐使用。

展开阅读全文

代码

评论 (5)

加载中
https://www.oschina.net/p/tddl 更新了
2017/11/22 17:05
回复
举报
打分: 力荐
推荐下同类型分表分库数据库中间件 Sharding-JDBC,支持 MySQL Oracle SQLServer PostgreSQL 很靠谱的数据库中间件。代码结构有层次,编码规范。 有兴趣了解,可以看我博客:http://www.yunai.me/categories/Sharding-JDBC/?oschina&41
2017/08/06 00:42
回复
举报
还是用乐视的jfaster mango吧
2017/07/04 20:49
回复
举报
国产开源就是坑
2016/12/27 15:28
回复
举报
几年都没有更新了。 #TDDL#
2015/07/01 15:51
回复
举报
更多评论
暂无内容
发表于服务端专区
2015/08/13 14:14

TDDL

TDDL的由来 TDDL的功能

0
2
发表于开发技能专区
2015/05/22 18:47

tddl

tddl+diamond http://yale.iteye.com/blog/1860019 剖析淘宝TDDL(TAOBAO DISTRIBUTE DATA LAYER) http://qq85609655.iteye.com/blog/2035176

0
4
发表于服务端专区
2015/05/26 14:32

tddl的使用

在使用tddl 之前首选安装 配置diamond 基本信息说明 appName=pay groupKey=groupKey dbKey=andor_qatest 备注 dbkey 为数据库名称 dbType=mysql dbUserName=tddl 一 .动态数据源配置 TGroupDataSource 的配置 1、配置读写分离权重: com.taobao.tddl.jdbc.group_V2.4.1_ “ groupKey ” 例子: com.taobao.tddl.jdbc.gro...

2
4
2014/09/12 17:47

剖析淘宝 TDDL

前言 在开始讲解淘宝的 TDDL(Taobao Distribute Data Layer) 技术之前,请允许笔者先吐槽一番。首先要开喷的是淘宝的社区支持做的无比的烂, TaoCode 开源社区上面,几乎从来都是有人提问,无人响应。再者版本迭代速度也同样差强人意 ,就目前而言 TDDL 的版本已经全线开源(Group、Atom、Matrix)大家可以在Github上下载...

1
9
发表了博客
2018/03/28 16:05

淘宝TDDL深入浅出

前言 在开始讲解淘宝的 TDDL(Taobao Distribute Data Layer) 技术之前,请允许笔者先吐槽一番。首先要开喷的是淘宝的社区支持做的无比的烂, TaoCode 开源社区上面,几乎从来都是有人提问,无人响应。再者版本迭代速度也同样差强人意 , 就目前而言 TDDL 的版本已经全线开源(Group、Atom、Matrix)大家可以在Github上下...

0
0
发表于数据库专区
2019/07/26 14:09

2. TDDL的三层逻辑结构

TDDL设计的总体思想是利用Decoration设计模式,修饰原生的JDBC Driver(主要是mysql driver)。在原有的JDBC Driver接口的基础上,提供分库分表、读写分离、错误重试、限流等一系列高级功能。 TDDL从逻辑上看是一...

0
0
发表于数据库专区
2019/10/15 13:04

一次tddl-sequence问题的排查

背景 在测试环境,有个同事发现了一个ID插入的时候报了主键冲突。这是一件很奇怪的事情,在大家的理解中,使用了Sequence功能,每个节点的内存拿的ID段应该都是不同的,不可能会出现这个问题。不然这又要颠覆认知...

0
0
发表于开发技能专区
2019/03/12 10:59

Tddl-递增分布式Sequence

详细源码可参考: https://www.programcreek.com/java-api-examples/?code=loye168%2Ftddl5%2Ftddl5-master%2Ftddl-group# 示例 @Bean(name = "errorCenterIdSequence", initMethod = "init") public......

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表于数据库专区
2019/03/12 11:40

tddl对分库分表的数据表进行同分表键值的数据insertbatch异常

使用TDDL 版本 version=3.3.2.4 groupId=com.taobao.tddl artifactId=tddl-mysql-parser 同一个库表,分表键值相同。

1
0
发表了问答
2016/10/02 14:38

tddl 自身集成druid,但发现会报:DruidDataSource: skip not validate connection.导致超时(报此原因应该是mysql物理连接已经中断)

@wenshao 你好,想跟你请教个问题: tddl 自身集成druid,但发现会报:DruidDataSource: skip not validate connection.导致超时(报此原因应该是mysql物理连接已经中断) 但tddl没有查到如何可以配置druid。现在试着把socketTimeout时间设置短点。以下是tddl的配置: userName=cfbamsopr initPoolSize=20 minPoolSize=2...

1
0
发表了问答
2016/07/29 11:20

tddl使用异常,报"Cause: java.sql.SQLException: the defaultDispatcher have no dbIndexMap and defaultDbIndex"错误

@齐百超 你好,我想请教个问题,我现在用的tddl是3.3.3.1版本,向数据库插入数据的时候会出现如下错误提示: org.springframework.jdbc.UncategorizedSQLException: ### Error updating database. Cause: java.sql.SQLException: the defaultDispatcher have no dbIndexMap and defaultDbIndex ### The error may invol...

1
0
发表了问答
2015/09/26 17:17

找一个 可用的tddl + diamond 的版本

找一个 可用的tddl + diamond 的版本 请 大神帮帮忙 项目急用 必须是自己亲自使用过的 谢谢

2
0
发表了问答
2014/07/15 10:39

mysql读写分离方案比较

最近有个springmvc+ibatis项目需要做mysql读写分离,目前查询到以下几个方案 1.应用层. 通过spring管理datasource的route,由aop或程序控制读写数据源. 2.中间件. 中间件维护主从数据关系,对应用层提供统一访问接口.完全解除程序耦合 3.mysql驱动 ReplicationDriver提供主从库访问的驱动,看了下原代码是保持了多个数据源的...

3
9
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
5 评论
265 收藏
分享
返回顶部
顶部