TDDL动态数据源主要类:
动态数据源重新实现了jdbc的api,比如TGroupConnection、TGroupStatement、TGroupPreparedStatement、TGroupCallableStatement等,但这些类仅是对oracle、mysql对应的jdbc的装饰,另外以TGroupConnection为例,在创建TGroupConnection时并不会真正意义与数据库建立物理连接。
一. 数据源信息获取:
1. 数据源信息从diamond 获取
TGroupDataSource init的时候基于appName+groupKey两个参数通过httpClient访问diamond(Diamond是一个持久配置管理中心),获取到Group对应的数据源配置信息(多个数据源格式如:db0:rwp1q1i0,db1:rwp0q0i1),然后根据ds的key(比如db0),再到diamond系统中获取db的具体配置信息,比如 ip,port,database,user,pwd等
2.hardcode具体的数据源,比如
DataSource ds1 = DataSourceFactory.getMySQLDataSource(1);
DataSource ds2 = DataSourceFactory.getMySQLDataSource(2);
DataSource ds3 = DataSourceFactory.getMySQLDataSource(3);
//读库时最有可能从db3读,然后是db2,db1的权重最小
TGroupDataSource ds = new TGroupDataSource();
DataSourceWrapper dsw1 = new DataSourceWrapper("db1", "r10w", ds1, DBType.MYSQL);
DataSourceWrapper dsw2 = new DataSourceWrapper("db2", "r20", ds2, DBType.MYSQL);
DataSourceWrapper dsw3 = new DataSourceWrapper("db3", "r30", ds3, DBType.MYSQL);
ds.init(dsw1, dsw2, dsw3);
二. TDDL数据源路由
TDDL数据源使用 jboss dataSource 为基础
1.通过hints方式,指定使用具体哪一个dataSource index
比如:/*+TDDL_GROUP({groupIndex:12})*/select * from tab"
2.运行时通过GroupDataSourceRouteHelper.executeByGroupDataSourceIndex方法指定哪个数据源index
3.DBSelector,且分读写两种类型,在执行TGroupStatement具体的exute方法,如果是select 则从读类型DBSelector获取数据源,否则从写类型的DBSelector中获取
有以下几种实现:
1)EquityDbManager 淘宝称之为对等数据库资源管理器,所有优先级相同的数据源放到一起。
2)PriorityDbGroupSelector 支持优先级的数据资源,数据源的优先级不同,因为可能存在优先级相同的数据源,所以内置通过EquityDbManager集合实现。
3)OneDBSelector 一个仅且仅有一个数据源
4) RuntimeWritableAtomDBSelector 用于运行期间主备切换的场景(这个还没完全理解跟 EquityDbManager,PriorityDbGroupSelector等在功能上有啥区别?? )
5)其他方式
在diamond服务器上group datasource 配置扩展信息,指定具体sql或表名使用的数据源index,其格式为json:
{sqlDsIndex: { 0:[sql1,sql2,sql3], 1:[sql0], 2:[sql4]
* }, tabDsIndex: { 0:[table1,table2] 1:[table3,table4] },
* defaultMain:true}
自动会对当前执行的sql执行去空白字符、回车、tab等字符,支持子表比如 t_parent,t_parent_001。
该路由方式适用于,将一个表拆分成N份保存到一个db里,指定具体的dataSourceIndex
注:关于非OneDBSelector,数据源通过数据源的权重以及优先级来定义,格式如: [r|R](\\d*) [w|W](\\d*) [p|P](\\d*) [q|Q](\\d*) [i|I](\\d*) 格式指定数据源对应的属性 r/w表示 读/写,r/w后面的数字表示权重 p/q表示后面的数字表示读/写优先级,权重越大表示在相同的优先级别下的数据源被选中概率越大,对于优先级别越大,则优先选中。
- 大小: 25.8 KB
分享到:
相关推荐
ajax 学习笔记源代码ajax 学习笔记源代码ajax 学习笔记源代码ajax 学习笔记源代码ajax 学习笔记源代码ajax 学习笔记源代码ajax 学习笔记源代码ajax 学习笔记源代码ajax 学习笔记源代码ajax 学习笔记源代码ajax 学习...
Python金融大数据挖掘与分析全流程详解-学习笔记及案例代码.zip Python金融大数据挖掘与分析全流程详解-学习笔记及案例代码.zip Python金融大数据挖掘与分析全流程详解-学习笔记及案例代码.zip Python金融大数据挖掘...
Swift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习笔记含项目代码.zipSwift学习...
本笔记对应的学习资源《第一行代码》是Android开发者的入门必读书籍,书中系统地介绍了Android的基本概念和开发技术。 一、Android系统架构 Android系统架构是Android开发的基础,系统架构包括Linux Kernel、...
《Java学习笔记源代码(第6版)-林信良》是针对初学者精心编写的Java编程学习资源,包含了丰富的示例代码,旨在帮助新手快速掌握Java编程基础。本资源的核心在于通过实践来驱动理论学习,使学习者能够在实际操作中...
在这个"Servlet & JSP学习笔记NetBeans源代码"压缩包中,你将找到一系列与Servlet和JSP相关的示例代码,这些代码是基于NetBeans IDE编写的,并且是在Tomcat服务器上运行的。 Tomcat是一个开源的轻量级Web服务器和...
Java学习笔记源代码是针对清华大学出版的《Java学习笔记》一书,配套的 JDK1.5 版本的源码。这些源代码旨在帮助读者深入理解Java编程语言,通过实践来加强理论学习,提高编程技能。Java作为一种广泛使用的高级编程...
这份"java学习笔记及源代码"的资源,显然旨在帮助初学者或有经验的开发者深入理解和实践Java编程。以下是对这个主题的详细阐述: 一、Java语言基础 1. 类与对象:Java的核心是面向对象编程,类是对象的模板,对象是...
《wu-ftp源代码学习笔记》 在深入探讨wu-ftp源代码之前,我们首先要了解FTP(File Transfer Protocol)的基本概念。FTP是一种用于在互联网上传输文件的标准协议,它允许用户从远程服务器下载文件或将文件上传到...
"Java学习笔记全部课件和源代码"是一个针对初学者的资源包,它包含了一系列关于Java编程的学习材料和实例代码,旨在帮助新手快速掌握Java语言的基础和实践应用。 在Java学习的初期,理解基础概念至关重要。这包括...
《H.264学习笔记-JM源代码笔记》是一份深入探讨H.264编码标准和基于JM(JVT-Matrix)源代码的学习资料。H.264,全称为Advanced Video Coding(高级视频编码),是国际电信联盟(ITU-T)的VCEG(视频编码专家组)和...
本篇学习笔记主要聚焦于CAS服务器的数据源配置,这对于理解CAS如何存储和管理用户认证信息至关重要。在CAS的运行中,数据源作为连接数据库的关键组件,用于存储和检索用户凭证、服务定义等信息。 首先,我们需要...
Android课程设计CNoteBook云笔记源代码Android课程设计CNoteBook云笔记源代码Android课程设计CNoteBook云笔记源代码Android课程设计CNoteBook云笔记源代码Android课程设计CNoteBook云笔记源代码Android课程设计...
R语言学习笔记,R语言数据分析从入门到进阶-代码合集R语言学习笔记,R语言数据分析从入门到进阶-代码合集R语言学习笔记,R语言数据分析从入门到进阶-代码合集R语言学习笔记,R语言数据分析从入门到进阶-代码合集R...
郝斌老师的“数据结构笔记源代码”提供了深入学习这门课程的宝贵资源。这篇文档将详细解析这份笔记源码中的关键知识点。 1. **数组**:数组是最基本的数据结构,用于存储同一类型元素的集合。在郝斌老师的笔记中,...
数据结构与算法分析学习笔记(C++)chm 排版很好,代码直接能用,大牛写的,模板运用的很好
这份"java学习笔记的源代码"提供了与学习资料配套的示例代码,旨在帮助初学者和有经验的开发者深入理解Java语言的核心概念和实践技巧。 1. **面向对象编程基础** Java是完全基于面向对象编程(OOP)的,它支持类、...
《c#6.0学习笔记》随书光盘及pdf和源代码,这三部分内容都在这一个资源里面,视频教程很难找,在网上找了很久很久,和大家分享一下。
django框架学习笔记(源代码及文档) :“django框架学习笔记” :“django学习” 在Python的世界里,Django是一个强大且受欢迎的Web框架,它遵循模型-视图-控制器(MVC)设计模式,用于快速开发高效且可维护的...
c语言文件读写操作代码(个人学习笔记)c语言文件读写操作代码(个人学习笔记)c语言文件读写操作代码(个人学习笔记)c语言文件读写操作代码(个人学习笔记)c语言文件读写操作代码(个人学习笔记)c语言文件读写...