分库分表,而且分库规则非常灵活.
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
相关推荐
在这种背景下,数据库的分库分表技术应运而生。本文将围绕“MySQL分库分表 分片理论概念6-12”这一主题,深入探讨其背后的原理、应用场景以及常见的解决方案。 #### 二、数据库性能瓶颈分析 1. **数据库连接**:...
ShardingProxy是一款面向Java开发者的开源中间件,用于实现数据库分库分表的解决方案,尤其在处理大数据量的场景下显得尤为重要。它提供了一个统一的数据库代理服务,使得应用程序可以像操作单个数据库一样操作...
* 读库使用 MySQL,采用数据分片,分库分表,每台 MySQL 放少量的数据,单个数据分片内部采用 MySQL 复制机制 * 读库的超大 Memory 容量,起到了很好的 Cache 作用,在内存中的数据查询性能远远高于在硬盘上的性能 *...
淘宝开始采用分库分表策略,将数据分散到多个数据库和表中,以实现负载均衡。这种策略需要高效的中间件支持,例如淘宝自主研发的TDDL(淘宝数据库连接池)和MyCAT,它们能够自动处理数据路由和分片,降低了开发人员...
淘宝根据自己的业务特点开发了TDDL(Taobao Distributed Data Layer 外号:头都大了 ©_Ob)框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,...
- **分布式中间件**:如TDDL、DRDS等,用于实现分库分表、读写分离等功能。 - **云平台服务**:如阿里云提供的各种云服务,支持混合云架构的构建和运维。 #### 结语 淘宝数据库架构的演进历程不仅反映了技术的进步...
TDDL(Table Data Layer)是淘宝开源的数据库中间件,主要用于解决数据库的分库分表问题。TDDL提供了动态数据路由、读写分离、故障切换等功能,它通过配置定义数据的分布策略,使得应用程序无需关心数据的具体存储...
* 淘宝 TDDL 是一个基于集中式配置的 JDBC DataSource 实现,具有分库分表、Master/Slave、动态数据源配置等功能。 5. 解决方案 2 服务端中间件封装实现 服务端中间件封装实现是指在服务端提供一个中间件,以便将...
淘宝根据自己的业务特点开发了TDDL框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,具有主备,读写分离,动态数据库配置等功能
【大型应用系统架构设计——淘宝分布式调用跟踪系统】\n\n在当今的互联网环境中,大型应用系统的复杂性日益增加,涉及到远程服务调用、消息通讯、数据库分库分表、分布式缓存以及分布式文件系统等多种技术。...
传统的集中式数据库在面对高并发、大数据量时可能会遇到性能瓶颈,而分布式事务数据库通过分库分表、数据分片等手段,实现了水平扩展,提升了吞吐量和并发处理能力。例如,TDDL(淘宝分布式数据库中间件)和MyCAT...
TDDL是阿里巴巴集团自主研发的分布式数据访问层,它解决了大规模数据库集群的读写分离、分库分表、负载均衡等问题,极大地提升了数据库的可扩展性和性能。TDDL的出现,使得淘宝能够应对日益增长的数据处理需求,保证...
"MySQL 面试题和答案,涵盖索引、事务、锁、分库分表、InnoDB 与 MyISAM 的区别等知识点" MySQL 索引使用有哪些注意事项呢?可以从三个维度回答这个问题: 1. 索引哪些情况会失效: * 查询条件包含 or,可能导致...
- **MySQL集群的引入**:尽管当时团队对于Oracle更为熟悉,但由于MySQL在分表分库方面展现出的优势,淘宝开始尝试将MySQL应用于非核心业务场景。这包括使用MySQL实现MS架构、读写分离等功能。 - **异构读写分离**:...
常用的分库分表中间件: 1. sharding-jdbc(当当) 2. Mycat 3. TDDL(淘宝) 4. Oceanus(58 同城数据库中间件) 5. vitess(谷歌开发的数据库中间件) 6. Atlas(Qihoo 360) 分库分表可能遇到的问题: 1. 事务...
2. **数据库设计**:在大数据背景下,单一数据库无法满足需求,因此需要采用分库分表策略,如淘宝的TDDL(淘宝数据库中间件)。此外,NoSQL数据库(如MongoDB)和NewSQL(如TiDB)也是解决大数据存储的有效方案。 3...