1、集成对象代理数据库的科学工作流服务框架中的数据跟踪 王黎维1, 彭智勇2,3, 黄泽谦2 , 罗敏2 (武汉大学国际软件学院1,软件工程国家重点实验室2,武汉大学计算机学院3, 武汉 430072) 摘 要 本文提出了一个集成数据库的科学工作流服务框架,它采用对象代理模型描述一系列科学任务的执行过程,使得工作流管理操作以类似于传统数据库管理操作的方式来完成。同时,基于对象代理数据库中的双向指针机制,本文提出了一种新的数据跟踪方法,该方法能提供比注释或反向查询更高的性能,不仅节省了大量的存储空间,而且减少了额外的计算代价,一种部分物化中间数据的模式也被提出,用于提高数据跟踪的高效性,
2、实验显示它具有较好的系统性能。 关键词 科学工作流;web服务;对象代理模型;数据跟踪 1 引言 该研究得到了国家自然科学基金项目(60573095)、教育部新世纪优秀人才计划项目(NCET-04-0675)、中国高科技研究发展计划(2006AA12Z210)、教育部博士点基金项目(20050486024)、教育部科学技术研究重点项目(107072)、国家重点基础研究发展计划资助(2007CB310806)资助 目前,生物、医学、生态等科学领域已经面临信息爆炸,使得这些领域的科学家每天不得不使用各种专业程序处理来自实验室信息管理系统控制的科学实验,大规模计算为
3、中心的模拟或远程传感器实时观测的科学数据,这对自动管理科学实验提出了迫切的需求。为了支持科学家进行高效的数据管理和实验分析,将工作流技术应用于科学领域的科学工作流(Scientific Workflow,SWF)如今已成为在网络基础设施上进行大规模科学计算和协同研究的有效方法。目前在合作环境中进行跨组织的科学实验已经越来越重要。由于该环境中数据和程序资源的分布和异构,使得广泛用于工业界的Web服务技术引入到科学工作流中,用于支持来自不同平台的计算资源的整合,如 [1,2]等。它将程序封装到服务中,并通过服务调用而不是程序调用组成工作流,因此能够跨越技术和组织的边界对流程进行建模。 与以任务为
4、中心的商业工作流相比,科学工作流虽然共享了商业工作流的一些特性,但其主要是以数据为中心[3],常常涉及大规模科学计算,具有描述科学数据的元数据或者注释。因此,科学工作流实际上是数据管理和流程管理的结合[4]。探索数据库技术用于科学工作流管理已成为当前的研究热点。通常,工作流管理系统(WFMS)使用数据库管理系统(DBMS)来存储任务描述以及工作流数据,并在DBMS之上实现各个工作流功能模块。然而目前一些研究证明[5,6],大多数WFMS的功能可由DBMS提供,许多成熟的数据库技术,如计划、查询、数据跟踪以及并发控制等均可用于工作流管理系统中。采取DBMS的方式实现科学工作流管理,可以减少实现开
5、销,增加优化的可能性,使其以一种类似于传统数据库操作的方式进行工作流管理。因此,采用以数据库系统为核心的科学工作流管理体系架构,变得非常有意义。 科学工作流最重要的功能是作为识别实验数据的一种方式,称其为数据跟踪(Data Provenance)[7,8],它用于提供数据的派生历史,解释数据的由来,这对于实验分析,错误诊断以及核实实验结果的有效性很有帮助。另外,当产生实验数据的实验步骤发生改变时,能通过数据的派生历史跟踪实验进程,确定需要重做哪些步骤以便更新实验结果。因此,数据跟踪主要包含两个重要信息:用于产生实验数据的数据源,以及所经历的实验步骤。 目前,数据跟踪的重要性已经被多个
6、科学工作流项目所认可,如GridDB[6],Chimera[9],myGRID[10],CMCS[11]。注释和反向是目前两种主要的数据跟踪方法。注释将一个数据的派生历史搜集起来作为元数据,与数据一起存放在数据库中,用于解释数据的来源。反向方法主要应用逆向查询或者逆向函数,由结果数据溯源到其源数据。但两者都有不足之处,注释不能为细粒度的实验数据提供良好的存储规模,因为记录完整的派生历史可能超过数据本身所需要的存储空间。反向方法从存储的角度来看似乎更好,因为逆向函数或逆向查询能标识某一类数据的派生信息,但每次需要查询数据源时,它需要产生一个逆向函数或逆向查询去计算派生信息,在数据量大的情况下,执
7、行效率较低。 本文,我们首先提出了一个集成对象代理数据库的科学工作流服务框架,并在此框架下着重研究基于对象代理模型的数据跟踪方法,该方法能借助实验数据间的双向指针实现数据跟踪,能提供比注释或反向方法更高的性能,不仅节省了大量的存储空间,而且减少了额外的计算代价。 本文的组织如下:第2节介绍了一个集成对象代理数据库的科学工作流服务框架。第3节提出了基于对象代理模型的数据跟踪方法。第4节给出了实验结果和分析。第5节分析并比较了一些相关工作。最后总结全文并提出下一步需要开展的工作。 2 集成对象代理数据库的科学工作流服务框架 集成对象代理[12]数据库TOTEM的科学工作流服务框架如图1
8、所示,它将数据管理和工作流管理有效的结合,以对象代理数据库来建模科学工作流,并采用类似SQL语言的方式来执行,管理和监控科学工作流。 图1 集成对象代理数据库的科学工作流服务框架 该框架使用对象代理数据库TOTEM作为科学工作流的运行环境,提供科学工作流所必需的工作流设计和执行功能,从而取代商业工作流引擎的核心位置。工作流设计主要用于定义工作流模式,模式定义通过对象代理数据库中的类和代理类定义工作流中不同科学任务的输入和输出,通过任务输入输出间的对象代理关系实现工作流的自动执行。工作流执行是系统的核心模块,它主要采取数据驱动的方式,使得科学任务调用相应的科学程序对提供的输入数据进行计算
9、将执行转化为对数据库的插入和更新操作从而实现工作流的自动执行。 其中,科学程序使用web服务描述语言(如,WSDL)将其封装,我们称其为科学服务程序。它仅仅提供程序的接口而不必关心程序的具体实现,隐藏了它们的异构性,使它们能被任何类型的客户端应用程序存取。从图1中我们可以看出,服务提供者使用公共的UDDI注册器注册服务描述,客户端查询UDDI得到服务描述细节,找到所感兴趣的服务,并构造和执行工作流。一旦工作流中的某一任务被触发,它通过UDDI接受服务的输入参数,并向SOAP服务器发送合适的SOAP消息,接受SOAP消息的SOAP服务器触发服务的实际实现,结果被返回到SOAP服务器,再返回给
10、客户端。一个任务的输出可能被直接传递或修改,并作为下一个任务的输入。
2.1 工作流建模
科学工作流由科学数据和操作它们的科学任务组成。科学任务具有输入数据与输出数据,我们建模输入、输出数据作为对象代理数据库TOTEM中的类和代理类,其中,科学任务的输入数据是其直接前驱科学任务的输出数据。工作流流程初始科学任务的输入数据用类来定义,构成工作流流程的所有科学任务的输出数据定义为其输入数据的代理类,代理类的类型根据对应工作流模式的不同而有所不同。被科学任务调用的科学服务程序定义为输入数据对象属性上的读方法。
2.1.1 数据声明
定义1工作流流程初始科学任务的输入数据被定义成类C = 11、 A>。
1. O是C的数据对象集。o∈O是C的一个数据对象。
2. A是C的属性集合。(Ta:a)∈A分别代表一个属性的类型和属性名。数据对象o的属性a的值表示为o.a。对每个属性Ta:a,都有两个基本方法。
read(o, a)↑ o.a,write(o, a, v)o.a := v。
这里,,↑分别代表激活、结果返回。
定义2 工作流流程除初始科学任务外的其他科学任务的输出数据基于其输入数据来定义,前者称为后者的代理类,后者称为前者的源类。源类中的数据对象与其代理类中的数据对象通过双向指针链接。代理数据对象拥有自己的标识符,并通过切换操作完全或部分共享源数据对象的属性值,同 12、时还可以增加属性。令Cs = 13、化,聚集,分组和组合。
2. Ad∪Ad+是Cd的属性集。
(1) (Tad:ad)∈Ad是从(Tas:as)∈As继承而来的属性。对代理数据对象od的属性值ad的计算通过切换操作最终作用到源数据对象的属性as上。由于更新继承的属性值不符合科学工作流的要求,所以属性ad的写方法不存在,ad读方法的切换操作定义如下:
read(od, ad)↑ fTas→Tad (read(os, as))
(2) (Tad+ : ad+)∈Ad+是增加的属性,其基本方法定义如下:
read(od, ad+)↑ od.ad+
write(od, ad+, vd+)od.ad+ := vd+
根据该 14、定义,每次查询代理数据对象继承的属性值仍然需要通过访问源数据对象的切换操作来计算。由于科学计算的结果数据可能由运行时间较长的科学程序产生,所以最好物化继承的属性值以避免每次查询时重新计算它们。物化的继承属性的读方法定义被修改如下:
read(od, ad)↑od.ad.
即继承的属性值能直接从代理数据对象中读取。
源数据对象上的更新将触发更新迁移过程对代理数据对象进行更新,也就是,如果增加,删除或修改源数据对象,相应的代理数据对象也会被增加,删除或修改。由于源数据对象与其代理数据对象之间存在各种依赖关系和语义约束,其一致性可通过更新迁移进行维护。
2.1.2 流程声明
工作流流程的执 15、行可能需要连接多个科学任务,任何复杂的工作流流程能被简化成在给定数据上按某种顺序执行的科学任务序列。本框架的特点是将工作流流程看成一系列数据的相互连接,将工作流任务间的相互关系转换为任务关联数据间的关系,同时采用对象代理数据库根据不同的工作流模式来建立数据间的关系,利用更新迁移机制触发工作流的自动执行,因此能够支持[13]提出的几种常见的工作流模式,包括:顺序模式,并行分支模式,同步模式,单选模式,简单合并模式,多路合并模式,多路选择模式等。
如图2(a)所示,任务A的输出AOutput定义为任务B的输入,任务B的输出定义为类AOutput的Select型代理类BOutput。任务B对应的科 16、学服务程序作为AOutput中数据对象属性上的读方法,一旦A完成对输入数据的计算,往AOutput中插入结果数据对象时,会触发B的执行,并在BOutput中派生对应代理数据对象。
图2 对象代理模型建模工作流
如图2(b)所示,任务B和C的输出BOutput和COutput分别定义为任务A的输出类AOutput的Select型代理类。对于并行分支模式,一旦A完成对数据的计算,往AOutput中插入一个或多个结果数据对象时,会同时触发B和C的执行,并在BOutput和COutput中派生对应的代理数据对象。
如图2(c)所示,任务A,B的输出分别定义为类AOutput,BOutput;任务 17、C的输出定义为AOutput和BOutput的Join型代理类COutput。对于同步模式,只有当A和B都完成时,在AOutput和BOutput中分别产生数据对象,才会触发C的执行,并在COutput中派生一个代理数据对象。同步模式中的任务同步要求转换为Join型代理类的更新迁移。
如图2(d)所示,任务B和C的输出分别定义为任务A的输出AOutput的Select型代理类BOutput和COutput。对于单选模式,只有一个分支会被执行。当A往AOutput插入数据对象时,数据库会根据BOutput和COutput的代理规则,触发相应分支的执行,并派生相应的代理数据对象到BOutput和 18、COutput中。
如图2(e)所示,任务A与B的输出分别定义为类AOutput和BOutput;任务C的输出COutput定义为AOutput或BOutput的Select型代理类。对于简单合并模式,只有一个分支A或B被触发执行,一旦任务执行完成,往AOutput或BOutput插入数据,触发C的执行,并会在COutput中派生相应的代理数据对象。
如图2(f)所示,任务A与B的输出分别定义为类AOutput和BOutput;任务C的输出COutput定义为AOutput和BOutput的Union型代理类。对于多路合并模式,A和B中任何一个分支执行完,分别往AOutput或BOutpu 19、t插入数据对象时,都会触发C的执行,并在COutput中派生相应的代理数据对象。
如图2(g)所示,任务B,C和D的输出分别定义为任务A的输出AOutput的Select型代理类BOutput,COutput和DOutput。对于多选模式,至少B,C和D中有一个分支会被执行,当A往AOutput插入数据对象时,数据库会根据BOutput,COutput和DOutput的代理规则,触发任务执行,并派生相应的代理数据对象到BOutput,COutput和DOutput中,从而触发相应分支的执行。
采用对象代理数据库建模工作流,使得与工作流模式相关的控制逻辑由数据库来实现。由于除初始任务外,所有 20、任务的输出都定义为该任务所有直接前驱任务的输出类的代理类,所以一旦前驱任务往其输出数据类中插入数据,更新迁移将根据各个输出类的代理规则,调用后继任务进行计算,派生对应的代理对象到后继任务的输出类中。
2.2. Atlas高能物理工作流的建模与执行
我们引用Atlas高能物理工作流[5]解释构造和执行工作流的过程。如图3(a)所示,Atlas工作流包括三个科学任务,分别执行事件发生器(gen)程序,快速模拟探测器程序(atlfast)和慢速模拟探测器程序(atlsim)。gen接收一种粒子的质量,产生一个event文件 21、入到程序atlfast 和atlsim,模拟两种探测器对粒子衰变事件的反应,并且产生包含数值fImas 和sImas 的文件,两个结果数值实际上是粒子衰变而产生的子粒子的质量之和。最后,比较这两个结果。
图3 Atlas工作流建模
图3(b)和3(c)分别描述了Atlas工作流模型及对象代理数据库中对应的数据库模式。对象代理数据库语言[14]建立Atlas工作流如下,其中gen,atlfast和atlsim被封装成三个科学服务程序,分别定义为event、fImas 和sImas的读方法。
第一个科学任务的输入和输出类定义如下:
CREATE CLASS gC (pmas int); 22、
CREATE SELECTDEPUTYCLASS evts AS (SELECT gen(pmas) AS (event int) FROM gC);
类gC的pmas属性表示输入的粒子质量,由类gC派生的代理类evts 存储由科学服务程序gen 产生的event文件,其中event属性表示文件标识符。
执行科学服务程序atlfast和atlsim的科学任务的输出类分别定义为类evts的Select型代理类fC及sC:
CREATE SELECTDEPUTYCLASS fC
AS (SELECT atlfast(event) AS (fImas int) FROM evts);
23、
CREATE SELECTDEPUTYCLASS sC
AS (SELECT atlsim(event) AS (sImas int) FROM evts);
fC及sC分别存放科学服务程序altfast 和atlsim 产生的结果数据 fImas及sImas,它们表示粒子衰变得到的子粒子的质量总和。
类fC和sC的Join型代理类compare比较atlfast和atlsim所产生的结果fImas和sImas。
CREATE JOINDEPUTYCLASS compare AS
(SELECT fC.fImas, sC.sImas FROM fC, sC WHERE fC→ev 24、ts.event = sC→evts.event);
因此,Atlas工作流的建立通过不断的派生代理类组成。向类gC中插入一个数据对象将启动Atlas工作流的自动执行,如:
INSERT INTO gC VALUES (100);
一旦一个pmas值为100的数据对象被插入到gC,根据evts的代理规则,自动触发第一个科学任务,也即科学服务程序gen执行,并在evts类中产生它的代理数据对象evts1,同样,evts1触发科学服务程序atlfast和atlsim的自动执行,并将执行完后的结果分别添加到类fC和sC中,最终导致产生对象compare1。另外,如果gC1的pmas值被修改,所 25、有数据对象包括evt1、fC1、sC1以及compare1将自动的重新计算。
集成对象代理数据库TOTEM的科学工作流服务框架意味着与数据库的紧密结合。工作流的声明和定义使用了类似SQL 的对象代理数据库语言,触发、查询和执行使用SQL来完成。因此,WFMS的管理操作以类似于传统数据管理操作的方式来完成。
3 基于对象代理模型的数据跟踪
本节在该框架的基础上提出了一种基于对象代理模型的数据跟踪方法。区别于一般的注释和反向等数据跟踪方法,利用对象代理数据库内部对象间的双向指针可以实现高效的数据跟踪。
3.1数据跟踪
该框架使用TOTEM数据库的类、代理类为科学任务的输入数据和输出数 26、据建模,其中,每一个科学任务实现由输入数据到输出数据的映射,输入数据和输出数据通过输入数据类和输出数据类中的数据对象或代理数据对象来表达。每一个数据对象或代理数据对象在数据库中具有唯一的对象标识OID。所以该框架可以基于对象之间的OID双向指针来实现数据跟踪。
对象OID间的双向指针通过TOTEM自身维系的双向指针系统表tt_bipointer来实现,记录了所有对象与代理对象之间的联系。科学任务的输入等于该任务所有直接前驱任务的输出数据类,科学任务的输出定义为该任务的输入数据类的代理类,也就是说,任务的输出数据对象是其直接前驱任务的输出数据对象的代理对象,通过系统维护的数据对象和代理数据对象 27、间的双向指针,可以查询到一个任务的输出数据对象是由其前驱任务的哪些数据对象所生成的。如图4中的tt_bipointer结构所示,SourceClass_oid表示源类的OID,SourceObj_oid表示源对象的OID,DeputyClass_oid表示代理类的OID,DeputyObj_oid表示代理对象的OID,可以通过DeputyObj_oid直接查找到SourceObj_oid。
由于科学任务的输出是其直接前驱科学任务的输出数据类的代理类,因此,一旦前驱任务的输出数据类中产生结果数据,对象代理模型的更新迁移将会自动触发后继任务的执行,并派生代理数据对象到其后继任务的输出数据类中。同 28、时,在系统表tt_bipointer中增加OID映射关系。对于Select和Union代理类中的代理对象,它与源对象在tt_bipointer系统表中具有一个一对一的映射关系;对于Join代理类中的代理对象,由于一个代理对象是由多个源对象产生的,因此,它与源对象具有多条映射关系,其中每一条映射关系表示它和其中一个源对象的对应。
另外,数据跟踪不仅需要找到产生数据的数据源,还需要提供产生这些数据所经历的实验过程[15]。TOTEM数据库将科学服务程序作为对象属性的读方法存放在tt_switching系统表中。如图4中的tt_switching结构所示,Class_oid表示类的OID,Attr 29、表示对象属性,Proc表示科学服务程序,借助tt_bipointer系统表中的DeputyClass_oid域,可以在tt_switching系统表中查找到DeputyObj_oid经过了哪些科学服务程序的计算。
图4 tt_bipointer与tt_switching
图5是Atlas工作流的tt_bipointer与tt_switching内部结构,详细记录了类gC中的数据对象与evts中的代理数据对象及evts中的代理数据对象与fC中代理数据对象的映射关系,其中Class_oid中的1、2和3分别表示类gC、evts和fC。从图中可以看到,类gC中的OID为1的数据对象 30、经过科学服务程序gen的计算,得到evts类中OID为101的数据对象。同时,evts类中OID为101的数据对象经过科学服务程序atlfast和atlsim后在fC类中产生OID为201的代理数据对象。
图5 Atlas的tt_bipointer与tt_switching内部结构
3.2跟踪查询
基于对象代理模型的数据跟踪方法可以根据系统表tt_bipointer与tt_switching查找到数据对象的来源和所经历的科学程序,即找出一个数据对象完整的派生信息,实现数据跟踪。
定义3 opdep表示代理操作,其中opdep分成以下三种:
(1) Select
Cd = sel 31、ect(proc(Cs))是应用操作select到源类Cs中而形成的类,并对选择出的数据对象应用科学程序proc。假定一个对象od∈Cd,根据操作select,我们定义od在类Cs中的派生信息是P(Cs) (od) = select-1 (Cs) (od) = { 32、Cms)(od) = union-1 (C1s,…,Cms)(od) = { 33、 oms分别为od在C1s,…,Cms中的源数据对象。
如果Join操作仅仅用于比较实验数据的结果,那么Proc可以允许为空。
定义4 C1b,…, Cnb是基本科学类,Cd是C1b,…, Cnb经过多次opdep操作生成的代理类。考虑数据对象od∈Cd。Cd = opdep(proc1(Deputy1),…, prock(Deput yk)),其中Deputyj是基本科学类C1b,…, Cnb经派生得到的中间代理类,k≧j≧1。假设od’∈Deputyj,od’应用操作opdep派生数据对象od(定义3),并且ob∈Cib,n≧i≧1, 派生od’到Deputyj中(本定义递归),那么o 34、b派生od到Cd中。因此,od在C1b,…,Cnb中的派生信息是P(C1b,…,Cnb)(od) = {C1b*,…,Cnb*}。其中C1b*,…,Cnb*分别是{ 35、tyk));
PQ(od, Cd, (Deputy1,…,Deputyk))={Deputy1*,…, Deputyk*}; //其中Deputy1*,…,Deputyk*分别是{ 36、//oDeputyjd表示od在Deputyj中的源对象;
Return (C1b*,…, Cnb*);
End
PQod,Cd计算od在C1b,…, Cnb中的派生信息,程序首先计算(Deputy1,…,Deputyk)经过一层代理操作得到的派生信息{Deputy1*,…,Deputyk*},然后不断递归计算每一个Deputyj中oDeputyjd的派生信息。
如图5,如果我们要计算fC类中对象OID为201的数据对象的派生信息,容易发现这个数据对象是evts类中为101的数据对象经过科学服务程序atlfast的计算而得到的代理数据对象,因此,它在evts类中的派生信息是P(evt 37、s)(od) = {<101, evts, atlfast >}。同样,evts类中OID为101的数据对象是gC中OID为1的数据对象经过科学服务程序gen的计算而生成的,所以OID为1的数据对象在gC类中的派生信息为P(gC)(od) = {<1, gC, gen>}。由此看出,数据对象的派生信息能通过双向指针直接构造,节约了记录派生信息的存储空间,也不必使用逆向查询或逆向函数进行数据跟踪,提高了查询效率。
3.3数据物化
在跟踪查询过程中,通常需要查询中间数据的属性值,如追踪fC类中OID为201的数据对象在gC中的派生信息时,需要查找evts类中OID为101的数据对象属性值。由于 38、该数据对象是gC类中OID为1的数据对象的代理对象,为了减少额外的存储空间,该数据对象没有存储实际的数值,而是通过切换操作与它的源数据对象共享,因此查询它的属性值时,需要通过查找它的源数据对象的属性值再计算得到。由于该数据对象的属性值是源数据对象的属性值经过复杂的科学程序计算得到,因此,会导致很低的追踪性能。
物化数据可以提高追踪的性能。如果物化evts类中OID为101的数据对象属性值,那么一旦用户提出查询这个数据对象的属性值,该属性值可以立即被找到而不必切换到类gC中OID为1的数据对象,再计算出它的值,因此物化中间数据能帮助直接查询中间结果而不需要重新计算它们,从而增强了追踪性能。然而 39、如果物化整个中间数据,那么可能造成很大的存储开销和维持代价,同时许多中间数据也许与用户感兴趣的最终数据毫不相关,因此没有必要完全物化它们。
为了减少存贮和维持代价,我们提出一种部分物化中间数据的模式PM,PM只物化具有代理数据对象的中间数据。例如,我们仅仅物化evts类中需要被输入到科学服务程序atlfast 和atlsim的对象,与完全物化evts类中数据对象相比,大大地节省了存储空间。
相对于完全物化或不物化中间数据而言,PM模式也能减少对象更新维持的代价。例如,更新gC中的一个数据对象ogc时,PM首先需要计算evts类中它的代理数据对象oevtsd的值并判断是否引起fC类中oev 40、tsd的代理数据对象ofcd的更新,如果不会导致更新,根据PM的说明,oevtsd一定未被物化,因此系统不需要消耗额外时间将被更新的oevtsd数据对象写入磁盘。此时,如果采用完全物化这种方式,那么系统需要消耗额外时间将被更新的oevtsd对象写入磁盘。这种情况能保证与不物化这种方式相同的维持代价。
如果会导致更新,那么oevtsd一定被物化,因此可根据被更新的oevtsd的值直接更新数据对象ofcd的属性值,这种情况能保证与完全物化这种方式相同的维持代价。此时如果采用不物化这种方式,即oevtsd未被物化,那么就需要根据基本数据对象ogc的属性值重新计算ofcd的属性值,该过程经历了gen 41、和atlfast两个科学服务程序的计算,虽然此时PM需要消耗额外时间将被更新的oevtsd数据对象写入磁盘,但这个时间显然远远少于重新计算数据的时间。因此PM也能有效的减少对象更新维持的代价。
另外,由于最终数据的跟踪查询只与被物化的中间数据相关,因此这种模式并不影响追踪的性能。
4 性能测试
这个部分测试了PM模式的跟踪性能和维持代价,并与未物化中间数据模式NM进行了比较。
4.1 实验模型
实验模型按照图3(b)的结构设计。简单起见,我们假设只有两层代理类,其中第一层代理类evts存储程序gen的结果,并且完全地继承gC中的数据对象;第二层代理类fC存储科学服务程序atlfa 42、st的结果,并且继承evts中大约40%的数据对象。为了模拟真实的环境,我们假设gen和atlfast分别运行3 秒和2 秒。模式NM和PM分别描述不物化和部份物化类evts。
我们首先比较随着基本类大小的增加其两种模式在平均追踪查询、对象更新维持代价和存储开销上的性能,基本类的大小从100,000变化到500,000个对象。其次分析基本类数据对象为500,000时,随着查询率的增加,500,000个对象分别所需的追踪查询时间,更新维持时间,以及系统负载。更新维持代价和存储开销分别描述更新维持evts类和fC类的总时间以及它们总共占用的存储空间。追踪查询或更新维持时,我们假设每次操作只追踪或 43、更新一个数据对象,并计算半小时内,成功完成的操作数量。实验环境采用赛扬2.0G CPU,256M内存,Linux操作系统。
4.2实验结果
图6(a)、图6(b)和图6(c)分别显示PM和NM模式的平均对象追踪时间,维持代价和存储开销。图6(d)、图6(e)和图6(f)分别显示在基本类具有500,000个对象时,随查询率的增加,PM和NM模式所需的追踪查询时间,更新维持时间,以及系统负载。
图6 性能测试
图6(a)显示了PM模式比NM模式取得更高的追踪性能,并随基本类大小的增加,NM模式消耗的追踪时间变长。图6(b)显示了随着基本类大小的增加,PM模式和NM模式的更新 44、维持时间都增加,但PM模式有更好的维持性能。图6(c)显示PM模式的存储开销比NM模式大。
图6(d)和图6(e)显示随查询率的增加,追踪查询时间和更新维持时间成比例的增加和减少。图6(f) 显示了PM模式具有更好的系统性能。而NM模式随查询率的增大,所消耗的时间呈上升趋势。
根据上述分析,由此得出在运行时间较长的科学实验中,PM模式显示出比NM模式更好的性能,尤其PM模式在基本类有大量数据对象而最终的数据对象仅有一小部分时显得特别有效。当然,由于PM模式的存储开销比NM模式大,如果存在大量的最终数据对象,并且这些数据对象本身是由运行时间非常短的程序产生,那么NM模式可能也会显示出较好的性 45、能。
5 相关工作
科学工作流技术研究在近些年得到很好的发展,特别是将web服务技术应用到科学工作流中已引起了广泛关注[1,2,15],它们通常采用基于XML的语言如WSFL,XLANG,BPEL4WS等表达web服务组合之间的控制流。然而,这些语言主要针对商业流程建模,对于将web服务应用到以数据库为核心的科学工作流系统中的研究几乎没有被探讨。据我们所知,第一个倡导WFMSs和DBMSs相结合的系统是ZOO[5]。ZOO是一个桌面实验管理环境,它使用面向对象语言Moose建模工作流之间的控制流,将其表示为任务与输入数据、输出数据间的关系。通过在关系上安排相应的规则来触发任务的执行。与 46、ZOO类似,GridDB[6]同样基于数据库模式来构建工作流,不同的是,它关注的是网格环境,并使用了更加简单的关系模型来构造工作流。程序的输入和输出被建模为关系表,用户使用功能数据建模语言FDM定义程序以及程序的输入与输出间的关系。通过触发器的使用,在输入表中插入元组能触发程序的执行。文献[16]提出了一种紧密集成WFMS和DBMS的工作流建模语言。初始的输入数据和程序被描述为活动关系表,派生的数据和程序被描述为活动视图,工作流通过不断的定义活动视图而组成,程序的触发和执行通过SQL语句来完成。与ZOO和GridDB一样,集成对象代理数据库的科学工作流服务框架也是基于数据库管理系统为核心来实现 47、科学工作流管理。它使用对象代理模型来建模工作流,表达工作流的控制逻辑,不仅能对同一任务的输入和输出进行建模,还对任务间的数据关系进行建模。最重要的是,利用对象代理数据库内部对象间的双向指针可以实现高效的数据跟踪。
作为一个关键组件,数据跟踪方法已经被很多科学工作流和数据库领域研究了。主要包括注释和反向两种方法。反向方法主要是应用逆向查询或者逆向函数,由结果数据溯源到其源数据。而注释的方法则是将一个数据的派生历史搜集起来作为元数据,对源数据和处理过程进行描述。当前,大多工作流管理系统更依赖于注释[9,10,11],Chimera[9]分析虚拟数据目录并提出了表示操作序列的抽象有向无环图。一些数 48、据跟踪系统mygird[10], CMCS[11]也使用RDF和OWL提供语义信息以便于实现科学工作流在合作环境中的交互,然而,CMCS对语义信息的支持比较有限,所以真正在数据跟踪信息中提供语义信息的只有myGrid,它将本体概念注释到数据跟踪日志以提供丰富的语义。然而,注释描述数据对象的派生历史,因此,既使数据是粗粒度的,注释信息占用的存储空间也可能比数据本身大。而在基于对象代理模型的数据跟踪方法中,数据对象的派生历史能通过双向指针直接构造,因此节约了大量的存储空间。
反向方法从存储角度看,特别对大量细粒度的数据似乎是更佳的选择,因为逆向函数或查询标识一整类数据的派生信息。许多数据库领域[ 49、7,17,18,19]都采取这个方法为用户提供面向数据的数据跟踪服务。Buneman[7]通过反向方法确定了数据跟踪的两种形式,why表示数据产生的原因,而where提供产生数据的源数据。Trio[17]使用反向方法自动地通过视图查询或用户定义的函数确定元组的源数据。任何使用数据库查询和函数构造工作流的系统均可使用这样的技术。然而,并非所有的函数都有逆函数[20],虽然文献[18]提出一个框架以便根据弱逆向函数计算近似的源,但该文并没有提供产生弱逆向函数的机制。基于对象代理模型的数据跟踪方法与反向方法具有一些相似性,例如,也要求“反向”查询以便找到派生该数据对象的源数据对象,但它不必使用逆向查 50、询或逆向函数计算数据的派生信息。反向方法虽然不会造成存储的开销,但每次一个数据的派生历史被需求时,它需要产生一个逆向函数或逆向查询去计算派生信息,在数据量大的情况下,执行效率较低。文献[21]也表明如果有大量的派生信息需求时,这种计算信息源的方法并不是好的选择。而基于对象代理模型的数据跟踪方法仅仅通过源数据对象与代理数据对象之间的双向指针便可查找到代理数据对象的派生信息,而不需要额外的计算代价。该方法也能有效的避免一些逆向函数不存在或计算不精确的问题。使用反向方法计算的派生信息通常需要存取信息源,而这些信息源可能很遥远或在一段时间内不可取。反向方法通常需要存储额外的辅助信息以便在数据跟踪时减少






