用于优化针对垂直存储式数据库的查询的方法和设备的制作方法

文档序号:6614560阅读:132来源:国知局

专利名称::用于优化针对垂直存储式数据库的查询的方法和设备的制作方法
技术领域
:本发明总体涉及数据库管理领域,并且具体地,本发明涉及一种用于优化针对垂直存储式数据库的查询的方法和设备。
背景技术
:已经提出了资源描述框架(RDF:ResourcesDescriptionFramework)作为一种用于描述元数据(信息)的语言,尤其是用于描述针对万维网页上的资源的元数据。通常,可使用统一资源描述符(URI:UniversalResourceIdentifier)来标识万维网页上的资源。随着语义网络技术的发展,W3C(万维网联盟)已经推荐将RDF作为一种用于在语义网络应用中的多种资源之间交换信息的标准。图1示出了RDF数据存储表的一个例子。如图1所示,在RDF数据存储结构中,RDF数据通常是三元組,包括主语、谓词(也称为属性)和宾语。例如,在图1所示的存储表中的第二行的三元组表示了这样一个事实,即"SXZ是一个教授",其中"SXZ"是主语,"typeOf(是)"是谓词,以及"Professor(教授)"是宾语。在图1所示的存储表中的第五行的三元组表示了另一个事实,即"SXZ教课程l,,,其中"SXZ,,是主语,"Teach(教),,是谓词,以及"Coursel(课程l)"是宾语。在当前的RDF中,主语和谓词的值都应该最终解析为统一资源描述符(URI),而宾语的值既可以是统一资源描述符又可以是文字(literal)值,例如数字或者字符串。这种RDF数据存储结构实质上是一种垂直式数据存储结构,即,每个条目只表示一个简单的事实,例如,条目"SXZ是一个教授",以及条目"SXZ教课程1"。相反,传统的关系数据库是一种水平式数据存储结构,即每个条目表示主语的所有关系,例如,条目"sxz是一个教授,并且教授课程1"。RDF三元组也可以被表示为一张图,其中主语可以被表示为图中的源节点,表示统一资源描述符的宾语可以被表示为图中的宿节点,以及谓词可以被表示为连接源节点和宿节点的有向连接。当然,主语可以与多个宾语相关联。例如,图1中的三元组可以被表示为如图2所示的有向图。关于RDF的完整描述,可参见FrankManola和EricMiller的"RDFprimer.W3Crecommendation,Feb2004",该文件可以通过网址www.w3.org/TR/rdf-primer/获得。在此引入该文件作为参考。无疑,RDF正在成为语义网络的里程碑。为了在企业的广泛异质数据源之上执行语义查询,需要将现有数据转换成为RDF三元组数据。同时,针对RDF三元组数据,已经开发了例如SPARQL的语义网络查询语言,用以描述用户的查询条件。关于SPARQL的详细描述,可参见E.Prud,hommeaux和A.Seaborne的"SPARQLquerylanguageforRDF.W3Ccandidaterecommendation,April2006",在i匕引入该文件作为参考。经过数十年,已经广泛接受了成熟的关系数据库(RDB:RelationalDatabase)技术来管理各种应用数据。当前,存在两种常规方法来使用成熟的关系数据库技术管理RDF数据。一种方法是使用抽取-转换-装载(ETL:Extract-transform-load)方法将现有数据移植到特定的基于RDB的RDF三元组存储库中,其中用户可以查询和管理按照RDF三元组形式存储的数据。另一种方法是在传统的关系数据库上创建虚拟RDF视图,由此将RDF查询转换成为在传统系统中可冲丸行的结构化查询语言(SQL:StructuredQueryLanguage)。本发明关注于第一种方式,即管理和优化在关系数据库上建立的RDF三元组存储库中的RDF数据。根据基于RDB的RDF三元组存储库的存储设计,可以进一步将三元组存储库划分成为3个类型即1)通用RDF三元组存4诸库,2)改进的RDF三元组存储库;3)水平/二元表存储库。对于通用RDF三元组存储库,直接以具有主语、谓词和宾语三个列的通用表存储三元组,其中创建多个组合索引来改进其查询性能。例如,Oracle10gR2空间数据库和Jana2,两者都采用了典型的通用三元组存储。相对于通用三元组存储库,改进的三元组存储库可以管理更富于表达的RDFS(RDFSchema)/OWL(Web本体语言)及其相应的实例。类似于RDF,W3C建议RDFS和OWL支持本体表示。通过扩展RDF,RDFS提供定义域/范围的基本设施和类继承的能力。OWL允许定义更丰富的属性和关系,并相对于RDFS提供更多的约束。除了三元组表,改进的三元组存储还提供附加的方案(schema),例如"类/属性表,,以及"someValueFrom/allValueFrom表",来保持富于表达的RDFS/OWL本体,相应地,可将存储在三元组表中的实例移植到RDFS/OWL本体中。考虑这些附加表以进一步促进RDF数据上的本体的推理。改进的RDF三元组存储的特定例子包括IBMWebify、IBMSOR以及MySQL上的Sesame。不同于上述这两类三元组存储库,水平/二元表存储库将RDF数据分成多个水平/二元表,其中谓词可以看作为表名,而每个列分别是三元组的主语和宾语。代表性例子是DLDB-OWL和PosteGre上的Sesame。水平/二元表存储库的方案总是与存储的本体模型一致。一旦本体变化,则方案必须相应地改变。这是代价昂贵的。因而,关于RDF存储库的多数研究兴趣已经转移到三元组存储库。本发明适合于通用三元组存储库和改进三元组存储库两者。当前,在三元组存储库上已经实现了许多优化以改进查询性能。例如,为了节省空间开销,大多数三元组存储库在内部给URI和文字值赋予唯一ID(唯一标识符),并且将其单独存储在一个映射表中,其中将从三元组表中进一步参考该映射表。为了提高在文字值上建立的索引有效性,某些三元组存储库将文字值映射表物理地划分成为具有不同数据类型的多个表。为了使查询范围变窄,某些三元组存储库区分关系谓词和数据类型谓词,并且在不同的表中保存它们。此外,利用在IBMDB2中支持的例如多维集群(MDC:Multi-DimensionalClustering)表的某些特定数据库特征,某些三元组存储库根据它们的谓词将三元组本地化,这有助于对满足查询条件的三元组进行快速定位和高速緩存。尽管在三元组存储库中已经使用了许多优化,但是查询性能都不甚理想。为此,本领域特别需要一种能够提高针对垂直存储式数据库的查询性能的方案。
发明内容本发明的目的在于提供一种用于优化针对垂直存储式数据库的查询的方法和设备,其可以针对垂直存储式数据库结构的查询进行优化,以实现更高的查询效率。根据本发明的一方面,提供一种用于优化针对垂直存储式数据库的查询的方法。所述数据库中的条目可以被分成若干分区,每个分区具有表示所述分区中的条目的分区签名。该方法可以包括将从用户接收的第一查询分解为多个第一子查询;按照与产生所述分区签名的方式相对应的方式,为每个第一子查询产生签名;通过将每个第一子查询的签名分别与所有分区的分区签名进行比较,获得与该第一子查询匹配的所有分区;基于所述匹配的分区,重写由第一子查询转换而来的第二子查询,以得到重写的第二子查询;以及组合针对所有第一子查询的重写的第二子查询来形成第二查询,以便利用该第二查询执行对所述数据库的查询。根据本发明的另一方面,提供一种用于处理垂直存储式数据库的方法。该方法可以包括将该数据库中的所有条目分割成若干分区,为每个分区赋予唯一标识符,以及为每个分区生成签名。根据本发明的另一方面,提供一种用于优化针对垂直存储式数据库的查询的设备。所述数据库中的条目被分成若干分区,每个分区具有表示所述分区中的条目的分区签名。该设备可以包括分解装置,用于将从用户接收的第一查询分解为多个第一子查询;查询签名产生装置,用于按照与产生所述分区签名的方式相对应的方式,为每个第一子查询产生签名;分区获得装置,用于通过将每个第一子查询的签名分别与所有分区的分区签名进行比较,获得与该第一子查询匹配的所有分区;查询重写装置,用于基于所述匹配的分区,重写由第一子查询转换而来的第二子查询,以得到重写的第二子查询;以及查询组合装置,用于组合针对所有第一子查询的重写的第二子查询来形成第二查询,以便利用该第二查询执行对所述数据库的查询。根据本发明的另一方面,提供一种用于处理垂直存储式数据库的设备。该设备可以包括分割装置,用于将该数据库中的条目分成若干分区;分配装置,用于为每个分区分配唯一标识符;以及分区签名生成装置,用于为每个分区生成签名参考以下结合附图的详细说明,本发明的特征、优点以及其它方面将变得更加明显,在附图中图1是现有技术的RDF三元组存储表的示意图2是现有技术的RDF三元组映射图的示意图3是根据本发明的对RDF三元组进行图划分的示意图4是根据本发明的RDF数据存储表的示意图5示出了^f吏用布隆过滤器(BloomFilter)方法创建签名的例子;图6示出了使用布隆过滤器方法测试成员资格的例子;图7示出了使用相应参数的假阳性概率;图8示出了根据URI的划分来创建签名的例子;图9示出了根据本发明的用于处理垂直存储式数据库的设备的示意图IO示出了根据本发明的用于处理垂直存储式数据库的方法的流程的示意图11示出了根据本发明的用于优化针对垂直存储式数据库的查询的设备的示意图12示出了根据本发明的用于优化针对垂直存储式数据库的查询的方法的流程的示意图;以及图13示出了其中可以应用本发明的计算机系统的示意图。具体实施例方式本发明的基本原理在于,对传统的垂直存储式数据库进行分区,然后仅仅在相关的分区上执行查询,从而可以提高查询效率。为了描述起见,在以下本发明的实施方式的描述中,以RDF三元组存储结构作为垂直存储式数据库结构的例子。然而,本领域技术人员应该理解,本发明并不局限于RDF三元组存储结构,本发明可适用于其他垂直存储式数据库结构,例如电子商务数据库中所应用的数据存储结构。另外,在以下的描述中,将SPARQL查询作为从用户接收的第一查询的一个例子。应当理解,从用户接收的第一查询并不局限于SPARQL查询,而可以是任何其他合适的查询。数据准备过程下面首先详细描述本发明的数据准备过程。根据本发明,首先将RDF存储库中的三元组划分成为若干分区,并且对各个分区创建签名。在根据本发明的一个实施方式中,使用图划分技术来将RDF存储库中的三元组划分成为若干分区,其中划分的原则是在分区内连接是较密的,而在分区之间连接是较稀疏的,并且对跨越分区的连接分别在相应的分区中进行备份。图划分技术是用于将一张图划分为若干分区(子图)的传统技术,其在并行计算和VLSI设计领域中经常使用,在此对其不作赘述。目前,最常用的图划分技术例如是METIS图划分工具。应该理解,除了METIS图划分工具之外,本发明也可以采用任何其他图划分工具。具体地,如图3所示,可以首先将RDF存储库中的三元组映射成一张图。RDF三元组主语可以-波表示为图中的源节点,RDF三元组宾语可以被表示为图中的宿节点,以及RDF谓词可以被表示为从源节点到宿节点的有向连接。然后,利用例如METIS的常用图划分工具,对所形成的图任意进行划分,以形成若干子图,其中每个子图对应于一个分区。为了保证数据关系的完整性,针对跨越分区之间的连接,可以在每个相关分区内制作与该连接对应的三元组的副本。根据本发明的一个实施方式,可以对所形成的图进行划分,使得分区内的连接是较密,而分区之间的连接是较稀疏的。同时,针对跨越分区之间的连接,可以在每个相关分区内制作与该连接对应的三元组的副本,以保持分区后数据关系的完整性。传统地,RDF数据存储在三元组表中,其中该三元组表包括其值为RDF三元组主语的RDF主语列、其值为RDF三元组谓词的RDF谓词列、以及其值为RDF三元组宾语的宾语列。在本发明中,为每个分区分配一个标识该分区的唯一标识符。为了保持分区的标识符,进一步在三元组表中添加一个新的列,即其值表示对应的RDF三元组所在分区的唯一标识符列。这样,三元组表{主语、谓词、宾语}变成{主语、谓词、宾语、所在分区的标识符}的四元形式。图4示出根据本发明进行分区后的RDF数据存储表。进一步,在本发明中,还针对各个分区创建签名(signature)。签名最初起源于文本检索和对象检索。其优点是有助于通过过滤"指紋,,来极大地缩小搜索空间,并且在相对较小的数据集中执行精确查询。在本发明的一个实施方式中,使用布隆过滤器的经典方法来为各个分区生成签名。布隆过滤器方法可以用以针对对象集创建位矢量(BitVector),并且测试其成员资格。例如,当用户希望将x元素插入对应于集合S的过滤器中时,需要利用k个独立的哈希函数来得到k个数字或者k项,然后将位矢量中的相应元素设置为1。图5示出了^f吏用布隆过滤器(BloomFilter)方法创建签名的例子,其中使用了4个哈希函数。类似地,当用户希望针对集合S内部的元素y来测试成员资格时,还应利用相同的k个p合希函数来获得k项,然后测试所有k个相应项在集合S的位矢量中是否都是1。如果是,则y可能是集合S的成员并且进一步使用精确查询来验证。图6示出了使用布隆过滤器方法测试成员资格的例子,其中也使用了三个相同的哈希函数。布隆过滤器方法是创建签名的有用方式,其中理论上存在假阳性(falsepositives)。图7示出了使用相应参数的假阳性概率。请注意k是使用的哈希函数的数目,n是在RDF数据中特定划分的URI的数目,而m是位矢量的长度。在实验中,选择k-4以及m/n-5作为默认参数。从图7中可以看出,此时假阳性概率为9.2%。为了确保哈希函数的独立性,可以采用著名的密码学消息摘要算法(MD5方法)来针对各个数据库的每项中的URI生成哈希值。应当注意,本发明也可以使用其他算法来针对各个URI生成哈希值。图8示出了根据URI的划分来创建签名的例子。在此例子中,使用了2个哈希函数将每个URI哈希转换成为2项。接着,针对每个三元组,对位矢量执行或(OR)操作,以得到每个三元组的签名。同时进一步来对分区内所有三元组的签名矢量进行OR操作,以得到该分区的签名。例如,在图8的下面的表中的第一行表示主语"dc:me"的哈希值为从右向左第2和5位被置'T,的签名矢量,谓词"rdf:type"的哈希值为第6和8位被置'T,的签名矢量,以及宾语"dc:persion,,的哈希值为第1和2位被置"1"的签名矢量。然后,对三元组中每个元数据的签名执行OR操作,就得到了第一行的三元组的签名矢量"10110011"。依次类推,可以得到该分区中所有三元组的签名矢量。最后,对该分区中所有三元组的签名矢量执行OR操作,就得到了该分区的签名值。应该理解,本发明可以采用各种为分区产生签名的机制,只要所产生的签名能够反映分区所包括的三元组即可。下面,结合图9将详细描述根据本发明的用于处理垂直存储式数据库的设备。如图9所示,根据本发明的用于处理垂直存储式数据库的设备IO可以包括分割装置101,用于将该数据库中的条目分割成若干分区;分配装置102,用于为每个分区分配唯一标识符;以及分区签名生成装置103,用于为每个分区生成签名。下面结合图IO的流程图,对根据本发明的用于处理垂直存储式数据库11的设备10中的各个部件的操作进行详细描述。图10描述了根据本发明的用于处理垂直存储式数据库的方法的流程。如图IO所示,首先,在步骤S201中,分割装置101可以将RDF数据库中的所有条目分割成若干分区。具体地,分割装置101将所述RDF存储库11中的所有条目映射为一张表示所有RDF三元组的图,其中RDF三元组的主语可以被表示为图中的源节点,RDF三元组的宾语可以被表示为图中的宿节点,RDF三元组的谓词可以被表示为从源节点到宿节点的有向连接。然后,分割装置101采用如上所述的图划分方法来该图分割成若干子图,每个子图对应于一个分区。在本发明的一个实施方式中,该图被划分为若干子图,使得子图内的连接是较密的,跨越子图之间的连接是较稀疏的,以及其中对于跨越子图之间的连接,在每一个相关子图内制作该连接的副本,以使得分割后的子图能够反映所述RDF存储库中的所有数据关系。然后,在步骤S202处,分配装置102为每个分区赋予唯一标识符,例如图4中所示的分区标识符1、2、3。接下来,在步骤S203处,分区签名生成装置103按照如上所述的创建签名的方法为每个分区生成签名。这样,就可以得到如图8所示结构的RDF存储库。该RDF存储库可以包含其值表示RDF主语的主语列、其值表示RDF谓词的谓词列、其值表示RDF宾语的宾语列、以及其值表示对应的RDF三元组所在分区的唯一标识符列。另外,可以得到每个三元组以及每个分区的签名。根据本发明,当有新的RDF三元组加入RDF存储库时,可以得到新的三元组所在的分区,并且为所在分区生成新的签名。根据本发明,可以将分区标识符及该分区的签名值相关联地存储在一个映射表中。优选地,该映射表可以置于内存中,以提高查询效率。在三元组表和相关签名的位中通过添加、更新和删除响应的记录,可以很容易地对数据库进行维护。例如,当将三元组添加到RDF存储库之中时,首先检查三元组的主语和宾语定位在哪个分区,并且由此将具有相应划分标识的记录序列插入三元组表之中。最后,通过将位设置为1来更新这些分区的签名,所述位的定位由所插入三元组的URI的哈希函数进行计算。查询优化过程下面描述根据本发明的数据库查询优化过程。图ll示出了根据本发明的用于优化针对垂直存储式数据库11的查询的设备12的示意图。如图11所示,根据本发明的用于优化针对垂直存储式数据库11的查询的设备12可以包括分解装置131,用于将用户接收的SPARQL查询分解为多个子SPARQL查询;查询签名产生装置132,用于按照与上述产生分区签名的方式相对应的方式,为每个子SPARQL查询产生签名;分区获得装置133,用于通过将每个子SPARQL查询的签名分别与所有分区的签名进行比较,来获得与该子SPARQL查询匹配的所有分区;查询重写装置134,用于基于匹配的分区,重写由该子SPARQL查询转换而来的子SQL查询,以得到重写后的子SQL查询;以及查询组合装置135,用于组合针对所有子SPARQL查询的重写后的子SQL查询来形成重写后的SQL查询,以便利用该重写后的SOL查询执行对数据库11的查询。下面结合图12对根据本发明的用于优化针对垂直存储式数据库的查询的设备12中的各个部件的操作以详细描述。在步骤S301处,分解装置131将用户接收的SPARQL查询分解为多个子SPARQL查询。具体地,将所述SPARQL查询映射为查询图,并且枚举所述查询图中的2可达子图,其中每个2可达子图对应于一个子SPARQL查询。这里,2可达图是这样的图,其中任何顶点是由至多2个连接或者边可达的。具体地,在分区签名中,根据匹配的分区的数目,需要从查询图中递归地找到具有最高选择性的2可达子图,直到图中所有查询节点都被包含在各2可达子图中为止。接下来,在步骤S302处,判断子查询是否已经被完全处理。如果所有的子查询已经被完全处理,则进行到步骤S311。如果还有没处理的子查询,则进行到步骤S303。在步骤S303处,查询签名产生装置132为每个子SPARQL查询产生签名。在此,按照与产生所述分区签名的方式相对应的方式,为每个子SPARQL查询产生签名。例如,通过与产生分区的签名相同的哈希函数来产生针对每个子SPARQL查询的签名。在步骤S304处,分区获得装置133通过将每个子SPARQL查询的签名分别与所有分区的签名进行比较,来获得与该子SPARQL查询匹配的所有分区。具体地,例如,当在针对子SPARQL查询产生的签名向量中为1的位置上,分区的签名向量中对应位置也都置1时,则该子SPARQL查询与该分区相匹配。假设,针对子SPARQL查询产生的签名向量为10010001,而图8中所示的分区的签名为10111011,由于子SPARQL查询的签名中的三个"1"的位置在上述分区的签名中也对应为"1",因此可以判断该子SPARQL查询与上述分区相匹配。在步骤S305处,判断在步骤S304处是否得到与该子SPARQL查询匹配的分区。如果在步骤S304处没有得到与该第一子查询匹配的分区,则提前结束查询处理。也就是,在本发明中,如果判断没有与该子SPARQL查询对应的分区,则可以直接提早结束查询,而不需要等到执行查询后才知道没有与用户查询相匹配的数据。如果判断在步骤S304处得到与该子SPARQL查询匹配的分区,则处理进行到步骤S306。在步骤S306处,调用三元组存储库的SPARQL转换器,将子SPARQL查询转换为子SOL查询。然后处理前进到步骤S307。在步骤S307处,判断匹配的分区的数量是否小于预定数,例如,小于总分区的1%。如果判断匹配的分区的数量小于预定数,则处理前进到步骤S308。如果判断匹配的分区的数量大于预定数,则处理前进到步骤S309。在步骤S308处,查询重写装置134重写由子SPARQL查询转换而来的子SOL查询,以得到重写后的子SOL查询。具体地,利用关于与该子查询匹配的分区的附加限制来重写子SOL查询,以形成重写后的子SOL查询。例如,直接将它们写入在划分标识符上具有约束的where子句之中。然后处理返回到步骤S302,以对下一个子SPARQL查询进行处理。在步骤S309处,可以创建一个临时表,用于存储与该子SPARQL查询相匹配的所有分区的唯一标识符,然后,处理前进到步骤S310。在步骤S310处,查询重写装置134可以利用与存储有唯一标识符的该临时表相关的附加连接条件,以形成重写后的子SQL查询。具体地,将包括匹配分区唯一标识符的临时表与该子查询相连接(join),以形成重写后的子SQL查询。然后,处理返回到步骤S302,以对下一个子SPARQL查询进行处理。连接操作(join)是本领域公知的操作,在此不作过多赘述。最后,在步骤S311处,查询组合装置135组合针对所有子SPARQL查询的多个重写后的子SQL查询,来形成重写后的SQL查询,以便利用该重写后的SQL查询执行对数据库11的查询。下面是根据本发明的优化过程的一个例子。例如,用户发送如下的查询<table>tableseeoriginaldocumentpage18</column></row><table>通常,使用传统的RDF至SQL的转换方法将该查询将转换成为以下SQL:_<table>tableseeoriginaldocumentpage18</column></row><table>通过本发明的优化方法和设备,可以将其进一步优化成为以下SQL:_<table>tableseeoriginaldocumentpage18</column></row><table>上述代码中下划线部分代表优化后增加的代码。然后利用优化的代码对数据库执行查询。与现有技术相比,由于本发明仅仅在与子查询相匹配的分区进行查找,所以可以提高查询效率。另外,与现有技术相比,当不存在与子查询相匹配的分区时,本发明可以提前结束查询,而不需要在数据库执行查询之后才知道没有相匹配的查询数据。因此,可以大幅度提高查询效率。图13示出了其中可以应用本发明的计算机系统100的示意图。参考图13,计算机系统100是计算机系统的一个适当的实现,并且包括根据本发明的优化设备。计算机系统100可以是IBMeServerSystemi计算机系统。但是,本领域的技术人员可以理解,本发明可以同样地用于任意计算机系统,无论计算机系统是复杂的多用户计算机装置、单用户工作站、嵌入式控制系统,还是或大型并行计算机系统,如IBM开发的BlueGene计算机系统。如图13所示,计算机系统100包括一个或多个处理器110、主存储器120、大型数据库接口130、显示器接口140以及多个网络接口150A、150B和150N。这些系统组件通过使用系统总线160互连。大型数据库接口130用于将大型数据库155连接到计算机系统100。图13中的数据库对应于图11的数据库11。主存储器120优选地包含数据121、操作系统122、和根据本发明的数据库处理设备123和查询优化设备124。数据121代表任何作为计算机系统100中任何程序的输入或输出的数据。操作系统122可以是任何合合适的操作系统。数据库处理设备123和查询优化设备124分别执行图10和图12的操作流程。虽然数据121、操作系统122、数据库处理设备123和查询优化设备124在图中所示为位于主存储器120中,本领域的普通技术人员将可以认识到,这些项目并非必需地同时完全包含于主存储器120中。处理器110可以由一个或多个微处理器和/或集成电路构成。处理器IIO执行存储于主存储器120中的程序指令。主存储器120存储处理器IIO可访问的程序和数据。当计算机系统IOO启动时,处理器110最初执行构成操作系统122的程序指令。尽管所示的计算机系统IOO只包括一个处理器和一个系统总线,本领域的普遍技术人员将可以理解,可以使用具有多个处理器和/或多个总线的计算机系统来实施。显示器接口140用于直接地将一个或多个显示器165连接到计算机系统IOO。这些显示器165可以是非智能的(即哑的)终端或者完全可编程的工作站,其用于向系统管理员和用户提供与计算机系统100通信的能力。然而,请注意,虽然提供显示器接口140以支持与一个或多个显示器165的通信,计算机系统并非必需地需要显示器165,因为所有所需的与用户的交互以及其它处理可以通过一个或多个网络接口实现。图13中示为150A,150B,…,150N的网络"l妻口用于通过独立网络(例如170A,170B,…,170N)将计算机系统IOO连接到其它计算机系统或工作站,在此示为节点175A,175B,…,175N)。网络接口150A,150B,…,150N和网络170A,170B,…,170N广义地代表互连电子设备的任何适当的方式,而无论所述网络是否包括当前模拟和/或数字技术或通过未来的某些联网机制。另外,可使用很多不同网络协议实现网络。这些协议是专门的计算机程序,其允许计算机通过网络进行通信。TCP/IP(传输控制协议/网际协议)是适当的网络协议的一个例子。在此应重点注意,上文描述是完全功能性的计算机系统环境下的情况,本领域技术人员应该认识到,也可以在供任何合适数据处理系统使用的信号承载介质上所设置的计算机程序产品中体现本发明。这种信号承载介质可以是传输介质或用于机器可读信息的可记录介质,包括磁介质、光介质或其它合适介质。可记录介质的例子包括硬盘驱动器中的磁盘或软盘、用于光驱的光盘、磁带,以及本领域技术人员所能想到的其它介质。本领域技术人员应该认识到,具有合适编程装置的任何通信终端都将能够执行如程序产品中体现的本发明方法的步骤。从上述描述应该理解,在不脱离本发明精神的情况下,可以对本发明各实施方式进行修改和变更。本说明书中的描述仅仅是用于说明性的,而不应被认为是限制性的。本发明的范围仅受权利要求书的限制。权利要求1.一种用于优化针对垂直存储式数据库的查询的方法,其中所述数据库中的条目被分成若干分区,每个分区具有表示所述分区中的条目的分区签名,该方法包括将从用户接收的第一查询分解为多个第一子查询;按照与产生所述分区签名的方式相对应的方式,为每个第一子查询产生签名;通过将每个第一子查询的签名分别与所有分区的分区签名进行比较,获得与该第一子查询匹配的所有分区;基于所述匹配的分区,重写由第一子查询转换而来的第二子查询,以得到重写的第二子查询;以及组合针对所有第一子查询的重写的第二子查询来形成第二查询,以便利用该第二查询执行对所述数据库的查询。2.根据权利要求1所述的方法,其中所述第一查询和第一子查询是SPARQL查询,以及第二子查询和第二查询是SQL查询。3.根据权利要求1所述的方法,其中所述数据库是RDF存储库,所述RDF存储库中的每个条目包含RDF三元组,该RDF存储库包含其值表示RDF三元组主语的主语列、其值表示RDF三元组谓词的谓词列以及其值表示RDF三元组宾语的宾语列,以及其中该RDF存储库还包含其值表示对应的RDF三元组所在分区的唯一标识符列。4.根据权利要求3所述的方法,其中所述RDF存储库中的所有条目被映射为一张表示所有RDF三元组的图,RDF三元组主语被表示为图中的源节点,RDF三元组宾语被表示为图中的宿节点,RDF三元组谓词被表示为从源节点到宿节点的有向连接,以及其中该图被分成若干子图,每个子图对应于一个分区。5.根据权利要求4所述的方法,其中子图内的连接是较密的,跨越子图之间的连接是较稀疏的,以及其中对于跨越子图之间的连接,在相关子图的每一个子图内制作该连接的副本,以使得分割后的子图能够反映所述RDF存储库中的所有数据关系。6.根据权利要求1所述的方法,其中所述分区的签名是通过利用哈希函数为分区中的每个条目生成签名并且对每个条目的签名进行"或"操作得到的。7.根据权利要求1所述的方法,所述分解步骤进一步包括将所述第一查询映射为一个查询图,以及枚举所述查询图中的2可达子图,其中每个2可达子图对应于一个第一子查询。8.根据权利要求1所述的方法,通过与产生分区的签名相同的哈希函数来产生针对每个第一子查询的签名。9.根据权利要求6或8所述的方法,其中所述哈希函数为MD5哈希函数。10.根据权利要求9所述的方法,其中当在针对第一子查询产生的签名中为1的位置在分区的签名中也都被置1时,则该第一子查询与该分块相匹配。11.根据权利要求1所述的方法,其中如果在所述获得步骤没有得到与该子第一查询匹配的分区,则提前结束查询处理。12.根据权利要求1所述的方法,其中所述分区具有唯一标识符,以及所述重写步骤进一步包括创建一个临时表,用于存储与该第一子查询相匹配的所有分区的唯一标识符,以及利用与存储有唯一标识符的该临时表相关的附加连接条件,来重写该第二子查询。13.根据权利要求1所述的方法,其中所述分区具有唯一标识符,以及其中,当与该第一子查询相匹配的分区的数量大于预定数值时,所述重写步骤包括创建一个临时表,用于存储与该第一子查询相匹配的所有分区的唯一标识符,以及利用与存储有唯一标识符的该临时表相关的附加连接条件,来重写该第二子查询,当与该第一子查询相匹配的分区的数量小于预定数值时,所述重写步骤包括利用关于与该子查询匹配的分区的附加限制,来重写该第二子查询。14.一种用于处理垂直存储式数据库的方法,该方法包括将该数据库中的所有条目分割成若千分区,为每个分区赋予唯一标识符,以及为每个分区生成签名。15.根据权利要求14所述的方法,其中所述数据库是RDF存储库,所述RDF存储库中的每个条目包含RDF三元组,该RDF存储库包含其值表示RDF三元组主语的主语列、其值表示RDF三元组谓词的谓词列以及其值表示RDF三元组宾语的宾语列,以及其中该RDF存储库还包含其值表示对应的RDF三元组所在分区的唯一标识符列。16.根据权利要求15所述的方法,其中所述分割步骤包括将所述RDF存储库中的所有条目映射为一张表示所有RDF三元组的图,其中RDF三元组主语被表示为图中的源节点,RDF三元组宾语被表示为图中的宿节点,RDF三元组谓词被表示为从源节点到宿节点的有向连接,以及将该图分割成若干子图,每个子图对应于一个分区。17.根据权利要求16所述的方法,其中子图内的连接是较密的,跨越子图之间的连接是较稀疏的,以及其中对于跨越子图之间的连接,在相关子图的每一个内制作该连接的副本,以使得分割后的子图能够反映所述RDF存储库中的所有数据关系。18.根据权利要求14所述的方法,其中所述分区的签名是通过利用哈希函数为分区中的每个条目生成签名并且对每个条目的签名进行"或"操作来得到的。19.根据权利要求18所述的方法,其中所述哈希函数为MD5哈希函数。20.—种用于优化针对垂直存储式数据库的查询的设备,其中所述数据库中的条目被分成若干分区,每个分区具有表示所述分区中的条目的分区签名,该设备包括分解装置,用于将从用户接收的第一查询分解为多个第一子查询;查询签名产生装置,用于按照与产生所述分区签名的方式相对应的方式,为每个第一子查询产生签名;分区获得装置,用于通过将每个第一子查询的签名分别与所有分区的分区签名进行比较,获得与该第一子查询匹配的所有分区;查询重写装置,用于基于所述匹配的分区,重写由第一子查询转换而来的第二子查询,以得到重写的第二子查询;以及查询组合装置,用于组合针对所有第一子查询的重写的第二子查询来形成第二查询,以便利用该第二查询执行对所述数据库的查询。21.—种用于处理垂直存储式数据库的设备,该设备包括分割装置,用于将该数据库中的条目分成若干分区;分配装置,用于为每个分区分配唯一标识符;以及分区签名生成装置,用于为每个分区生成签名。全文摘要本发明公开了一种用于优化针对垂直存储式数据库的查询的方法和设备。数据库中的条目被分成若干分区,每个分区具有表示所述分区中的条目的分区签名。该方法包括将从用户接收的第一查询分解为多个第一子查询;按照与产生所述分区签名的方式相对应的方式,为每个第一子查询产生签名;通过将每个第一子查询的签名分别与所有分区的分区签名进行比较,获得与该第一子查询匹配的所有分区;基于所述匹配的分区,重写由第一子查询转换而来的第二子查询,以得到重写的第二子查询;以及组合针对所有第一子查询的重写的第二子查询来形成第二查询,以便利用该第二查询执行对所述数据库的查询。利用本发明,可以极大地提高数据库的查询效率。文档编号G06F17/30GK101436192SQ200710192738公开日2009年5月20日申请日期2007年11月16日优先权日2007年11月16日发明者越潘,晨王,莺闫,力马申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1