1. 分库分表,而且分库规则非常灵活.
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来完成映射关系(这只针对老系统,目前的优先级还不高,将在以后的版本提供)。也可以查看成功实践中的总结信息