Oracle Data Integrator 技术白皮书1 介绍 22 E-LT 体系结构 32.1 传统的ETL 32.2 E-LT 43 声明设计(DECLARATIVE DESIGN) 63.1 传统的ETL设计 63.2 声明设计(Declarative Design) 64 知识模块(KNOWLEDGE MODULES) 94.1 知识模块的类型 94.2 设计阶段和运行阶段的知识模块 94.3 灵活性和可扩展性 105 面向事件的集成 115.1 面向消息的集成 115.2 变化数据捕获 115.3 发布和订阅模型 125.4 处理变化数据集的一致性 126 支持SOA框架 146.1 数据和转换服务 146.2 Web Services 访问 157 数据完整性 167.1 为数据完整性声明规则 167.2 在集成过程中的数据完整性防火墙 177.3 强制规则 177.4 使用第三方姓名及地址清洗工具 188 体系结构 198.1 用户界面 198.2 代理 208.3 存储库 208.4 元数据导航器/轻量级设计器 219 方案(SCENARIOS) 229.1 数据仓库和商业智能 229.2 面向服务的集成 239.3 主数据管理 2410 结论 251 介绍整合整个企业的数据和应用,并将它们在一个统一的视图中进行展现是一个复杂的任务。
大量的不一致性不仅仅体现在技术、数据结构和应用功能上,而且在整体的体系结构上也存在着基本的差距有一些集成需求是面向数据的,尤其是那些对大数据量的需求还有一些其它的集成项目是基于事件驱动的体系架构(EDA)或者面向服务的体系架构(SOA),如异步或同步的集成许多组织针对这些多样化需求采用了广阔的工具和技术,结果就会造成杂乱的集成项目而无法将它们进行综合利用和统一起来这些工具不符合整体的性能、灵活性和模块化的需求Oracle Data Integrator提供了一个集成平台包括的所有数据集成的功能:基于数据的、基于事件的和基于服务的通过高效地转换大数据量的能力、用先进的变化数据捕获(CDC)在实时环境中处理事件,以及提供数据服务给Oracle SOA套件,Oracle Data Integrator统一了各种孤立的集成技术它还提供了强大的数据完整性控制能力,确保数据的一致性和正确性采用不同于传统工具的独特核心特性—异构E-LT、声明设计和知识模块等—Oracle Data Integrator符合高性能、灵活性、高生产率、模块化和热插拔的集成平台的需求2 E-LT 体系结构2.1 传统的ETL传统的ETL工具的运行方式是,首先从多种数据源抽取数据,然后在一个专有的、中间层的ETL引擎转换数据,最后装载转换后的数据到数据仓库或集成服务器中。
因此“ETL”不仅仅是个名称还表现了操作的顺序迄今为止,ETL过程的数据转换是计算密集型最大的步骤,并且执行的整个过程完全是由专有ETL引擎在专用服务器上完成的ETL引擎执行数据转换(有些时候还要进行数据质量检查)是基于行级进行的,因此,在整个过程中很容易变成瓶颈另外,数据一定要在网络移动两次,一次是数据源和ETL服务器之间,一次是ETL服务器和目标数据仓库之间因此,如果用户想要确保参照完整性,例如通过从数据仓库比较数据发现违反参照完整性的值,那被参照的数据一定要从目标下载到ETL服务器,这样就更增加了网络负载及下载时间并导致额外的性能问题例如,让我们看一下传统的ETL任务如何从目标数据仓库寻找记录去匹配数据源的数据为了执行这样一个任务,一个传统的ETL工具可能会使用下列三个方法之一:Ø 装载Look-up表到内存:整个look-up表被从目标服务器上检索并被装载到ETL引擎的内存中在作为结果的被转换的数据写回目标服务器之前,用源数据记录匹配(或连接)这个look-up数据是在内存中完成的如果look-up表是相当大的,那么这个操作将需要在ETL引擎中耗费大量的内存和长时间的数据装载,以及重建索引。
Ø 即时执行,逐行查找:对于每一行,ETL引擎都要送一个查询到位于目标服务器上的look-up表查询的结果将返回一行已匹配(或已连接)当前行的记录如果look-up表包含50万行记录,ETL引擎将送50万个查询这种处理方式将极大地减慢数据集成的进度并给目标服务器带来严重的负载Ø 在ETL任务中使用手工编码:这种方式使用ETL引擎仅仅是为了装载数据源到目标数据库,然后手工编写SQL代码将这些数据与look-up表进行连接这就产生了一个问题:为什么购买了一个ETL工具还要在目标服务器手工编码?这样的话对于用户就丧失了元数据管理的优势和开发的生产率不幸的是,这就是用户一旦注意到在集成的过程中10倍的性能降低而采用的方式(相比较于采用手工编码完成同样的操作)2.2 E-LTE-LT体系结构结合了手工编码和ETL方法的最佳特性于一个解决方案中E-LT方法改变了数据转换发生在哪里和怎样处理,它充分利用了开发者的已有技能、数据库引擎和服务器硬件去达到最大程度的可能性事实上,E-LT方法重新部署数据转换步骤在目标数据库系统,改变了操作顺序为:从数据源表抽取数据,装载表到目标服务器,然后使用数据库管理系统特有的SQL(native SQL)操作在数据库系统上转换数据ETL与ELT方法E-LT体系结构充分利用了数据库管理系统的能力和吞吐量,而仅仅受限于其部署的服务器的特性。
因为不需要额外的服务器、技术和技能来完成操作,E-LT体系结构提供最优的性能和可伸缩性,并且容易管理整个集成系统的基础架构让我们同样以上面的例子看看将发生什么影响:Ø 不需要过多的移动数据从数据源和目标服务器到ETL服务器相关的数据将被移到目标服务器,并且查找操作也在同样的目标服务器上直接进行这种方法降低了网络负载而仅仅需要必要的数据Ø 处理不是逐行进行的,而是使用目标服务器的连接能力采用单一查询这样的操作将使用数据库服务器引擎的处理能力提供最好的性能Ø 因此,其性能至少相当于手工编码的效率(虽然我们并不需要手工编码),除了提供一个数据集成平台之外,仍然具有元数据管理功能和高生产力因为不需要分离的ETL引擎和专门的ETL服务器硬件,初始的硬件和软件资金成本将大为降低,同样也会降低持续的软硬件维护成本因为E-LT体系结构使用现有的数据库管理系统执行ETL任务,其整体成本也将大幅降低,相同的服务器存放需要集成的全部数据3 声明设计(DECLARATIVE DESIGN)3.1 传统的ETL设计采用传统的ETL系统设计一个集成的过程,开发者需要设计过程的每个步骤例如,我们假设一个很普通的例子,销售指标来自于过去时间以来的、不同客户年龄段的汇总。
销售数据来自于一个销售管理数据库系统,而年龄段数据被描述在一个分发的文件中为了结合这些数据源,并且在客户统计系统中插入和更新适当的记录,你一定要设计每个步骤,这包括:1. 在引擎中装载客户销售数据2. 在引擎中装载年龄分发文件3. 在客户销售数据和年龄分发文件中执行查询4. 按照年龄段分组聚合客户销售5. 装载目标销售统计信息数据到引擎6. 通过与客户统计系统比较聚合信息决定什么需要被插入或更新7. 插入新的记录到目标系统8. 更新存在的记录到目标系统依赖需要被设计的步骤,这种方法需要特殊的技能它还需要相当的开发量,即使有重复的任务,例如管理插入/更新目标系统,也需要在每个任务中被开发最后,这种方法在维护阶段也需要大量的工作量改变这个过程需要清晰地理解这个过程做什么和它是怎么做的采用传统的ETL设计方法,集成的逻辑和技术层面是纠缠在一起的3.2 声明设计(Declarative Design)采用声明设计(Declarative Design),你只需要设计过程做什么,而不需要你描述它怎样做在我们上面提到的例子中,过程做什么就是指:Ø 关联销售应用的客户年龄到分发文件的年龄段Ø 通过年龄段聚合客户的销售去装载销售统计信息。
这些步骤怎样做呢,这是由底层的技术特性或技术策略去执行这个集成任务—例如建立临时数据结构,称为装载器(loaders)—能够清晰的与声明规则分离传统的ETL设计和声明设计在一个数据集成任务中,Oracle Data Integrator的声明设计是在称为“接口(interface)”的里面使用关系图(relational paradigm)的形式去声明这些规则的在我们例子中,数据源就是销售表和年龄表单,目标就是客户统计系统转换就是销售表和年龄表单之间的连接,以及每个年龄段的销售聚合用Oracle Data Integrator设计数据流程采用声明设计,你只需要把重点放在真正需要关心的地方,那就是你的集成任务的规则而不是集成过程的底层技术方面技术方面将在知识模块(Knowledge Modules)中描述4 知识模块(KNOWLEDGE MODULES)4.1 知识模块的类型Oracle Data Integrator的知识模块是用来实现集成过程是怎样发生的每个知识模块的类型表明了一个特定的集成任务:Ø 执行反向工程检索异构系统的元数据到Oracle Data IntegratorØ 在一个现有的系统上支持变化数据捕获(CDC)Ø 使用系统最优化的方法从一个系统装载数据到另一个系统Ø 采用特定的策略(插入/更新,缓慢变化维等)在目标系统上集成数据Ø 在数据流中控制数据完整性Ø 以服务的方式呈现数据这些知识模块覆盖了相当广范围的技术和方法。
4.2 设计阶段和运行阶段的知识模块知识模块是给定集成任务的一个代码模板这个代码是独立于接口的,接口是将要处理的数据源、目标和转换的定义在设计的时候,开发人员建立描述集成过程的元数据这个元数据与知识模块结合生成代码,以便为运行阶段做好准备在运行阶段,Oracle Data Integrator送这个代码在数据源和目标系统中去执行4.3 灵活性和可扩展性在给定系统情况下,通过为特别的任务使用户能够采用最适当的或灵敏调整的解决方案,知识模块提供了额外的灵活性例如,从一个数据库系统传输数据到另外一个数据库系统,开发人员能够依赖于不同情况使用不同的方法:Ø 数据库系统的专有装载技术(如Oracle SQL*Loader, Microsoft SQL Server BCP, Teradata TPump)能够从数据源引擎卸载数据到文件,然后装载文件到目标引擎Ø 数据库链接特性(如Oracle Database Links, Microsoft SQL Server Linked Servers)能够在服务器之间直接地传输数据这些技术策略被相应的知识模块所使用去利用给定平台特有的技术能力知识模块也是完全可扩展的。
这些代码是开放的,并且技术专家能够通过图形化用户界面编辑它们去实现新的集成方法或最佳实践(例如,解决性能或者遵守规则和企业标准)而对于开发者而言,不需要具有技术专家的技能,也能够在集成过程中使用这些定制的知识模块Oracle Data Integrator为市场上主流数据库引擎和应用系统提供了超过100种知识模块5 面向事件的集成5.1 面向消息的集成在一个实时环境中的集成应用里,从消息中间件或企业服务总线,例如Oracle ESB,捕获事件已经变成一种非常通用的任务应用和业务处理为用户生成消息,或者从消息系统中接受。