数据集成实例

如图1-5所示,下面的例子说明了一个完整的数据集成方案。

数据源和中介模式

在这个例子中,我们有5个数据源。第一个是最左边的S1,它存储电影数据,包括电影的名字、演员、导演和类型。接下来的3个数据源S2~S4存储有关场次的数据。数据源S2包括了整个国家的影院,而S3和S4仅代表性地存储了纽约和旧金山的影院数据。需要注意的是,虽然这3个数据源都存储同一类型的数据,但它们使用的属性名是不同的。最右边的数据源S5则存储影评数据。

中介模式包括4个关系:Movie(电影)、Actors(演员)、Plays(场次)和Reviews(评论)。注意在中介模式中Review(影评)并不包含date(日期)属性,但数据源S5中保存着相关信息。

数据源描述中的语义映射描述了数据源和中介模式之间的关系。例如,数据源S1到中介模式的映射将描述它包含表Movies,并且表Movies中的属性name与中介模式中表Movie的属性title相对应。它还将指定中介模式中的表Actors是数据源S1表Movies中name和actors两列的投影。

同样,语义映射将指定中介模式的Plays关系中的元组可以从数据源S2、S3、S4得到,并且S3中元组的属性location都为纽约(类似地,S4中元组的属性location都为旧金山)。

除了语义映射之外,数据源描述还指明了数据源其他方面的一些信息。首先,它们指明数据源是否是完整的。例如,数据源S2可能不包含整个国家所有的电影放映时间,而数据源S3包含所有在纽约的电影放映时间。其次,数据源描述可以指定对数据源访问方式的限制。例如,S1的描述指定,要想得到查询结果,输入的查询语句中至少要给出一个属性值作为限制条件。同样,要对其他提供电影播放场次的数据源进行查询,必须输入影片名称。

查询处理

我们使用中介模式中的数据来向数据集成系统发起查询。下面的这个查询语句想要查找Woody Allen(伍迪·艾伦)导演的电影在纽约的放映时间。

如图1-6所示,查询的过程按照如下步骤进行。

查询重写 如前所述,用户查询是用中介模式中的术语构成的。因此,系统要做的第一步是把查询语句重写成与数据源模式对应的形式。要做到这一点,数据集成系统就要使用数据源描述。重写的结果是一组与数据源模式相对应的查询语句,把它们的执行结果组合起来就可以得到原始查询的结果。我们把这个重写的结果称为逻辑查询计划。

重写过程如下:

Movie(电影)的元组可以从数据源S1直接获得,但需要将属性title转换为S1中的name。

Plays(场次)元组可以从数据源S2或S3得到。由于已知S3包含了纽约市的完整数据,所以我们选择S3而不选择S2。

由于数据源S3需要输入电影的名称进行查询,所以查询计划必须首先访问数据源S1,然后把从S1中得到的电影名称作为S3的查询输入。

因此,查询重写引擎所产生的第一个逻辑查询计划就是访问S1和S3以便得到查询结果。然而,第二个逻辑查询计划也是正确的,即先访问S1,再访问S2,虽然得到的结果可能不完整。

查询优化 和传统的数据库系统一样,查询处理的下一个步骤是查询优化。查询优化把一个逻辑查询计划转化为一个物理查询计划,物理查询计划指定访问各个数据源的确切顺序,在组合查询结果时,要用哪些算法来对数据进行操作(例如,数据源之间的连接),以及给每个操作分配多少资源。如前所述,该系统还必须处理数据的分布性所带来的挑战。

在我们的例子中,优化器将决定使用哪种算法来连接S1和S3。例如,连接算法可能以流水线的形式把电影名称从S1输入到S3,或者可能把结果先缓存起来,然后再整批发送到S3。

查询执行 最后,执行引擎负责物理查询计划的实际执行。执行引擎通过包装器调度各个数据源,然后将返回的结果按照查询计划指定的形式组合起来。

数据集成系统与传统数据库系统的另一个显著区别在于,传统数据库系统的执行引擎只是执行由查询优化器发给它的查询计划,而数据集成系统的执行引擎可能会根据其监测的查询计划的执行进展,要求优化器重新考虑查询计划。在我们的例子中,执行引擎可能会发现数据源S3异常缓慢,因此可能会询问优化器能否使用其他数据源来代替S3。

当然,另一种可选办法是在优化器中为原始计划设定好一些突发事件。但是,如果意外执行的事件很多,原计划就可能变得很庞大。因此,在设计查询处理引擎时,一个有趣的技术挑战就是如何平衡计划的复杂性以及应对意想不到的执行事件的能力。

时间: 2024-09-29 23:26:09

数据集成实例的相关文章

数据集成之主数据管理(一)基础概念篇

