第32卷 第19期 I1o1.32 ・计算机工程 2006年1O月 October 2006 №19 Computer Engineering 软件技术与数据库・ 一文章编号:100 一428(2006)l __0o91—_o3 文献标识码;A 中圈分类号:TP311 种用于存储与查询半结构化数据的新方法 叶飞跃,蒙德龙,员红娟 (上海大学计算机工程与科学学院,上海200072) 摘要:由于半结构化数据缺乏模式信息,因而半结构化数据的存储与查询将是一个十分重要且具有挑战性的研究课题。利用关系数据库 存储半结构化数据可以重用数据库的查询优化器和事务处理机制,能够保证半结构化数据的一致性和完整性。该文提出一种实现半结构化 数据存储与查询的新方法,该方法使用关系数据库系统来实现半结构化数据的存储与查询。给出了把基于半结构化数据的查询重写为基于 关系的查询的算法,同时介绍一个可视化查询程序。 关健词:半结构化数据;查询重写;OEM New Approach for Storing and Querying Semistructured Data YE Feiyue,MENG Delong,YUAN Hongjoan (School of Computer Engineering and Science,Shanghai University,Shanghai 2000721 [Abstract]Storing and querying semistructured data will be a very important and challenging research because it lacks schema information.Using RDBMS to store semistructured data can reuse database’S query optimizer and transaction manager,which can ensure semistructured data’S consistency and integrality.This paper presents a new approach for storing and querying semistructured data.An algorithm is given to rewrite from semistructured data—based query to relation—based one.and a visual query program is introduced. [Key wards]Semistructured data;Query rewriting;OEM 半结构化数据是指那些结构隐含或无规则、不严谨的自 我描述型数据…。这样的数据介于严格结构化数据(如关系数 据库和对象数据库中的数据)和完全无结构的数据(如声音、 图像文件)之间 。半结构化数据的来源主要是:互联网和数 据集成。传统的数据存储、处理、查询技术不能直接应用于 这种数据类型,本文提出了一种基于关系的半结构 化数据的存储方法,并在此基础上给出了一种半结 构化数据的查询语言,且给出了把这种查询语言重 写为SQL语句的算法。为了克服直接输入半结构化 数据查询语句容易出错的缺点,我们还编写了一个 可视化查询程序,用于半结构化数据的可视化查询。 半结构化数据的模式描述方法很多,有基于图 的描述形式和基于逻辑的描述形式 】。在这里采用 的是比较有代表性的基于图的OEM(Object Exchange Mode1)模型。 及算法。OEM模型可以用一个带根有向图G(r,V,E)来表示, 其中r表示根结点;V表示对象集;E是有向边的集合,边 上的标签表示对象之间的关系,记作<Oi,label,Oj>,如<l,Pla yer,1 4>,<0,Club,20>等。若图G中存在<0 l,l I,O2>,<02,l2,O3 >,…,<0 ,l ,OI>,则称OEM模型图G中存在环路。 1基本概念 1.1OEM模型 OEM是斯坦福大学(Standford universi【y)Papako nstatinon等人提出的用来描述半结构化数据的数据 模型 。OEM模型的主要特征是自描述性。该模型 由表示对象的结点和带标签(1abe1)的有向边构成。每 个OEM对象可以用一个4元组来表示:(old,label,t ype,value)。其中oid是对象标识。label是对象的标 签描述,表示对象之间的关系。type是对象类型, 对象类型有两类:原子对象和复杂对象。原子对象是不可再 分的基本类型,如int,string,real等。复杂对象是对象引用 作者筒介:叶飞跃(1959一),男,教授,主研方向:数据库;蒙德龙、 员红娟,硕士 图1 OEM模星 的集合,每一个对象引用指向另一个对象。不失一般性,借 用文献【4 J中的OEM模型图来举例说明文中用到的相关概念 收稿日期:2005一l2—24 E-mail:mengdl2004@163.corn -9l一 维普资讯 http://www.cqvip.com
1.2标签路径、|l【据路径和路径实例 标签路径1p是以符号‘.’分隔开的标签序列,记作lp= I1.12…ln,n是1p的长度。如lpl=Club.Name.Official是一 条长度为3的标签路径。 数据路径dp是以符号‘.’分隔开的对象和标签交替出现 的序列,记作dp=Oo.Il_Ol_12…In,O ,n是dp的长度。 例如:dpl=0.Club.1.Name.2.Officia1.3。 称数据路径dp=Oo.11.O1.I2…In,O 为对应于标签路径 lp=l1.12…1 的路径实例。对于同一标签路径可能存在多个路 径实例。图1中有4条数据路径是标签路径lp2=Club.Player .Name的路径实例。它们分别是: dpI=0.Club.1.Player.5.Name.6 dp2=0.Club.1.Player.14.Name.15 dp3=0.Club.20.Player.22.Name.23 dp4=0.Club.24.Player.28.Name.29 1.3同类对象 所谓同类对象是指那些对应于同一标签路径的所有路径 实例中的最后一个对象。由同类对象组成的集合称为同类对 象集。例如对应于标签路径lp2的同类对象集是{6,15,23,29}。 2半结构化数据的存储 目前提出并实现了半结构化数据的存储技术主要有:文 本文件方式,RDB方式及OODB等方式 l。文本文件存储方 式的缺点是存储难度较大,不利于数据的检索和管理。对于 OODB方式,如果在事先不知道数据的类型信息时,数据加 载的代价可能是很高的;如果类型发生了变化,将导致代价 极高的模式更新。而半结构化数据的数据类型和模式是不固 定的,它随着数据的更新而发生变化。 利用RDBMS来存储半结构化数据具有如下的优点:当 前的关系数据库技术已十分成熟,商用的关系数据库都具有 高性能的查询引擎、良好的可扩展性、安全性和健壮性。利 用关系数据库存储半结构化数据可以重用数据库的查询优化 器和事务处理机制,能够保证半结构化数据的一致性和完整 性。但是,由于数据模型上的差异,因此利用关系数据库来 存储半结构化数据也给数据库技术带来了许多新的挑战。 半结构化数据模型本质上是基于带根有向图 l,用关系 表来存储半结构化数据必须保证不破坏或丢失原来数据的结 构信息和数据信息,因此,除了存储对象值之外,还要存储 对象之间的关系。本文提出一种基于边的半结构化数据存储 方法,使用3个关系表存储半结构化数据,半结构化数据的 结构信息蕴涵在关系表中。表结构及其意义表示如下(下划线 表示主键): root(rOID,chOI—D labe1)。这个表存储OEM的根结点ID、 根结点的子结点ID以及根对象名。 edges(pOID,chOID,label,lfag)。这个表存储OEM中的边, lfag字段用于表示chOID的对象类型,如果是原子对象则用 leaf表示,否则用ref表示。 values(Q ,type,Val—int,Val—string,Val—float….)。这个表 存储原子对象的类型和对象值。 图1所示的半结构化数据用关系数据库存储表示,如表 1~表3所示。 表1 root表 rOID ch0ID labe J 0 l premiership 0 20 premiership 0 24 premiership 表2 edges表 pO1D ch0lD label lfag 0 1 Club ref 0 20 Club ref 表3 values表 0ID type Valint Valstring Val float 3 Strlng Manchexter United 4 strlng Red Devils 这种存储方法只用3个关系表就把基于图结构的半结构 化数据信息和结构信息全部存储下来,对于半结构化数据的 标签路径、数据路径都蕴涵在关系表中,对半结构化数据的 查询就可以转化为对关系表的查询。 3查询 半结构化数据的特点是数据的结构不规则或不完整,其 模型都基于带根有向图,因此,半结构化数据的查询过程本 质上可以看作是从根结点开始对图的搜索过程 l。由于我们 采用的是基于关系的存储方式,因此对图的搜索过程要转化 为对关系表的查询过程,转化过程由后面的查询重写来实现。 3.1查询语言 在用于异构数据源集成的丛模型(PM)系统中,使用的查 询语言可以看作是Lorel的一个子集,查询类似于SQL语句 的结构,即 SELECT select,list FR0M from,list WHERE condition 例如,考虑查找运动员“Robbic Fowler”的国籍的查询, 查询可以表示如下: Q 1:SELECT x.nationality FROM premiership.club.player x WHERE x.name=“Robbic Fowler” 上面的查询语句不能直接用于RDBMS,必须把它改写 为RDBMS能够识别的SQL语句。 3.2查询重写 查询重写就是要把基于路径的半结构化数据查询改写为 基于关系表的SQL查询。结合前面介绍的半结构化数据的存 储方法,提出使用IN子句的查询重写方法,其基本思想是利 用IN子句对标签路径的同类对象集进行集合查找和集合交 操作。算法由下面3部分组成:(1)查询得到满足Q1中from 子句的同类对象集;(2)在满足第1步的同类对象集中查询满 足where子句的对象集;(3)在满足第2步的对象集中查询满 足整个查询的结果集。算法如下: 输入:半结构化数据查询语句Q 输出:基于关系的SQL查询语句 S1=“select DISTINCT rO1D from Root’’: lp=getFromLp(Q);//取from子句中的标签路径 for label∈lp S l=“select chO1D from edges where pO1D 1N r.. +s 1+“)AND(1abel=”+label+“)”: rp=getWhereLp(Q);//取where子句中的标签路径 s2=“select OlD from values where valstring”+whereCondition; ofrlabel∈rp s2=“select pO1D from edges where chO1D 1N C+s2+“)” +“AND(1abel=”+label+“)”: s3=“select DISTINCT pO1D from edges where pO1D 1N(.. +s1+¨)AND pO1D 1N C+s2+¨)”;//查询交集 rp:getselectLp(Q);//取select子句中的标签路径 维普资讯 http://www.cqvip.com
s4=“select pOID from edges where pOID IN C+s3+“r: forlabel∈rp s4=“select chOID from edges where pOID IN r’ +s4+“)AND(1abel=”+label+“)”: sql=“select Val—string from values where OID IN”+s4: //在对象值表上查询 return sql 例:上面的Q1查询使用重写算法改写后,得到如下所 示的SQL查询,其中左边一列是语句行号,右边的语句是改 写后得到的基于关系的SQL查询。 1 select Val string from values 2 whereOIDIN 3(select chOID from edges 4 where pOIDIN 5 ('select DISTINCT pOID from edges 6 where pOIDIN 7(select chOID from edges 8 where pOIDIN 9(select chOID from edges 10 where pOIDIN 1 1(select DISTINCT rOID from root) 1 2 AND flabel= Club’) 13 ) 1 4 AND(1abel=’Player ) l5 1 16 AND pOIDIN 1 7(select pOID from edges l8 where chOID IN 1 9 fselect OID from values 20 where val—string= Robbic Fowler 21 ) 22 ) 23 ) 24 AND(1abel= Nationality ) 25 ) 说明: (1)7~15行查询得到满足查询O1中from子句的同类对象集,即 (5,14,22,28}; (2)17-22行查询得到满足O1中where条件子句x.name=”Robbic Powler”的对象,即(22}; (3)第5行和16行实现(1)和(2)两步的交集,得到查询O1中满 足条件的对象集,即(5,l4,22,28}n(22}=(22}; (4)3~25行查询得到满足第(3)步的x.Nationality的对象集(19}; (5)最后通过第1、2两行在关系表values中查询得到满足条件 的运动员的国籍”English”。 3.3可视化查询界面 半结构化数据没有固定的模式,随着数据的变化模式也 会发生变化,这使得书写半结构化数据的查询语句非常不方 便,而且容易出错。为了克服这个缺点,我们编写了一个可 视化查询程序,程序界面见图2。 在可视化查询界面上,左边的面板显示半结构化数据的 模式图,用鼠标点击模式图中的标签名,对应的标签名就会 出现在右边的label文本框中,然后再点击Add按钮,就可 以把相应的标签添加到对应的查询子句中去。重复以上过程, 直到所需的标签路径和查询条件全部生成为止。最后点击界 面下方的Create按钮,程序就会按要求生成一条完整的查询 语句。如果要执行这个查询,则只要点一下Query按钮即可。 可见使用这个可视化查询界面,用户几乎不用输入什么内容, 只要用鼠标在这个界面上点几下就可以生成一条半结构化数 据查询语句,非常方便。 图2可视化查询界面 4性能分析 查询重写过程就是把对路径的搜索改写为对关系表的查 询。查询的路径长度决定重写后SQL查询的嵌套层数,路径 越长,重写后得到的查询语句的嵌套层数就越多。在DBMS 中,嵌套查询语句的执行是从最内层select查询开始的,并 逐层向外执行。查询主要是在表egdes上进行,为简化分析, 假定每一层select查询的时间开销为t,则嵌套m层的查询 的时间开销为mt。设有如下查询语句: SELECT x.1rp FROMlp x WHERE x.crp 令1rp的路径长度为n1,lp的路径长度为n2,crp的路 径长度为n3。则重写后的查询语句的select嵌套层数为 (1+n2)+(1+n3)+1+n1--n1+n2+n3+3 对于上面的查询Q1,n1=1,n2=3,n3=1,重写后的查 询语句的select嵌套层数等于8,查询开销为8t。可见,查询 的时问开销与查询语句中的select、from及where子句中的 标签路径的长度之和成正比。通过在关系表中建立索引,可 以减少查询中的t值,从而加快查询速度。 5结束语 半结构化数据的存储与查询及相关技术是异构数据源集 成和网络资源共享的一个研究重点。本文提出的半结构化数 据的存储与查询方法已经应用到我们的丛结构模型系统中, 实践证明该方法是可行和有效的。在下一步工作中,我们的 工作重点将是半结构化数据的查询优化。 参考文献 1 Abiteboul S.Querying Semi—structured Data[C].Proc.of ICDT Delphi Greece,l 997. 2王静,孟小峰.半结构化数据的模式研究综述… 计算机科学. 2001.28(2 :6 10 3 Papakons【ann【inou Y Garica M H,Widom J.Object Exchange户cross Heterogeneous Information Sources[C].Proc.of the IEEE ICDF. IEEE Computer Society Press.1995:25 l一260 4 Svetlozar N,Jeffrey U.Janet w.Representative Objects:Concise ReDresentations of Semisturctured.Hierarchical Data[C].Proc.of ICDE.1997:79 90 5聂培尧,李战怀,胡正国 一种基于XML的半结构数据的ORDB 存储方法….计算机工程与应用,2003,39(14):190—193,199. 6陈滢,王能斌.半结构化数据查询的处理和优化….软件学报. 1999,1O(8):883—890 9 —
因篇幅问题不能全部显示,请点此查看更多更全内容