分库分表,而且分库规则非常灵活.
2. 主键生成策略
目前TDDL提供的id生成主要还是依托数据库来进行的,oracle可以直接使用sequence来完成id生成,mysql则需要DBA建立一个表专门用于生成id.
3. 连接查询策略
虽然TDDL目前并不直接支持连接查询,但连接查询在业务中也是常见的查询。处理这类查询时,需要由业务去决定如何实现这类查询。
处理这类查询时,一个普遍的原则是尽量保证查询发生在一个数据库中,如果不能发生在同一个数据库中,尽量避免全表全库查询。
4.不支持的SQL操作
Join:
包含nature left right inner outer join等都不进行支持。
多表查询:
在整个sql中不能出现多于一个表名的情况。但需要注意的是,TDDL支持嵌套的查询,但TDDL也要求嵌套SQL内的表名也必须是与嵌套外的表名一致。这样整个语义由数据库保证。
Between……and:
目前还不支持Between and关系,可以暂时使用><的方式代替
Not:
所有的Not语义中,目前除了not like以外都不予以支持。
Comment:
TDDL目前还不支持任何种类的注释。
For update:
TDDL目前还不支持强制指定使用排他锁的方式。
Group function:
如Count,avg,max,min等,目前暂时还不支持,需要业务在前端进行合并,在以后的版本中会对出现在column列名字段的聚合函数予以支持。但不会对group by 中having后出现的聚合函数加以支持。
目前count()函数可以在column列中被识别,但最后会返回多个int值。以后会将其聚合在一起。
Force index:
在目前的版本内还不能予以支持。
Group by:
聚合函数目前不予以支持,因为脱离数据库以后做聚合非常困难。
Having:
Having以及having内使用的其他聚合函数。
大部分函数:
目前很多mysql独有的函数都不能予以支持。
5.支持的SQL操作
CRUD:
增删改查基本语法支持。
AS:
别名支持
表名限定:
允许在列名前使用“表名.”的方式来添加表名限定词。
Like:
Not like ,like 从语义和语法上都是支持的
Limit:
Mysql特殊的分页语法。
用括弧提升优先级:
支持在sql的where条件中使用括弧。
In:
In 操作支持
Is:
Is操作支持
嵌套查询:
嵌套查询包含两类,第一类是在表名部分的嵌套查询,第二类是在where条件中的嵌套查询,只要嵌套查询内的所有表名全部一致,就可以使用。
基本数据操作:
+ - * / 都是可以识别的,也可以正确的被转化回sql,但这类基本数据操作是不能被使用在分库和分表字段的。分库分表字段必须都是简单的数据字段。
部分函数支持:
Sysdate()函数,now()函数,ifnull()函数。
6.事务的有限支持
支持基于单库的事务,但不支持跨库进行事务。跨库事务本身会耗费很多宝贵的资源,在大型分布式系统中应该尽量避免使用分布式事务处理机制,可以通过补偿等方式保证分布式环境中的数据的最终一致性,如果在一个事务过程中出现了多个不同的数据源,则系统会抛出异常。同时,如果在一个事务中使用了非TDDL TDataSource管理的数据源,Spring和TDDL都不能够保证事务的ACID。如果是针对单个数据库的事务,使用的方式与以前的使用方式完全一致。如果需要使用spring的数据库事务管理,则只需要使用TransactionAwareDataSource对TDataSource进行包装后使用TranscationManager进行管理即可。
7.支持多库多表的分页查询
在查询前几页的数据时,多库多表查询本身的性能是可以接受的,也不需要担心占用较多内存的问题。他的效率与从第一条数据开始全取数据到max指定的行的效率是基本一致的。因此,他比较适合于查询按照时间排序的数据,并且最好是查到就处理,不会翻页到很后面,在这类场景中,使用多库多表的分页查询效果较好。
8.每次查询所用的连接是与Datasource关联
假设有1024张表,分在16个数据库中,那么在全查1024张表的时候,总共应有16个连接.
9.默认就可以支持读写分离的
对于Mysql:数据复制采用mysqlLog的方式进行。
对于Oracle:数据的复制采取TDDL的一个可选插件来进行,该插件是基于notify的一个对于oracle进行行复制插件。
10.针对有ID的数据,有几类处理的方法:
1>.在ID字段中包含分库信息,这样我们就可以通过这个ID里面的某些位就可以直接获取分库信息了。(新系统可以采取这类方式,TDDL提供了生成这种ID的便捷方法。)
2>.通过TDDL的ID=>分库映射cache来完成映射关系(这只针对老系统,目前的优先级还不高,将在以后的版本提供)。也可以查看成功实践中的总结信息
from:http://blog.csdn.net/tr111999/article/details/28488459
相关推荐
开源个人参考淘宝的TDDL分库分表思路写的一个分库分表中间件Kamike.divide. 分库分表这个是8月份左右跟淘宝的数据分析部门的架构师离哲交流的时候产生的想法,离哲推荐采用TDDL进行分库分表。 回去一看,却...
TDDL除了拿到分库分表条件外,还需要拿到order by, group by, limit m,n , join信息, SUM,MAX,MIN等聚合函数信息,DISTINCT信息. 具有这些关键字的SQL在单库和多库情况下进行,语义是不同的.TDDL必须对使用这些关键字...
淘宝开源分布式存储中间件tddl的ppt
目前市面上的技术解决方案众多,但是ShardingProxy作为一个前沿的分库分表技术,其特性及应用更受业内人士及Java开发者的青睐。本文首先深入讲解了ShardingProxy的部署和使用,比如映射设置,数据库代理服务部署,...
淘宝根据自己的业务特点开发了TDDL(Taobao Distributed Data Layer 外号:头都大了 ©_Ob)框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,...
tddl淘宝mysql集群
本项目是一款外号“头都大了”的分布式数据层框架(TDDL),旨在透明化处理分库分表及异构数据库间的数据复制问题。框架基于集中式配置,采用Java语言开发,实现了对JDBC数据源的优化管理,具备主备切换、读写分离、...
tddl 是阿里巴巴开源的分布式数据库中间件,支持分裤分表
淘宝根据自己的业务特点开发了TDDL框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,具有主备,读写分离,动态数据库配置等功能
TDDL 简单原理与架构 TDDL 使用 TDDL SEQUENCE原理与使用 控制中心JADE介绍 YUGONG动态数据复制组件介绍
能支持分库维度含糊等场景下的分库分表。以及包括多库多表下的 order by , distinct, group by, having等操作。 阅读推荐:第10章 特点五,常用DDL操作的封装 从数据库元数据访问,到建表,创建约束,创建...
TDDL加入XA两阶段事务提交,本人自己跟代码画的这些图,从原公司离职没有保存代码,希望这个图可以给研究TDDL的朋友一些启发
2008年左右,阿里巴巴开始尝试MySQL的相关研究,并开发了基于MySQL分库分表技术的相关产品,Cobar/TDDL(目前为阿里云DRDS产品),解决了单机Oracle无法满足的扩展性问题,当时也掀起一股去IOE项目的浪潮,愚公这项目...
该文档介绍tddl server的原理,讲述了tddl如何工作,特别是想了解tddl原理服务的同学
为了解决传统数据库的分布式化这个技术难题,各种数据库中间件应运而生,从早期的Amoeba、TDDL、Cobar,到如今的Mycat,技术日新月异,发展迅猛。Mycat已经成为了一个强大的开源分布式数据库中间件产品。面对企业...
详细使用解说文档
mysql中间件研究(Atlas_cobar_TDDL)
Taobao tddl, used to integrate different data sources, very useful.
mysql中间件研究(Atlas、cobar、TDDL、Mycat).docx
08年左右,阿里巴巴开始尝试MySQL的相关研究,并开发了基于MySQL分库分表技术的相关产品,Cobar/TDDL(目前为阿里云DRDS产品),解决了单机Oracle无法满足的扩展性问题,当时也掀起一股去IOE项目的浪潮,愚公这项目...