数据集成是当下比較热门的话题,相关的产品和平台也越来越多.非常多CIO都在各种数据集成平台和产品之间犹豫不决.因此对数据集成平台的框架体系有全面的理解,对各个厂家产品所提供的功能有深入的认识才干为数据平台选型的决策提供可靠的保证. 我有幸參与了国内一个知名企业的集成平台的设计工作,并主导了数据集成平台的需求分析和产品选型工作.这次工作中,研究了非常多新的技术方向和产品,以下我主要讲一下数据集成领域的一种新兴的产品平台主数据管理平台MDM(Master Data Management). 主数据的

数据集成通过JDBC将数据导入MySQL的几种模式

摘要: 目前MySQL JDBC提供了多种将数据写入MySQL的方式,本文将介绍数据集成(DataX.同步中心.原CDP)支持的几种模式: * insert into xxx values (..), (..), (..) * replace into xxx values (..), (..), (..) * insert into xxx values (..), (..), 目前MySQL JDBC提供了多种将数据写入MySQL的方式,本文将介绍数据集成(DataX.同步中心.原CDP)支

大数据管理:数据集成的技术、方法与最佳实践 读书笔记三

7.1 什么是数据仓库 数据仓库是基于特定的数据结构(以及有关应用程序)所构建的数据的中央存储库,以便为分析和报表提供 一致的数据源.面向整个组织创建的企业数据仓库(Enterprise Data Warehouse,EDW)用于对整个组织的信息 进行分析.大多数情况下,超大型组织中会有多个企业级数据仓库,每个都拥有组织中某个很大组成部分的数 据,如某个区域,或者很大的功能域.批处理数据集成方案通常用于将数据置入或者移出数据仓库.数据仓库架 构的设计要达到以下目的:为整个组织的分析提供一致可用的

Oracle 数据集成的实际解决方案

就针对市场与企业的发展的需求,Oracle公司提供了一个相对统一的关于企业级的实时数据解决方案,即Oracle数据集成的解决方案.以下的文章主要是对其解决方案的具体描述,望你会有所收获. Oracle 数据集成解决方案 Oracle数据集成解决方案用于在SOA.BI和数据仓库环境中构建.部署和管理以实时数据为中心的架构,包含了Oracle数据集成的所有要素--实时数据移动.转换.同步.数据质量.数据管理和数据服务--能确保各个复杂系统的信息及时.准确.一致. 通过使用Oracle数据集成,企业将

C# ---- 串口数据 YSI 实例

如本文时间 23:05 由于实际设备使用网络传输转虚拟串口模式,现场安装之后还是出了问题. 从20:30研究到23:30才终于弄明白 //打开新的串行端口连接 sp.Open(); //丢弃来自串行驱动程序的接受缓冲区的数据 sp.DiscardInBuffer(); //丢弃来自串行驱动程序的传输缓冲区的数据 sp.DiscardOutBuffer(); //使用缓冲区的数据将指定数量的字节写入串行端口 sp.Write(wbb, 0, wbb.Length); //当前线程挂起500毫秒 S

数据集成:Flume和Sqoop

Flume和Sqoop是Hadoop数据集成和收集系统,两者的定位不一样,下面根据个人的经验与理解和大家做一个介绍: Flume由cloudera开发出来,有两大产品:Flume-og和Flume-ng,Flume-og的架构过于复杂,在寻问当中会有数据丢失,所以放弃了.现在我们使用的是Flume-ng,主要是日志采集,这个日志可以是TCP的系统的日志数据,可以是文件数据(就是通常我们在Intel服务器,通过其中的机构传过来的接口,或者通过防火墙采集过来的日志),在HDFS上去存储,可以和kaf

Google Gson解析Json数据应用实例

转自:http://lixigao449778967.blog.163.com/blog/static/24985164201269105928783/ 1.需要的Jar包 1) Google Gson(gson-xxx.jar)下载地址:http://code.google.com/p/google-gson/downloads/list 2)JUnit4 2. 应用实例代码 下载地址:http://download.csdn.net/source/3499627 包括如下类: 1)普通Jav

数据集成中间件知识点总结

数据集成是把不同来源.格式.特点性质的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享. 一.模型分类 (1)联邦式数据库系统(Federated Distributed Database System),这种分布式数据库的特点是结点自治和没有全局数据模式,每个结点所看到的数据模式仅仅限于此结点所用到的数据.它一般由两部分组成:一个是本节点的数据模式,另一个是供本节点共享的其他节点上有关的数据模式.结点间的数据共享由双边协商确定. (2)中间件模式通过统一的全局数据模型来访问异构的数

原生ajax调用数据简单实例代码

原生ajax调用数据简单实例代码:由于jQuery的盛行,现在使用较多的是jQuery封装好了的ajax,因为解决了浏览器兼容性问题,这对程序员来说就等于去掉了一个心头大患,但并非原生ajax就销声匿迹,并且本人感觉还是对原生的ajax有所了解的好,下面就是一段ajax数据调用的实例代码,非常的简单,初学者可以参考一下.代码如下:一.兼容浏览器部分: function xmlHttpR() { var xmlhttp; if(window.XMLHttpRequest) { xmlhttp=ne