对于ETL部分要注意,当前用的更多的是ELT,其最大的差别就在于首先是将源数据库中的数据抽取到目标数据库中,然后再在目标数据库中进行相应的数据映射和转换等操作,刚方法比传统的ELT在性能方面有明显的优势。在Oracle
ODI产品里面当前即用的ELT方式,在Talend产品里面可以看到这部分也是通过ELT方式来实现,但是在ESB产品里面可以看到,对于ELT方式的数据集成提供的相应组件并不多,要实现负责的数据转换和处理往往并不容易。
数据集成的重点是实现源数据库和目标数据库之间的数据传递,同样的目标表操作有两种方式,一种是对目标表进行全部truncate操作,然后再进行批量插入,还有就是根据主键对目标表进行插入或更新操作。这两种方式下性能有巨大差别,一般情况是至少有10倍以上的性能差异。因此对于数据集成建议更多的还是采用先清空目标数据库表,然后再批量进行插入的方式进行。
对于Talend-ESB的数据库组件部分,可以看到对于Oracle,Sql
Server和Mysql等常见主流数据库都有专门的数据库组件进行处理。组件本身也可以对数据库表的Schema信息自动发现和获取,如果源和目标的数据传递中间没有任何数据变化和映射,则可以连Map组件都不增加。经过实际测试情况发现,增加Map组件节点不会对性能有较大的影响。
在Mysql组件设计中提供了MySqlBulk和MySqlBulkExec组件,这是对数据进行批处理和导入的重要组件。使用了是Mysql原生的数据导入接口。经过测试10个字段100万条数据,导出文件在180M左右的大小,如果用传统的MysqlOutput组件情况下需要运行25秒左右完成数据导入,而如果采用MySqlBulk组件则只需要11秒左右即完成,如果数据量更大的话采用MySqlBulk组件优势会更加明显。
这也给我们对于异构数据库的集成提供了一个重要的方法,即首先导出txt文本文件,然后还可以对txt文件进行压缩传递,完成后再通过BulkExec进行批量数据装载,只有这种方法往往能获取最大的性能。但是这种方法本身缺点也必将明细,即不能再数据集成过程中做复杂的映射转换和逻辑处理。
在Talend-ESB的Integration集成组件中暂时没有找到Timer定时器组件,但是在Mediation集成模式下有Timer组件,因此对于定时调度类任务变通的处理方法即是在Mediation中设计Route,在Route中添加Timer组件和TalendJob组件,即Route在实际部署运行后可以调用到Integration模式下设计的Job。对于这种Route在打包的时候也可以看到会自动打包对应的Job相关组件和代码,而实际我们在ESB服务端部署后,在Bundle里面是可以看到两个组件,一个是Route组件,一个是Talend
Job组件。
对于ELT组件,在测试访问远程的Mysql数据库获取数据并导入本地Mysql库的时候,虽然组件可以成功运行,但是最终显示插入的数据为0条,由于没有明确的错误日志信息,该问题暂时还没有找到原因解决。通过tRowGenerator组件可以很方便的批量模拟生成大量的数据插入到数据库中,这对于我们需要进行大数据量的数据集成测试前期准备工作相对方便。
对于Talend-ESB本身自带的对于大数据集成能力比较弱,如果需要大数据方面的集成,可以下载专门的Talend-BigData版本,该产品可以支撑目前大部分的大数据采集和集成操作。但是从实际的产品对比可以看到,对于社区版缺少的功能仍然较多。
在商用集成包里面,Talend附带有医疗行业的HL7标准组件,该组件需要自己手工安装相关的Jar包,但是安装完成后输入符合HL7标准的消息文本进行测试,没有测试通过,具体问题待查。
在Talend-ESB中,对于Http
Rest服务接口的集成也提供了强大的可视化设计和映射能力。对于常见的几种常见,包括Http+DB Query,Http+DB
Insert,Http
Proxy等都已经测试通过。在设计过程中也可以到,Talend对于Json格式数据的可视化设计,Json数据格式和xml间的转换和映射等都支持的相当好。