TDDL笔记

分表分库

分表, 数据库之所以要分表,当表中的数据超过一定量级,即使有索引,查询也会很慢,因为B+树深度比较深的话,IO次数会很多,导致性能变慢; 没有索引,则全表扫描 也会很慢;

分库,  分库判断依据是数据库连接数 居高不下;

TDDL分三层:

Matrix层;

  • 规则的管理
    • 固定哈希算法,基本能保证数据均匀分布,它也是 TDDL 的默认路由算法。根据某个字段(如整形的 id 或者字符串的 hashcode)对分库的数量或者分表的数量进行取模,根据余数路由到对应的位置。
    • 一致性哈希算法,固定哈希算法带来的数据迁移成本是非常大的,而一致性哈希算法的原理就是通过该算法计算出 key 的 hashcode 之后对 2^32 取模,那么数据都会落在 0~2^32 所组成的环中,然后数据存储在顺时针方向最近的机器上。一致性哈希已经可以解决大部分数据迁移需求了,但是对于数据集中在热点的情况,一致性哈希同样面临比较大的挑战,引入虚拟节点之后,情况就不一样了,所谓虚拟节点,它就是物理节点的映射,一个物理节点可以复制出多个虚拟节点,尽可能的让它均匀分布在环上,那么即使数据再集中,很好地起到了负载均衡的作用。
    • 自定义路由规则,TDDL 也支持
  • SQL语句的解释、优化和执行
  • 各个子表查询出来结果集的Merge
  • 事务的管理

Group层;

  • 数据库读写分离
  • 主备切换
  • 权重的选择(根据权重选择要去读哪些库)
  • 数据保护,数据库down掉后的线程保护, 数据库挂掉后的线程保护,不会因为一个数据库挂掉导致所有线程卡死。

Atom层;

  • 动态创建,添加,减少数据源
  • 底层对物理数据库做了代理,对单库的JDBC做了一层封装,执行底层单库的SQL
  • 统计计数(线程数、执行次数)

TDDL sql调用过程:

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
淘宝根据自己的业务特点开发了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/1645diamond简介和快速使用:http://jm.taobao.org/tag/diamond专题/TDDL源码:https://github.com/alibaba/tb_tddl TDDL复杂度相对较高。当前公布的文档较少,只开源动态数据源,分表分库部分还未开源,还需要依赖diamond,不推荐使用。 标签:TDDL

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值