CN101751457B - 信息处理设备、数据库系统、信息处理方法 - Google Patents
信息处理设备、数据库系统、信息处理方法 Download PDFInfo
- Publication number
- CN101751457B CN101751457B CN2009102110842A CN200910211084A CN101751457B CN 101751457 B CN101751457 B CN 101751457B CN 2009102110842 A CN2009102110842 A CN 2009102110842A CN 200910211084 A CN200910211084 A CN 200910211084A CN 101751457 B CN101751457 B CN 101751457B
- Authority
- CN
- China
- Prior art keywords
- unit
- subtree
- subregion
- unit subtree
- structured document
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/83—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/205—Parsing
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了保证通过分区有效访问数据库的信息处理设备、数据库系统、信息处理方法和程序。该设备包括分区生成单元(222),生成值分区和基本分区,在该值分区中,包括在结构化文档中的要被分区的目标数据的单位子树根据该目标数据的值被分离和注册,该基本分区包括用来唯一地识别所述单位子树的索引;XML解析器(224),用来识别定义所述结构化文档的属性值的起始标识和终止标识的位置,以生成与属性值的层次结构对应的分割位置列表,用于注册在存储区域中;XML分割单元(226),用来识别将要被分割的单位子树的起始位置和终止位置,和从结构化文档中分离单位子树和它的索引;分割XML注册单元,用来在分离的分区注册单位子树和索引。
Description
技术领域
本发明涉及供数据库使用的信息处理技术。更具体地,本发明涉及信息处理设备、数据库系统、信息处理方法和程序,其通过对在数据库中的数据区域进行分区来保证高效的数据库访问。
背景技术
随着包括因特网的网络基础建设的蔓延,以及随着信息处理设备和应用程序的发展,信息处理设备能够处理的内容的种类和数量大大增加。关于针对巨量内容的访问,数据库,诸如关系数据库和面向对象的数据库,已用于实现通过客户计算机(以下称为“客户机”)搜索内容。
数据库通过使用主键(master key)等唯一地标识内容来管理内容。传统上,由包含在内容里的关键字中生成的索引被用于搜索,以及把通过搜索找到的内容或内容列表返回给客户机,以便提供内容给客户机的用户。如果由数据库管理的内容的数量不是很庞大,可以在由数据库管理的全文上执行关键字搜索等,而对搜索效率的不利影响很小。
要通过数据库来搜索的内容量已经变得庞大,并且近来全文索引正日益增多地用于搜索。为了提高搜索效率,例如,已经提出一种方法,为数据库的内容指定分区,在指定的分区中,而不是在整个数据库中,执行搜索,由此减少了搜索空间。
关于分区,可以基于要被分区的目标条目,比如年或月,把表分成多个范围,以便例如在同一个分区存储落入相同范围的数据。然后,可以基于分区添加、删除或搜索内容和数据。众所周知,相比于在全部注册的内容或数据上搜索的情况,这样的基于分区的搜索保证了更快的处理。
此外,近年来,公知一种以结构化文档诸如XML文档的形式在关系数据库中注册内容或数据的技术。通过在关系数据库中注册各种的数据时引入如XML文档的结构化文档,除了常规的索引搜索之外,使用XML解析器诸如DOM(Document Object Model,文档对象模型)或SAX(Simple API for XML,用于XML的简单API)的搜索变成可利用的,而且还提出了所谓的XML数据库(以下称为“XMLDB”),以实现更有效的内容搜索。此外,众所周知,XMLDB能够用于修改内容或数据的注册的元素,而无需修改关系数据库的制式(schema),由此确保制式的更灵活的变化。
图17示出了在XML文档在关系数据库(以下称为“RDB”)中管理的情况下记录或列的传统结构的示例。传统上,为了在RDB中支持XML文档,XML数据将通常映射和存储在RDB的列上,或作为文本数据在列上存储和管理。
在图17所示的常规示例中,关系数据库1710具有用于注册用于标识指定记录的ID(标识)值的列、用于注册其它属性值的一个或多个列,用于注册XML文档的文本的列1720。如果XML文档规模较小,XML文档可以毫无问题地被注册在列1720中。但是,描述一种类别(category)的数据的XML文档的规模趋向于越来越大,可能变成几千兆字节(gigabyte)。在这种情况下,搜索完整的XML文档是低效的,即便允许通过XML解析器和其他工具来执行这种处理。
公知一些有效搜索大型XML文档的技术。例如,在关系数据库产品 中(DB2是国际商业机器公司的注册商标),生成XDA(XML Data Area,XML数据区)对象1740用来存储和搜索XML文档。XDA对象1740被分成多个区域1750和1760,索引对象1730被配置来指引(index)在XML文档中的指定区域,以实现对大型XML文档的已分割的区域的访问。此外,XML文档使它的全部或它的子树的每一个扩展为节点表,该节点表同样可以用作索引对象。
至今为止,人们已公知了把分区引入数据库中的各种技术。例如,日本专利申请公开7-319923(专利文档1)描述了一种方法和设备,其中,数据服务器——每个数据服务器可以在系统的不同处理器上运行——执行它们各自的SQL语句,并因此同时(concurrently)和并行地访问它们的数据库分区,由此减少来自给定客户应用的给定请求的总体访问时间。
此外,日本专利申请公开号第2001-142752(专利文档2)描述数据库管理方法,其中,在给定m个数据库存储区作为数据库的存储区的情况下,数据库的一个或多个条目被用作分区键(key),以及通过对分区密钥应用散列(hash)函数,数据库被分成n(m≤n)个存储桶(bucket)(存储桶为逻辑单位), 通过使用散列函数映射表(其确定数据库存储区如何根据给定的数据库存储区的数量管理各存储桶)和段(segment)散列映射表管理数据库,段散列映射表用于把所分配的存储桶映射到各数据库存储区域中的作为存储单位的段。
此外,存储诸如XML文档的使用标记(tag)的结构化文档的数据库被描述于例如日本专利申请公开号第2008-197815(专利文档3)。专利文档3描述了这样的系统,其中,当与将要被注册在数据库里的文档对应的原始文档已经被注册在数据库的时候,在将要被注册的文档中任何对原始文档的改动的地方的数据作为差异数据被提取,并且索引处理单元仅更新已做出改动的地方的索引,以由此减少索引准备成本。
[专利文档1]日本专利申请公开号第7-319923
[专利文档2]日本专利申请公开号第2001-142752
[专利文档3]日本专利申请公开号第2008-197815
发明内容
如上所述,出于提高针对存储在数据库上的内容或数据的搜索效率的目的而提出的对数据库指派分区的技术,和出于提高数据库的管理效率的目的而提出的在数据库上注册描述层次结构的结构化文档的技术现今已被提出。
在XML文档被RDB管理的情况下,除了与如图17所示的树结构相关联地把XML文档分成区域外,还可以根据比如日期、商业地点或明细,把全体数据分类或分区到特定值范围。当XML文档根据特定的属性值被分区时,可以仅在包含具有该特定的属性值的数据上进行搜索。这样允许减少搜索空间,由此实现有效的搜索处理。
然而,该通过指派分区给数据库来减少搜索空间的传统技术如果依原样应用于XMLDB,则不一定提供有效的分区方法。特别地,XML文档自身可能具有层次性的数据结构。因此,完全可以预见具有基于其而执行分区的目标(target)数据的子树可以被添加到XML文档。此外,很有可能在比如由XMLDB管理的数据中的相同的属性值指定的子树中,例如由<分公司name=“”>指定的子树中,可以添加具有将要被分区的目标数据并且将要被分离(separate)到不同分区的子树。
因此,为了在XMLDB执行分区,有必要指定包括将要被分区的目标数据,诸如日期、产品名、客户、商业地点等的子树,以及仅对指定的子树,把目标数据和分区范围相比较。
此外,简单地分割(cut)XML文档到分区可能会导致XML文档的层次结构的丧失,在这种情况下,有必要创建新的索引数据,因为不再可能有效使用层次结构用于搜索。
因此,人们需要这样的技术,该技术能够提高数据库搜索效率,能够灵活响应数据结构中的变化,而不削弱数据库的分区的有效性和使用XML改变数据结构的灵活性。
为解决常规技术中上述的问题,本发明提供了一种信息处理设备,其中包含在结构化文档中要被分区的目标数据的单位子树在结构化文档中被识别为范围定义对,在该范围定义对中,定义单位子树的起始标识和终止标识相互关联。同时,信息处理设备生成指示在结构化文档中单位子树的描述的顺序的发生计数器,用来识别该子树在结构化文档中的位置。尽管下面将针对使用关系数据库作为用于存储目标数据的数据库的XMLDB作出描述,但是本发明的实施例并不局限于使用关系数据库的XMLDB。
单位子树具有包含特定含意的文本的层次结构,根据该特定含意,分区被执行。单位子树以定义有特定含意的属性的标识为单位来定义。访问数据库的数据库管理员或用户可以利用XPath等定义单位子树。在分区过程中,信息处理设备生成用于注册单位子树的值分区、和用于注册参考单位子树的索引的基本分区。
其后,信息处理设备启动解析器单元,以识别定义属性值的起始标识和终止标识的位置,生成与该属性值的层次结构对应的分割位置列表,并且在存储区域中注册该分割位置列表。此外,当通过参考生成的分割位置列表识别出该结构化文档的单位子树时,信息处理设备通过把在结构化文档中单位子树开始的行的位置和在结构化文档中单位子树终止的行的位置相关联而生成范围定义对。通过发生计数器把范围定义对与在结构化文档中的发生位置关联,由此生成子树数据列表。
当生成了子树数据列表时,信息处理设备参考分割位置列表,以识别要被分割的单位子树的起始位置和终止位置,单位子树包括要被分区的目标数据。信息处理设备接着从结构化文档分离和识别单位子树和用于参考单位子树的索引,并且在分离的分区注册经分离的单位子树和用于识别该单位子树的索引,从而完成分区。
单位子树包含多个起始标识,从对应的单位子树中的起始标识中的第一个生成索引。在注册到分区之前,把指针添加到单位子树和唯一地识别该单位子树的索引,以使得两者能够交叉参考。
此外,本发明的信息处理设备可以包括:SQL处理单元,用于通过使用目标数据来执行所注册在值分区的单位子树的搜索;搜索结果生成单元,用于生成由SQL处理单元执行的搜索的结果。在本发明中,结构化文档可以用XML描述,数据库可以是使用关系数据库的XMLDB。
本发明还可以提供包含上述信息处理设备、信息处理方法和程序的数据库系统。
根据本发明,可以提供包含信息处理设备、信息处理方法和程序的数据库系统,其能够通过分区减少搜索空间,同时不削弱通过结构化文档的层次结构的搜索效率。
附图说明
图1说明根据本发明的实施例的数据库系统100;
图2是本实施例的服务器130的功能框图200;
图3说明由本实施例的服务器130处理的XML文档300的实施例;
图4以树结构400的形式说明本实施例的XML文档300;
图5是示意性地图示本实施例的服务器130在XMLDB上执行处理的流程图;
图6说明由本实施例的服务器130执行生成图5中步骤S501的分区的处理所使用的DDL语句600的实施例;
图7是其中执行本实施例的XML分割处理的、图5中步骤S502的更具体的流程图;
图8是图7中步骤S701执行的XML分割位置计算处理的详细的流程图;
图9是图8中步骤S805和S806的起始标记处理和终止标记处理的分别详细流程图;
图10图示图9中步骤S913执行的对Start堆栈(stack)去除上面的(upper)元素的处理;
图11是图示根据图9的处理在本实施例中实施的更新Count堆栈的处理和说明在生成的值堆栈中的值的转换(transition)1100的实施例的示意图;
图12说明在图9至图11说明的处理中生成的、在XML分割过程中使用的子树数据列表的实施例;
图13是图示生成要注册在基本(base)分区中的子树的处理的流程图;
图14说明在基本分区1410中,ptr=“2006:467”和ptr=“2007:8142”作为隐藏的属性值被分别添加到<订单票据>标识1450和1460的实施例;
图15说明根据本发明被分区的XML文档,和在基本分区和在值分区中的注册处理的实施例;
图16说明根据本实施例能够被分区的XML文档的实施例;
图17说明常规的XMLDB的数据存储结构。
具体实施方式
现在参考实施例描述本发明,但本发明不局限于下面的实施例。图1说明根据本发明的实施例的数据库系统100。本发明的数据库系统100包括服务器130、数据库140、网络120、和多个客户机110、112、114、116和118,其中每个客户机被连接到网路120,并由用户操作来经由网络120访问服务器130。
在本实施例中,服务器130用作安装数据库应用的信息处理设备,在该数据库应用中,使用诸如XML文档的结构化文档将数据分区和存储。除了数据库服务器之外,服务器130还可以安装有网页(web)服务器、SNS服务器和邮件服务器的功能,不过对其功能没有特别限制。在本实施例中,网络120优选地包括因特网,尽管它可以包括因特网以外的WAN(广域网)或LAN(局域网)。
服务器130可以安装CISC架构微处理器,比如 或 兼容芯片,或RISC架构微处理器,比如 以单核或多核形式均可。此外,服务器130可以由比如 或 操作系统控制。服务器130运行服务器程序,比如由编程语言,例如C、C++,JavaTM、JavaBeansTM、Perl或Ruby实现的CGI、servlet、或Apache,以处理发自于客户机110至118的各种请求,该各种请求可以包括数据注册请求和搜索请求。
客户机110至118每个可以用个人计算机或工作站实现,其微处理器单元(microprocessor unit,MPU)可以包括目前为止已知的单核处理器和多处理 器的任何一个。客户机110至118每个可以由任何操作系统例如 或Mac 来控制。此外,客户机110至118每个可以安装诸如Internet 或Netscape 的浏览器软件,用于访问服务器130。
客户机110到118的每个经由网络与服务器130连接,该网络基于诸如TCP/IP的业务(transaction)协议使用诸如HTTP协议的文件传输协议而支持业务。客户机110到118的每个可以实现JDBC(JavaTM Database Connectivity,Java数据库连接),并且可以使用JDBC决定的应用层协议与服务器130连接,以访问服务器130中的数据库应用。
响应于发自客户机110至118之一的请求,服务器130根据该请求处理服务器130管理的数据库。例如,它可以把接收到的数据存储在数据库140中,并且根据特定属性值来对该数据进行分区(partition)。在从客户机110至118之一接收到的请求是搜索请求的情况下,服务器130发出SQL(结构化查询语言)语句至数据库140。在本实施例,在搜索请求包含与分区(partitioning)相关的属性的情况下,服务器130基于分区在注册为诸如XML文档的结构化文档的数据上执行搜索。
此外,在搜索请求不包含与分区相关的属性的情况下,服务器130使用SQL语句执行常规搜索。尽管在本实施例中,XML文档作为示例被用作结构化文档,但是结构化文档并不特别限定为XML文档,而是可以是SGML、XHTML或增强的XML。
图2是根据本实施例的服务器130的功能框图200。当服务器130的处理器把用于实现功能单元的程序读入诸如RAM的工作区域和执行程序时,图2所示的每个功能块在信息处理设备上被实现,以实现信息处理设备的功能装置(means)。服务器130经由网络120接收来自客户机110至118的请求。每个请求通过网络适配器202接收,经物理层、数据链路层、网络层、传输层等传递到OSI参考模型中的上面的应用层。请求和数据接着经由应用层被传递到数据库应用。
为了执行本实施例的处理,服务器130包括SQL处理单元210、搜索结果生成单元216和数据管理单元220。SQL处理单元210处理使得指定XML文档的层次结构的搜索成为可能的SQL命令,并且生成搜索结果。在图2所示的实施例中,SQL处理单元210包括SQL解析器212和XML解析器214。SQL解析器212分析与接收到的搜索请求对应的SQL命令,使得通过使用所包含的SAX等实现的XML解析器214的搜索成为可能。
搜索结果生成单元216获取通过XML解析器214从数据库140中提取的结果,生成适当的格式,比如,XML文档或表,用于显示作为值分区搜索结果的结果,并经网络适配器202将它返回给客户机。
如上所述,服务器130还包括数据管理单元220。根据本实施例,数据管理单元220可以被实现为数据库应用的增强模块,并且可以包括分区生成单元222、XML解析器224、XML分割单元226和分割XML(cut-XML)注册单元228。分区生成单元222使用针对下列目标数据设置的范围来生成分区,其中,为了数据库140的管理,数据库管理员基于该目标数据设置分区,其中目标数据可以是日期、客户名称、产品名、商业地点、部门等。
此外,在数据库140是一种对于在私人级别(private level)生成数据可访问的数据库(例如MySQL或Access)的情况下,用户可以发出“分区生成”请求以基于要由用户管理的数据的目标数据而生成分区,接收到请求的服务器130可以根据请求生成分区。
应该注意,数据库管理员或用户发出的分区生成请求可以包括对将要被分区的XML文档的子树的描述,用来定义分区的粒度(granularity)。下文中,把定义分区粒度的子树称为“单位子树(unit subtree)=P”。单位子树可以被定义为例如P=*/a/b/c...,其中“*”是通配符,“a”“b”和“c”每一个对应于在单位子树内定义了属性和属性值的标识。
此外,在本实施例,XML解析器224用作对要被分区的结构化文档的进行解析的解析器单元,也用作从客户机110至118之一或从数据库140获要被处理的XML文档、并根据分区分割XML文档中的单位子树的前处理器。为此,XML解析器224识别包括定义在XML文档中的节点的属性的标记的行位置以生成分割位置列表,并在合适的存储区诸如RAM中存储生成的列表。XML解析器214也可以用所包含的DOM或SAX来实现。尽管XML解析器224和XML解析器214因为它们功能的不同而作为单独的功能单元来 图示,但是可以使用单一的XML解析器来担任该两个解析器。
如上描述,数据管理单元220还包括XML分割单元226和分割XML注册单元228。XML分割单元226使用由XML解析器224获取的要被处理的XML文档的分割位置列表,以按单位子树的粒度把XML文档分割成分区。此外,为了注册在XML文档的经分区的单位子树的原始XML文档中指定层次结构的信息,XML分割单元226生成用于识别单位子树的索引,并且把该索引同XML文档和单位子树分离。
下文章,将把根据诸如日期的目标数据归类的分区称作“值分区”,而把用于注册索引的分区称为“基本分区”,该索引把注册在值分区中的单位子树与原始XML文档相关联。在XML文档包括将不被分区的子树的情况下,也把这样的子树注册在基本分区中。
分割XML注册单元228使用XML分割单元226执行分割的结果,在相应的分区中注册子树和索引。为了使经分区的单位子树的层次结构和原始XML文档的层次级(hierarchical level)交叉参考成为可能,分割XML注册单元228分别向要被注册在基本分区中的索引和要被分区的单位子树添加(add)唯一交叉参考标识值。交叉参考标识值将稍后详细描述。
图3说明要由本实施例的服务器130处理的XML文档300的实施例。图3所示的XML文档是某公司的销售订单数据。对每个分公司(branch),该销售订单数据包括分公司信息、销售订单标识值、客户信息和销售订单内容,这些描述在具有通过标记识别的层次结构的XML文档中。在XML文档300中,以<分公司名称=“A”>指定的父节点包括多个子节点,每个子节点以<订单票据(order slip)>标记指定。在图3所示的说明性实施例中,声明具有<分公司名称=“A”>属性的父节点包括子节点310和320。
应该注意图3所示的实施例仅是说明性的。父节点<分公司名称=“A”>可以具有更大量的子节点,以及要被处理的XML文档可以包括好几万行的数据。如图3所示,每个子节点包括<日期(date)>标记。这些描述目标数据的标记是“数据标记”,而定义属性的标记被称作“属性定义标记”。在举例说明的实施例中,假设要被分区的目标数据是日期,以及诸如财务年度的范围被指定作为用于分区到值分区中的日期。属性定义标记对应于<分公司名称=“A”>、<订单票据编号=“0001”>、<明细行=“1”>等。除了财务年度或出版年度之外,分区范围还可以是地理范围,诸如U.S.A、日本、中国等, 或者可以是比如“a至d”、“e至f”的字母范围,等等。
图4把本实施例的XML文档300显示为树或层次结构400。如图4所示,层次结构400有<分公司A>作为父节点410,<订单票据0001>和<订单票据0002>分别作为公司A节点410的子节点420和430。在日期数据将要被分区的情况下,如图3所示,子节点420和430分别落入不同财务年度的分区470和480。
在存在包含要被分区的目标数据的多个子节点的情况下,如图4所示,对于不同的子节点,目标数据通常具有不同的值。因此,有必要从层次结构中分割要被分区的子节点,以将它们注册到不同的值分区中。对于如常规关系数据库中之执行的只检测单位子树上的目标数据以便将他们分组到分区的处理,原始XML文档的层次结构将丧失,因此,XMLDB的有效性(effectiveness)受损。因此有必要指定包括值分区470和480的子节点在XMLDB文档300中的XPath。
在本实施例中,对描述从XMLDB文档300分区到值分区470和480中的子节点的子树,生成用于指定原始的XMLDB文档的层次结构的基本分区460,以提高通过分区的搜索效率,同时维持XMLDB的有效性。基本分区460允许维持原始XMLDB文档中的层次结构中的子节点的级,因此使参考与特定子节点对应的子节点的单位子树成为可能
图5是示意性地图示本实施例的服务器130在XMLDB上执行的处理的流程图。当接收到来自数据库管理员或客户机110至118中之一的分区请求命令时,图5中的处理从步骤S500开始。在步骤S501中,服务器130生成与指定的数据的范围对应的值分区。可以使用SQL脚本在步骤S501中生成分区,在该SQL脚本中,增强了用于关系数据库的DDL(Data Definition数据定义语言)以支持XML。
在步骤S502中,读取要被处理的XML文档,并对其进行解析。从XML文档中分割单位子树,以及生成子树数据列表,在该子树数据列表中,把要被分区的单位子树与它们出现的顺序相关联。接着,在步骤S503中,在列出的(listed)单位子树中嵌入指针,然后注册到分区中。指针可以例如作为隐性属性被嵌入于单位子树的起始标记中。或者,可以把指针追加到用于索引等的节点表中的存储与子树对应的值的记录(record)。稍后将详细地描述指针和它们的嵌入处理。
本实施例中对XML文档的分区在步骤S503结束。步骤S501到S503的处理可以在已经存储在关系数据库里的XML文档上,或与新的注册请求一起被发送到服务器130的XML文档上执行。
图5中步骤S504和接下来的步骤对应于在XMLDB上执行的搜索。在步骤S504中,服务器130接收到来自客户机110至118之一的搜索请求。在步骤S505中,判定搜索请求是否包含基于其生成分区的目标数据。如果判定搜索请求包括用于分区的目标数据(是),则在步骤S507中,仅针对在由搜索请求指定的目标数据下分组(group)的分区执行搜索,以及在步骤S508中,把搜索结果返回给发出搜索请求的客户机。然后,处理在步骤S509结束。
另一方面,如果在步骤SS505中判定搜索请求不包括用于分区的属性值(否),则在步骤S506中搜索所有的分区,在步骤S508中,通过合并(merge)针对各分区获取的结果而生成搜索结果,并且把搜索结果返回给发出搜索请求的客户机。然后,处理在步骤S509结束。在步骤S506要求不仅搜索个别的(individual)的值分区而且要求搜索基本分区的情况下,可以通过单独地合并值分区的搜索结果和值分区的搜索结果,在步骤S508中生成搜索结果。
为了合并分区后的搜索结果,可以采用如在常规关系数据库中的合并分区数据的搜索结果的已知方法。
图6说明由服务器130在图5中步骤S501中生成分区所使用的DDL语句600的实施例。在DDL语句600中,首先由“CREATE TABLE”指示分公司销售订单管理表的创建,其后跟随有用于唯一识别该分公司销售订单管理表的ID的指定。接着,XML文档的目标属性被指定,然后,由“PARTITIONBY RANGE”指示分区。利用如图6所示的DDL语句600,可以指定在XML文档中的XPath作为“PARTITION BY RANGE”命令的参数,在所图示的实施例中,根据XPath来对所读取的XML文档分区所必要的XPath的深度被指定。对于起始于所注册在读取的read XML文档中的<订单票据>的子节点,DDL语句600生成对应于如下范围的三个值分区:从最早的数据到2006/12/31;从2007/01/01到2007/12/31;和从2008/01/01到2008/12/31。
如图6所示的DDL语句600不包括用于生成基本分区的明示(explicit)命令。在基本分区的生成中,当通过图6中的(INFOXML/分公司/订单票据/日期)设置在范围分割中使用的XML文档的XPath时,根据分割算法来确定要存储在基本分区中的文档的子树的段即不包括在任何日期分区中的子 树、以及经分区的单位子树的索引。为了基本分区的注册,当已经识别了PARTITION BY RANGE(INFORML/...)的参数设置时,服务器130仅需要定义XMLDB中的数据存储结构。
应该注意,作为示例,针对使用DB2作为数据库140的情况,此处描述了“PARTITION BY RANGE”命令和分区处理。当然可以视适当情况对其修改,以便符合其它关系数据库所采用的各种格式,以及可以根据特定关系数据库的实现或者出于XML分割处理的实现中的便利性的考虑,而采用用于生成基本分区的明示命令。
将被用于分区设置的标记的层次级(hierarchical level)直接关系到值分区的定义。在本实施例中,与已经被设置为DDL语句600的参数的(INFOXML/分公司/订单票据/日期)的深度对应的标记,具体地即<日期>标记,可以被指定用于分区设置。尽管由DDL语句定义的XPath的深度可以明示地描述为值标记,但是也可以使用通配符“*”暗示地(implicitly)对其进行描述,只要其与XPath中的深度和层次结构匹配即可。
图7是图5中步骤S502中执行的本实施例的XML分割处理的更具体的流程图。当该控制从图5中步骤S501过渡至此时,图7中的处理从步骤S700开始。在步骤S701中,通过调用XML解析器来计算XML分割位置。根据步骤S701的处理(该处理稍后将更详细地描述),XMLDB解析器224读取XML文档,并计算用于分区的子节点的识别的分割位置,由此生成指定分割位置的分割为止列表。把所生成的分割位置列表710存储在合适的存储区诸如RAM中,并由服务器130保持,直到分区处理结束。
在步骤S702中,参考分割位置列表710,从组成XML文档的子节点分割每个具有要被分区的目标数据的单位子树,以及用于单位子树的识别的定义范围的值的对儿(此后称作“范围定义对(range-defining pairs)”)和出现计数器(counter)被生成,由此执行子树数据列表的生成、单位子树的分割、索引的生成。此后,在步骤S703中,生成要被嵌入在包括所获取的单位子树中的要被分区的目标值的标记中的指针、和要被嵌入要注册在基本分区中的索引中的指针。所生成的指针可以具有下述值,利用该值把索引与数据库140中的对应单位子树唯一地相关联。
为此,例如,可以在单位子树中嵌入用于唯一地识别索引的索引指针,以及可以在索引中嵌入用于唯一地识别单位子树的子节点指针。作为索引 (index)指针,可以使用在基本分区中索引的注册编号或者存储地址。类似地,作为子节点指针,可以使用在值分区中单位子树的注册编号或者存储地址。
为了步骤S703中的指针的嵌入,每次在步骤S702中的XML分割处理中生成单位子树和索引,可以为其分配注册编号或者要被储存的地址,并且可以生成其中指针与之相关联的指针映射表720。通过参考指针映射表720,这允许分别在基本分区和值分区中的索引和单位子树(subtree)的并行注册。
作为替代,一旦指定要注册在值分区中的单位子树,可以形成指针映射表70作为列表,在该列表中,把要注册在索引中的最新指针与该单位子树相关联。尽管在指针嵌入处理完成时可以把指针映射表720从内存中删除,但是为了作为搜索的索引数据使用的目的,可以与作为根据“CREATE TABLE”命令生成的表的索引的图6的ID相关联地在处理期间把指针映射表720缓存。
当指针生成和嵌入处理完成时,处理进行到步骤S704,在此控制传递到图5中步骤S503,由此图7的处理结束。
图8是图7中步骤S701执行的XML分割位置计算处理的详细流程图。当调用图7中的该处理时,图8的处理从步骤S800开始,执行如下的初始化:i=0,Path=/,Start=/(0),End=-1, 和isPrevEnd=false。这些变量如下述表1定义.
[表1]
D:XML文档P:用于分割范围的XPath输出:CutRangeSet:XML分割位置的集合,或者与分割位置列表对应的数据结构。每个元素以(begin,end)的形式保持标记的开始位置编号和结束位置编号。这些元素以”begin”的升序排列。例如Ex:CutRangeSet=[(3,6),(7,10),(12,17)]流程图中所用符号的解释说明:i:D中当前读取的标记的位置编号 |
[0089]
Path:D中当前读取的标记的XPath(实现为堆栈) Start:作为分割开始位置的候选的、带有标记的位置编号的(实 现为堆栈) End:作为分割结束位置候选的标记的位置编号。如果还没有 发现候选,将其设置为“-1”。 Count:带有XML文档中的层次结构的保持P的出现次数的堆 栈 isPrevEnd:如果紧紧在前所读取的标记是终止标记(</root>, </a>,等),则将其设置为“true”:否则,设置为“false”。 |
在步骤S801中变量的值的初始化之后,在步骤S802中判定正被处理的XML文档是否包含尚待读取的起始或终止标记。如果没有标记待读取(否),判定XML文档已被处理到最后,在步骤S807中终止处理。
另一方面,如果在步骤S802中判定正在被处理的XML文档D包含待读取的标记(是),则在步骤S803中,把标记的名字赋予给变量“Tag”,以计算Path=Path+”/”+Tag,并且标记的位置编号递增1。利用步骤S803中的处理,生成从特定起始标记到终止标记的XPath。在步骤S804中,判定变量“Tag”的值是否对应起始标记。如果对应于起始标记(是),在步骤S806中执行起始标记处理。如果在步骤S804中判定变量“Tag”的值不对应于起始标记(否),则在步骤S805中执行终止标记处理。当在步骤S805和S806中相应标记处理完成时,处理返回步骤S802。重复处理直到XML文档D中的所有标记已经被处理。
图9是说明图8中分别在步骤S805和S806执行的起始标记处理和终止标记处理的详细的流程图。步骤S900至S908对应于起始标记处理,步骤S910至S917对应于终止标记处理。首先描述在步骤S900和S908中的起始标记处理。
当控制传递自步骤S804时,起始标记处理在步骤S900中开始。在步骤S901中,通过设置Count=Count+(0),在Count堆栈中注册“0”。在步骤S902中,判定是否Path=P,以判定正在D中读取的标记的XPath是否对应于用于分割到值分区的单位。如果不满足Path=P(否),则处理跳转到步骤S904,在此根据是否“Count中的第一个元素大于等于1,和End≥0”的判 断,来判定是否输出当前分割位置候选。如果在步骤S904中判定Count中的第一个元素是0或者End<0(否),则处理跳转到步骤S906,此处判定是否变量End=-1,即,该终止标记是否是分割终止位置候选。如果End=-1(是),则通过在步骤S907中设置Start=Path+(i),而把Start位置编号递增“i”,在步骤S908中,控制返回到图8中的步骤S802以终止处理。
另一方面,如果在步骤S902中判定Path=P(是),则在步骤S903中,把Count中的全部元素加(add)1中,并且在步骤S904中判定如下条件是否成立:“Count中的第一个元素大于等于1,和End≥0”。这种情况下,在步骤S904中的判定返回肯定的回答(是),因此,在步骤S905中,(起始位置编号和终止位置编号)的对儿被添加到变量“CutRangeSet”,并且End设置为“-1”。在步骤S906中,判定是否End=-1。在这些条件下,在步骤S906中的判定返回肯定的回答(是),这样,在步骤S907中,Start中的位置编号以“i”递增,并且在步骤S908中,控制返回到图8中的步骤S802以终止处理。
在步骤S910中,如图8所示的终止标记处理开始,其响应于在步骤S804中变量“Tag”中的值不对应起始标记的判断而被调用。在步骤S911中,判定是否Count中的第一个值大于等于1,如果大于等于1(是),在步骤S912中End设为“i”,以准备好下一个起始标记的检测。在步骤S913中,去除Start中的上面元素,在步骤S914中,去除Count中最上面的元素。稍后参考图10,将更详细地描述去除Start中的上面元素和Count中的最上面元素的处理。
如果在步骤S915中,确定Count中的第一个元素大于等于2,这意谓着现在正被判定的标记的值已经出现在它的父标记下。这样,在步骤S916中,通过把该时判断下的变量“Tag”的位置编号设置为“End”,起始位置编号和终止位置编号相互关联,并且作为范围定义对添加到CutRangeSet。接着,“End”的值被重置为-1。其后,终止处理,同时控制从步骤S917传递到图8中的步骤S802。
图10图示图9中步骤S913执行的去除Start堆栈(Start stack)中的上面元素的处理。在Start堆栈中,根据在所包含于XPath=P的标记之中用于识别要被分割的子节点的标记,把元素(列)入堆栈(stacked)。通过检测要分割的子节点的终止标记,Start堆栈具有识别要分割的子节点的起点的功能。对Start堆栈,解析器224在它的第一次运行中,分析要处理的XML文档的标 记,以识别在XML文档的特定行号中包含哪个标记,用于在合适的存储区域中以分割位置列表710的形式注册。
XML分割单元226读取由XML解析器224生成的分割位置列表,以添加到Start堆栈。为此,XML分割单元226重启XML解析器224进行第二次运行,当第一个根标记找到时,它在堆栈中注册根标记和它的位置编号。此后,每次检测到标记,它在堆栈中注册标记和它的位置编号。例如,当进程执行到行号5时,检测到标记=</c>。XML分割单元226识别作为分割单位的XPath=P=*/a/b/c,添加标记和它们的位置编号到堆栈中,直到标记<c>被检测到。作为结果,当进程执行到行号4时,把值堆栈1020注册在Start堆栈中。应该注意,分割单位描述提供单位子树的属性定义标记。分割单位可以使用通配符来描述,如举例说明的实施例中一样,或者可以通过从根到第一个单位子树的最后属性定义标记的描述来定义。
当检测到标记<c>时,把其中检测到了标记<c>的位置编号添加到堆栈的最上面的列(column)中。当检测到对应于标记<c>的终止标记</c>时,在图示的实施例的情况中检测到标记<b>的时刻,判定已经检测到要分割的单位子树,在Start堆栈中的上面的两列1040被去除,并且把对应的紧紧在前的起始标记<b>的位置编号作为最上面的列1050添加到堆栈中,由此生成值堆栈1030。此时,把位置编号6注册到变量“Tag”中。把单位子树设置为从注册在堆栈中的最上面的列中的位置编号到此时注册在变量“Tag”中的值的部分。在举例说明的实施例中,得到第一个范围定义对=(3,6)。
其后,在值堆栈1030中,把针对标记<b>已经注册的值更新为所检测到的标记<b>的位置编号。当标记<c>在位置编号8被检测到时,如值堆栈1020的情况那样生成值堆栈1060。随着处理进一步进行,当检测到标记</b>时,执行如前述在值堆栈1020上执行的同样的处理,用于去除上面的两列1070,把对应的紧紧在前的起始标记<b>的位置编号作为最上面的列1090添加到堆栈中,从而生成值堆栈1080。
当处理完成的时候,第二个范围定义对=(7,10)被判定。重复上面的处理直到没有要处理的标记或者直到</root>标记被检测到,由此把要处理的XML文档分割为单位子树。分割的结果以子树数据列表的形式存储在服务器130合适的存储空间。
图11是图示根据图9所示的处理在本实施例中实现的更新Count堆栈的 处理示意图。图11说明了在生成的值堆栈中的值的转变1100的实施例。在图11所示的堆栈中注册的值根据XPath而被更新,用作分割单位的XPath中的最后的起始标记用作被包含在正处理的XML文档中的要分割的XPath的路径计数器。在所示实施例中,XPath=P=*/a/b/c。服务器130中的XML分割单元226在XML解析器224的第二次运行期间,与图10所示的Start堆栈的生成并行地生成Count堆栈。
在XML解析器224的第二次运行期间,当检测到包含在XPath中的根标记时,值堆栈的注册开始。其后,每次检测到XPath中的后续的起始标记时,添加新的列,并且在其中注册数值=0。随着处理的进行,当检测到XPath中的最后一个元素的起始标记时,把“1”加到所有列的值。在这一阶段,生成值堆栈1112。
其后,还是在XML解析器224的第二次运行期间,删除堆栈中的上部的列的值,直到检测到下一个起始标记,当检测到作为XPath的构成元素的起始标记时,“0”被当作堆栈中最上面列的值而注册。随着XML解析器224的处理的进行,当检测到构成XPath的最后一个标记时,再次把“1”加到堆栈中的值,这样,生成值堆栈1114。应了解,堆栈中最下面列中的数值提供在正被处理的XML文档中所检测到的单位子树的数量。其后,重复类似的处理,当行号达到“11”时,数值为0的列被再一次入堆栈。一旦检测到行号14中的标记<c>,“1”被加到堆栈中所有列的值,第三个范围定义对(13,16)被输出。最后,当检测到行号18中的</root>时,堆栈中所有的值被删除,由此,检测到处理终止。作为结果,确定了图11所示的XML文档包含三个单位子树。
图12说明用于XML分割的子树数据列表的实施例,它在图9至图11说明的处理中生成。在图12所示的实施例中,与分割位置列表710相关联地示出子树数据列表1200的数据结构,用于阐明与XML文档中的对应行的关系。如图12所示,根据XML分割单元226的处理,根据XML文档的结构,相继以(3,6)、(7,10)和(13,16)的顺序,把单位子树的范围注册在用于识别包含在正被处理的XML文档中的子节点的集合(set)变量“CutRangeSet”中,。
在子树数据列表中,注册在起始标记处理和终止标记处理过程中生成的Start堆栈的数据、Count堆栈中的值和End的值。子树数据列表提供用于考 虑在XML文档的单位子树的层次结构而执行的随后分区的数据。
本实施例的服务器130使用注册在图12所示的CutRangeSet中的行号来指定要注册在基本分区的XML文档中子树,并通过XML分割单元226完成对于要被分区到基本分区和值分区中的子树的分割。
图13是图示生成要注册在基本分区中的子树的处理的流程图。图13中的处理开始于当单位子树的识别结束且图12所示的数据结构建立时调用的步骤S1300。在步骤S1301中,初始化i、j、T和Base的值,其中“i”代表行号,“j”是用于对单位子树计数的计数器,“k”对应于单位子树的数量,即,Count中的第一个数值。此外,“T”是单位子树被注册于其中的堆栈,“Base”是要被注册于基本分区的XML文档中的子树被注册于其中的堆栈。
在步骤S1302中,调用XML解析器224,其处理分割位置列表710以判定D是否包含待读取的标记。如果没有待处理的标记(No),这意味着在正被处理的XML文档上的处理已经结束,因此,在步骤S1313中,到那时为止生成的用于注册于基本分区中的子树和到那时为止生成的用于注册于值分区中的单位子树被提供以指针,并被注册于相应的分区中。
另一方面,如果在步骤S1302判定有待读取的标记(Yes),在步骤S1303中,把正被处理的标记分配给变量“Tag”,以及计数器“i”以1递增。在步骤S1304中,判定是否j>k或i<bj。出于有效地处理单位子树的范围的目的而进行该处理。如果在步骤S1304中判定j>k或i<bj都不成立(No),则在步骤S1305中判定是否i<ej。如果i<ej(Yes),意味着正被处理的行位置在特定子节点的范围内,因此,在步骤S1306中,它通过设置T=TUTag添加到T堆栈中。
如果在步骤S1304中j>k或i<bj(Yes),这意味着正被处理的行位置没有被包含在单位子树中,因此,处理分支到步骤S1308,其中通过设置Base=Base U Tag它被添加到Base堆栈。如果i<ej不成立(No),这意味着当前正被处理的行位置在特定子节点的范围之外,因此,在步骤S1309,通过设置j=j+1计数器j以1递增,并且设置Base=Base U Tag。在这一阶段,正被处理的行号的标记被注册在Base堆栈中,T作为子树被输出到合适的值分区中。其后,T被重新初始化成
在步骤S1309之后,在步骤S1306中,设置T=TUTag。这种情况下,T已经在步骤S1309中被初始化成 因此,对应于单位子树的子树 在T中被累积。步骤S1306之后,在步骤S1307中,判定是否i=bj。如果i=bj(Yes),这意味着当前正被处理的行位置对应单位子树的第一行,因此,在步骤S1308中,通过设置Base=BaseUTag,把该标记信息注册为要注册在基本分区的索引的候选。然后处理返回到步骤S1302并重复直到D中没有剩余标记。
另一方面,在步骤S1307中,如果不满足i=bj(No),这意味着该行不是要注册在基本分区的行,因此,处理直接返回到步骤S1302并重复直到D中没有剩余标记。利用上述处理,可以把要注册在基本分区的子树和要被作为单位子树注册的子树从正被处理的XML文档分离。
当XML文档的分割结束,调用分割XML注册单元228,分割XML注册单元228执行添加指针和把单位子树注册到分区。图14说明根据本实施例的分区的实施例。利用本实施例的处理,图3所示的XML文档300被分区成基本分区1410和值分区1420和1430。在本实施例中,为了把XML文档分离到基本分区和值分区同时维持XML文档的原始层次结构,生成指针以使得注册在分区中的单位子树和索引间的交叉参考成为可能,以及把生成的指针注册在索引中和与索引对应的单位子树的行位置中。
对于指针,根据分区设置唯一值。基本分区中的每个索引中,注册分配给对应单位子树的指针被注册;而在每个单位子树中,注册分配给基本分区中的对应索引的指针。为了生成指针,可以采用各种各样的实施例。例如,在生成基本分区和值分区的时候,可以提供计数器,用于例如对所添加到相应分区的子树的行编号进行计数。
在此实施例中,当索引被添加到基本分区时,可以获取基本分区中的计数器数值Cb(Count_base)。对于注册在值分区中的对应单位子树,可以获取对应于索引的值分区中的计数器数值Cv(Count_value)。然后,可以把用作指针的计数器数值Cv添加到索引,以及可以把用作指针的计数器数值Cb可以添加到对应于该索引的单位子树。
此外,对于指针,代替在上述实施例中根据分区生成和添加数值,当注册索引和由该索引所参考的单位子树时,可以分别随机生成指针Rb(Random_base)和Rv(Random_value),可以把生成的指针相关联地添加到对应的行。此外,指针可以以各种方式被嵌入。例如,指针嵌入处理的第一个实施例中,指针数值可以作为索引和XML标记的隐含的属性被嵌入到索 引和单位子树中对应的XML标记中。
例如,图14示出了如下实施例,其中在基本分区1410中,数值ptr=“2006:467”和ptr=“2007:8142”作为隐含的属性值被分别添加到<订单票据>标记1450和1460。响应于此,作为指向基本分区中的索引的指针的b:334作为隐含属性以Parent_ptr=”b:344”的形式被添加到单位子树中的对应<订单票据>标记1470中。此实施例可以以低成本在现有的XMLDB中实现,而与现存XMLDBD的实现无关,并且无需额外的应用用于搜索处理。
在指针嵌入处理的第二个实施例中,修改现有的XMLDB的实现。具体来说,在为XMLDB生成的节点表中的记录中,额外嵌入对应的指针数值。根据此实施例,防止添加了指针的标记被包含在多个分区中,因此,有利地降低硬件资源的消耗。但是,因为这要求修改现有XMLDB中的节点表注册处理,因而要求修改XMLDB的实现,所以该实施例可能适于在XMLDB的实现阶段当分区被执行时来使用。
图15说明根据本实施例被分区的XML文档,和在基本分区和在值分区中注册的实施例。正被分区的XML文档1510包含根节点(分公司名称=“A”),和在根节点下,从<订单票据编号=“0001”>开始的单位子树1512,和从<订单票据编号=“0002”>开始的单位子树1514。单位子树在用于分区的属性的日期上互不相同。
单位子树1512和1514的每一个中的第一个标记<订单票据...>作为索引被添加到基本分区1530中。根据图13所示的处理,根节点的标记没有被包含在分区单位XPath=P=*/a/b/c中,因此,把该标记分组到基本分区1530。在值分区1532和1534中,注册包含具有要分区的属性值的标记的单位子树。基本分区1530和值分区1532和1534间的交叉参考用指针实现。
在客户端110-118之一发出搜索请求到服务器130的情况下,服务器130使用包含在搜索请求中的关键字来执行搜索,搜索结果生成单元216生成反映层次结构的搜索结果。生成的搜索结果通过网络适配器202被发送到客户端110-118之一。
在本实施例中,例如,定义SQL功能“XMLQUERY”和“XMLEXISTS”用于XMLDB的搜索。命令“XMLQUERY”是在SQL语境中实现X询问(XQuery)表达式的SQL存量(scalar)函数。“XMLQUERY”可以被用来传递变量到由XMLQUERY指定的XQuery表达式。此外,“XMLQUERY”返 回作为XML序列(sequence)的XML值。
这里,“XMLEXISTS”的变元(argumet)判定XQuery表达式是否返回至少有一项的序列。如果变元中指定的XQuery表达式返回空序列,“XMLEXISTS”返回“false”;否则,“XMLEXISTS”返回“true”。例如,返回包含在存储在“bookstore”表中的列“infoxml”中的XML文档中的日期值为2006/12/01的“/branch/订单票据/日期”的列表的SQL语句可以被描述如下:
[表达式1]
SELECT XMLQUERY(‘$i/分公司/订单票据’PASSING infoxml AS“i”)FROM bookstore
WHERE XMLEXISTS(‘$i/分公司/订单票据、[日期=“2006/12/01”]’PASSING infoxml AS“i”)...(1)
(更详细的公式,请参看,比如http://publib.boulder.ibm.com/infocenter/db2luw/v9/topic/com.ibm.db2.udb.apdv.embed.doc/doc/c0023899.htm和http://publib.boulder.ibm.com/infocenter/db2luw/v9/topic/com.ibm.db2.udb.apdv.embed.doc/doc/c0023906.htm)
此外,在搜索期间参考值分区中的日期标记的情况下,如果日期标记没有被提供指针,则应了解,该日期标记的父元素(=订单票据)存在于相同的分区中,而不是在基本分区中。另一方面,如果日期标记被提供有指针,则应了解,其已经被分区,作为结果,订单票据(订单)的父节点被注册在基本分区中。这允许现有的SQL命令用于XMLDB,而不管其是否被分区。
此外,在针对除了已经被用于分区的XPath以外的路径指定搜索条件的情况下,可以搜索所有分区和根据要求搜索基本分区,并且可以合并结果。从而,可以使用同用于常规RDB分区表的处理类似的处理来处理搜索请求。
图16说明可以根据本实施例分区的XML文档的实施例。图16所示的实施例是注册在MEDLINE数据库中的XML文档的一部分。MEDLINE数据库是用于参考医疗文献的公共数据库,包含大概16,000,000条记录。可供下载的数据是XML文件的形式,其中一个XML文件通常包含30,000篇文章。
图16所示实施例的XML文档可以根据本实施例例如利用文章的出版年 份(publication years)作为要分区的目标数据来分区。对于搜索例如紧紧在过去五年出版的文章的查询,正被搜索的空间大大地减少了,因此,搜索的速度显著地提高。在分区中,所生成的指针和索引允许在XMLDB中注册的时候的原始层次结构得以维持,因此,可以有效地执行分区,同时实质上维持XMLDB的搜索效率。
此外,在图16所示的实施例中,在值分区中可以注册以文章为单位的单位子树(MdelineCitation),因此,即使在执行来获得文章的搜索中,也只需访问对应分区,由此搜索效率大大提高。如上所述,本实施例有利地提高了数据的搜索的效率,该数据包含作为标记的单位在RDB中被使用的多个记录,还包含在分区中使用的属性,上述记录被收集成为单一的XML文件。
本实施例的上述功能可以通过机器可执行的程序被实现,该程序以面向对象的程序语言比如C++、JavaTM、JavaBeansTM、JavaTM Applet、JavaTM Script、Perl或Ruby来描述,并且程序可以存储在机器可读的记录介质比如,硬盘驱动器、CD-ROM、MO(磁光盘)、软碟、EEPROM或EPROM中用于分发,或可以以另一台装置可读和可执行的方式经由网络发送。
虽然参考实施例描述了本发明,本发明并不限于上述的实施例。相反,在那些在本领域的技术人员可想到的范围中,各种修改、添加、删除及其它实施例都有可能,只要它们运用了本发明的功能和结果,这些实施例都在本发明的范围内。
Claims (17)
1.一种包括其中管理具有层次结构的结构化文档的数据库的信息处理设备,所述信息处理设备包括:
分区生成单元,其生成值分区和基本分区,在该值分区中,包括单位子树,该单位子树包括在该结构化文档中要被分区的目标数据,该结构化文档根据该目标数据的值被分离和注册,该基本分区包括除所述单位子树以外的子树和用来唯一地识别所述单位子树的索引;
解析器单元,其识别定义所述结构化文档中的属性值的起始标识和终止标识的位置,以生成与属性值的层次结构对应的分割位置列表,并且在存储区域中注册所述分割位置列表;
分割单元,其通过参考所述分割位置列表以识别所述单位子树的起始位置和终止位置,将所述结构化文档分割成所述单位子树,而从结构化文档分离所述单位子树和用于参考所述单位子树的索引,所述单位子树包括所述目标数据;以及
注册单元,其把由所述分割单元分离的所述单位子树和用于识别所述单位子树的索引根据所述单位子树中目标数据的值注册在分离的分区中。
2.根据权利要求1的信息处理设备,其中,包括多个起始标识的单位子树的索引是从所述单位子树中的所述起始标识中的第一个生成的。
3.根据权利要求2的信息处理设备,其中,在把所述单位子树和所述索引注册在所述分离的分区之前,所述注册单元添加指针到所述单位子树和用于唯一地识别所述单位子树的所述索引,以允许在所述单位子树和所述索引之间的交叉参考。
4.根据权利要求3的信息处理设备,其中,为了通过参考所述分割位置列表来分离用于在所述分离的分区中注册的所述单位子树,所述分割单元生成单位子树数据列表并且在存储区域中注册所生成的列表,所述单位子树数据列表包括范围定义对和发生计数器,在该范围定义对中,所述结构化文档中所包含的所述单位子树的起始位置和终止位置被相互关联,在该发生计数器中,注册了在所述结构化文档中所述单位子树的描述的顺序。
5.根据权利要求4的信息处理设备,还包括:
SQL处理单元,其使用所述目标数据来搜索注册在所述值分区中的所述单位子树;以及
搜索结果生成单元,其生成由所述SQL处理单元执行的搜索的结果。
6.根据权利要求4的信息处理设备,其中,所述结构化文档以XML描述,以及所述数据库是实现XML文档的存储和搜索的XMLDB。
7.一种数据库系统,包括其中注册了具有层次结构的结构化文档的数据库,所述数据库系统包括:
数据管理单元,其生成和管理值分区和基本分区,在该值分区中,包括单位子树,该单位子树包括在该结构化文档中要被分区的目标数据,该结构化文档根据该目标数据的值被分离和注册,该基本分区包括除所述单位子树以外的子树和用来唯一地识别所述单位子树的索引;
SQL处理单元,处理用于搜索注册在所述数据库中的所述结构化文档的搜索请求,该搜索请求指定所述结构化文档的所述层次结构;
搜索结果生成单元,其通过使用由所述SQL处理单元在所述值分区执行的个别搜索的结果,生成关于该搜索请求的搜索结果;
所述数据管理单元包括:
分区生成单元,其生成所述分区;
解析器单元,其识别定义所述结构化文档中的属性值的起始标识和终止标识的位置,以生成与属性值的层次结构对应的分割位置列表,并且在存储区域中注册所述分割位置列表;
分割单元,其通过参考所述分割位置列表以识别所述单位子树的起始位置和终止位置,将所述结构化文档分割成所述单位子树,而从结构化文档分离所述单位子树和用于参考所述单位子树的索引,所述单位子树包括所述目标数据;以及
注册单元,其把由所述分割单元分离的所述单位子树和用于识别所述单位子树的索引根据所述单位子树中目标数据的值注册在分离的分区中。
8.根据权利要求7的数据库系统,其中,包括多个起始标识的单位子树的索引是从所述单位子树中的所述起始标识中的第一个生成的。
9.根据权利要求8的数据库系统,其中,在把所述单位子树和所述索引注册在所述分离的分区之前,所述注册单元添加指针到所述单位子树和用于唯一地识别所述单位子树的所述索引,以允许在所述单位子树和所述索引之间的交叉参考。
10.根据权利要求9的数据库系统,其中,为了通过参考所述分割位置列表来分离用于在所述分离的分区中注册的所述单位子树,所述分割单元生成单位子树数据列表并且在存储区域中注册所生成的列表,所述单位子树数据列表包括范围定义对和发生计数器,在该范围定义对中,所述结构化文档中所包含的所述单位子树的起始位置和终止位置被相互关联,在该发生计数器中,注册了在所述结构化文档中所述单位子树的描述的顺序。
11.根据权利要求10的数据库系统,其中所述结构化文档以XML描述,以及所述数据库是实现XML文档的存储和搜索的XMLDB。
12.一种用于其中注册了具有层次结构的结构化文档的数据库的信息处理方法,包括:
生成值分区和基本分区,在该值分区中,包括单位子树,该单位子树包括在该结构化文档中要被分区的目标数据,该结构化文档根据该目标数据的值被分离和注册,该基本分区包括除所述单位子树以外的子树和用来唯一地识别所述单位子树的索引;
识别定义所述结构化文档中的属性值的起始标识和终止标识的位置,以生成与属性值的层次结构对应的分割位置列表,并且在存储区域中注册所述分割位置列表;
通过参考所述分割位置列表以识别要被分割的所述单位子树的所述起始位置和所述终止位置,将所述结构化文档分割成单位子树,而从结构化文档分离所述单位子树和用于参考所述单位子树的索引,所述单位子树包括所述目标数据;以及
把在所述分离步骤中分离的所述单位子树和用于识别所述单位子树的索引根据所述单位子树中目标数据的值注册在分离的分区中。
13.根据权利要求12的信息处理方法,其中,所述生成步骤包括对包括多个起始标识的单位子树,通过识别在单位子树中的所述起始标识中的第一个生成所述索引的步骤。
14.根据权利要求13的信息处理方法,其中,为了通过参考所述分割位置列表来分离用于在所述分离的分区中注册的所述单位子树,所述分割步骤包括生成单位子树数据列表并且在存储区域中注册所生成的列表的步骤,所述单位子树数据列表包括范围定义对和发生计数器,在该范围定义对中,所述结构化文档中所包含的所述单位子树的起始位置和终止位置被相互关联,在该发生计数器中,注册了在所述结构化文档中所述单位子树的描述的顺序。
15.根据权利要求14的信息处理方法,其中,所述注册步骤包括下述步骤:在把所述单位子树和所述索引注册在所述分离的分区之前,添加指针到所述单位子树和用于唯一地识别所述单位子树的所述索引,以允许在所述单位子树和所述索引之间的交叉参考。
16.根据权利要求15的信息处理方法,使得所述信息处理设备进一步执行下述步骤:
通过使用所述目标数据来搜索注册在所述值分区中的所述单位子树;和
通过合并在所述搜索步骤中在所述值分区执行的个别搜索的结果而生搜索结果。
17.一种信息处理设备,包括其中管理具有层次结构的结构化文档的数据库,所述信息处理设备包括:
分区生成单元,其生成值分区和基本分区,在该值分区中,包括单位子树,该单位子树包括在该结构化文档中要被分区的目标数据,该结构化文档根据该目标数据的值被分离和注册,该基本分区包括除所述单位子树以外的子树和用来唯一地识别所述单位子树的索引;
解析器单元,其识别定义所述结构化文档中的属性值的起始标识和终止标识的位置,以生成与属性值的层次结构对应的分割位置列表,并且在存储区域中注册所述分割位置列表;
分割单元,其通过参考所述分割位置列表以识别所述单位子树的所述起始位置和所述终止位置,将所述结构化文档分割成单位子树,而从结构化文档分离所述单位子树和用于参考所述单位子树的索引,所述单位子树包括所述目标数据;以及
注册单元,其把由所述分割单元分离的所述单位子树和用于识别所述单位子树的索引根据所述单位子树中目标数据的值注册在分离的分区中,
其中所述单位子树包括多个起始标识,所述索引是从所述单位子树中的所述起始标识中的第一个生成的;
其中在把所述单位子树和所述索引注册在所述分离的分区之前,所述注册单元添加指针到所述单位子树和用于唯一地识别所述单位子树的所述索引,以允许在所述单位子树和所述索引之间的交叉参考;
其中为了通过参考所述分割位置列表来分离用于在所述分离的分区中注册的所述单位子树,所述分割单元生成单位子树数据列表并且在存储区域中注册所生成的列表,所述单位子树数据列表包括范围定义对和发生计数器,在该范围定义对中,所述结构化文档中所包含的所述单位子树的起始位置和终止位置被相互关联,在该发生计数器中,注册了在所述结构化文档中所述单位子树的描述的顺序;以及
其中所述结构化文档以XML描述,所述数据库是实现存储和搜索XML文档的XMLDB。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP305698/08 | 2008-11-28 | ||
JP2008305698A JP4688111B2 (ja) | 2008-11-28 | 2008-11-28 | 情報処理装置、データベース・システム、情報処理方法、およびプログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101751457A CN101751457A (zh) | 2010-06-23 |
CN101751457B true CN101751457B (zh) | 2013-04-24 |
Family
ID=42223743
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102110842A Expired - Fee Related CN101751457B (zh) | 2008-11-28 | 2009-11-11 | 信息处理设备、数据库系统、信息处理方法 |
Country Status (4)
Country | Link |
---|---|
US (2) | US8856183B2 (zh) |
JP (1) | JP4688111B2 (zh) |
KR (1) | KR101119290B1 (zh) |
CN (1) | CN101751457B (zh) |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102754085B (zh) * | 2010-02-15 | 2015-07-15 | 吉冈诚 | 分区管理装置、分区管理方法 |
JP5563529B2 (ja) * | 2011-06-27 | 2014-07-30 | 日本電信電話株式会社 | 情報記録装置、情報記録方法およびプログラム |
US8935267B2 (en) * | 2012-06-19 | 2015-01-13 | Marklogic Corporation | Apparatus and method for executing different query language queries on tree structured data using pre-computed indices of selective document paths |
US8892599B2 (en) * | 2012-10-24 | 2014-11-18 | Marklogic Corporation | Apparatus and method for securing preliminary information about database fragments for utilization in mapreduce processing |
CN102984017B (zh) * | 2012-12-31 | 2015-11-18 | 北京佳讯飞鸿电气股份有限公司 | 一种网管系统数据同步的方法 |
KR101416890B1 (ko) * | 2013-05-03 | 2014-07-08 | 주식회사 엘지유플러스 | 데이터 처리 방법 및 장치 |
WO2015099961A1 (en) * | 2013-12-02 | 2015-07-02 | Qbase, LLC | Systems and methods for hosting an in-memory database |
CN104753891B (zh) * | 2013-12-31 | 2019-04-05 | 中国移动通信集团湖南有限公司 | 一种xml报文解析方法及装置 |
US9842152B2 (en) * | 2014-02-19 | 2017-12-12 | Snowflake Computing, Inc. | Transparent discovery of semi-structured data schema |
US10282437B2 (en) * | 2014-04-17 | 2019-05-07 | Oracle International Corporation | Partial indexes for partitioned tables |
CN105224536A (zh) | 2014-05-29 | 2016-01-06 | 国际商业机器公司 | 划分数据库的方法和装置 |
CN106796589B (zh) * | 2014-05-30 | 2021-01-15 | 湖北第二师范学院 | 空间数据对象的索引方法和系统 |
KR101679011B1 (ko) * | 2014-06-26 | 2016-11-24 | 주식회사 알티베이스 | 데이터베이스에서 데이터 이동을 처리하는 방법 및 장치 |
CN104111994B (zh) * | 2014-07-04 | 2017-08-01 | 北京思特奇信息技术股份有限公司 | 一种基于混合数据源的标签数据筛选方法及装置 |
CN106569731B (zh) * | 2015-10-10 | 2020-08-04 | 阿里巴巴集团控股有限公司 | 极限存储方法、装置及设备 |
KR101656077B1 (ko) * | 2015-10-28 | 2016-09-08 | 주식회사 인피니플럭스 | 암시적 타임 칼럼값을 이용한 시간 기반 파티셔닝 시스템 및 방법 |
CN105447112B (zh) * | 2015-11-12 | 2019-02-01 | 国云科技股份有限公司 | 一种实现关系数据库Hash分区高效扩展的方法 |
US20170308606A1 (en) * | 2016-04-22 | 2017-10-26 | Quest Software Inc. | Systems and methods for using a structured query dialect to access document databases and merging with other sources |
CN108241620B (zh) * | 2016-12-23 | 2022-03-18 | 北京国双科技有限公司 | 查询脚本的生成方法及装置 |
FR3065093B1 (fr) * | 2017-04-05 | 2019-04-26 | Amadeus | Gestion d'identifiants uniques dans une base de donnees |
US10289708B2 (en) | 2017-04-05 | 2019-05-14 | Amadeus S.A.S. | Management of unique identifiers in a database |
EP3385867B1 (en) * | 2017-04-05 | 2019-11-20 | Amadeus S.A.S. | Management of unique identifiers in a database |
US11416466B2 (en) * | 2017-06-02 | 2022-08-16 | Chaossearch, Inc. | Data edge platform for improved storage and analytics |
KR102003487B1 (ko) * | 2017-08-28 | 2019-10-01 | 서울시립대학교 산학협력단 | 본문 태그 판별 모델 제공 장치, 방법 및 본문 태그 판별 모델 적용 장치 |
US11157510B2 (en) | 2018-02-28 | 2021-10-26 | Chaossearch, Inc. | Data normalization using data edge platform |
EP3913879A4 (en) * | 2019-02-21 | 2022-01-19 | Huawei Technologies Co., Ltd. | MESSAGE SYNTACSIS METHOD, DATA SENDING END, DATA RECEIVING END AND SYSTEM |
US11334600B1 (en) * | 2021-03-31 | 2022-05-17 | International Business Machines Corporation | Partial reloading in data synchronization |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001142752A (ja) * | 1999-11-15 | 2001-05-25 | Hitachi Ltd | データベース管理方法 |
CN1545048A (zh) * | 2003-11-17 | 2004-11-10 | 中兴通讯股份有限公司 | 一种用二维表实现的树的存储、访问的方法 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6519597B1 (en) * | 1998-10-08 | 2003-02-11 | International Business Machines Corporation | Method and apparatus for indexing structured documents with rich data types |
JP2000348038A (ja) * | 1999-06-02 | 2000-12-15 | Fujitsu Ltd | 半構造データベースのためのデータ格納装置および方法 |
US7287216B1 (en) * | 2000-05-31 | 2007-10-23 | Oracle International Corp. | Dynamic XML processing system |
US6684204B1 (en) * | 2000-06-19 | 2004-01-27 | International Business Machines Corporation | Method for conducting a search on a network which includes documents having a plurality of tags |
JP2003131933A (ja) * | 2001-10-23 | 2003-05-09 | Nippon Hoso Kyokai <Nhk> | 文書ファイル保存方法及び文書ファイル保存プログラム |
EP1607868A4 (en) * | 2003-03-10 | 2009-04-22 | Sharp Kk | DATA PROCESSING DEVICE, DATA PROCESSING PROGRAM AND RECORDING MEDIUM |
US20050097128A1 (en) | 2003-10-31 | 2005-05-05 | Ryan Joseph D. | Method for scalable, fast normalization of XML documents for insertion of data into a relational database |
JP2005135317A (ja) * | 2003-10-31 | 2005-05-26 | Toshiba Solutions Corp | 文書管理システムおよび文書管理プログラム |
WO2005114494A1 (en) | 2004-05-21 | 2005-12-01 | Computer Associates Think, Inc. | Storing multipart xml documents |
JP4724606B2 (ja) | 2006-06-05 | 2011-07-13 | 新日本製鐵株式会社 | 溶鋼の連続鋳造方法 |
US7933935B2 (en) | 2006-10-16 | 2011-04-26 | Oracle International Corporation | Efficient partitioning technique while managing large XML documents |
JP4521413B2 (ja) | 2007-02-09 | 2010-08-11 | 株式会社東芝 | データベース管理システム及びプログラム |
-
2008
- 2008-11-28 JP JP2008305698A patent/JP4688111B2/ja not_active Expired - Fee Related
-
2009
- 2009-08-14 KR KR1020090075309A patent/KR101119290B1/ko not_active IP Right Cessation
- 2009-11-06 US US12/613,764 patent/US8856183B2/en not_active Expired - Fee Related
- 2009-11-11 CN CN2009102110842A patent/CN101751457B/zh not_active Expired - Fee Related
-
2014
- 2014-10-07 US US14/508,579 patent/US20150095344A1/en not_active Abandoned
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001142752A (ja) * | 1999-11-15 | 2001-05-25 | Hitachi Ltd | データベース管理方法 |
CN1545048A (zh) * | 2003-11-17 | 2004-11-10 | 中兴通讯股份有限公司 | 一种用二维表实现的树的存储、访问的方法 |
Also Published As
Publication number | Publication date |
---|---|
JP4688111B2 (ja) | 2011-05-25 |
KR101119290B1 (ko) | 2012-03-20 |
US20100138442A1 (en) | 2010-06-03 |
CN101751457A (zh) | 2010-06-23 |
JP2010129001A (ja) | 2010-06-10 |
US8856183B2 (en) | 2014-10-07 |
US20150095344A1 (en) | 2015-04-02 |
KR20100061308A (ko) | 2010-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101751457B (zh) | 信息处理设备、数据库系统、信息处理方法 | |
Teitler et al. | NewsStand: A new view on news | |
CN109885692A (zh) | 知识数据存储方法、装置、计算机设备和存储介质 | |
US10255378B2 (en) | Database structure for distributed key-value pair, document and graph models | |
Crescenzi et al. | Clustering web pages based on their structure | |
US20070027856A1 (en) | Product searching system and method using search logic according to each category | |
US9218380B2 (en) | Method and system for carrying out searches in a database comprising taxonomic classification of digital information contents | |
Eyal-Salman et al. | Feature-to-code traceability in a collection of software variants: Combining formal concept analysis and information retrieval | |
CN110222069A (zh) | 用于批量和实时数据处理的设备、系统和方法 | |
CN102129449A (zh) | 数据计算范围的动态扩展 | |
JP5075653B2 (ja) | データベース管理方法、データベース管理装置、データベース管理プログラム、及び、データベースシステム | |
CN106528648A (zh) | 结合Redis内存数据库的分布式RDF关键词近似搜索方法 | |
CN101326519A (zh) | 用于将xml文档加载到存储器中的方法和机制 | |
Sekhar et al. | Optimized focused web crawler with natural language processing based relevance measure in bioinformatics web sources | |
CN102567521B (zh) | 网页数据抓取过滤方法 | |
CN111949315A (zh) | 用于区块链账本数据的管理装置和方法 | |
KR20180129001A (ko) | 다언어 특질 투영된 개체 공간 기반 개체 요약본 생성 방법 및 시스템 | |
CN108694213A (zh) | 日志文件的生成方法、检索方法及装置 | |
CN102456070A (zh) | 检索装置和检索方法 | |
Moura et al. | Integration of linked data sources for gazetteer expansion | |
CN109446298A (zh) | 模板匹配方法及装置、计算机设备及可读介质 | |
Ge et al. | A novel file carving algorithm for docker container logs recorded by json-file logging driver | |
Huynh et al. | Sequential pattern mining using idlists | |
Tahmasebzadeh et al. | Mm-locate-news: Multimodal focus location estimation in news | |
CN111143582A (zh) | 一种双索引实时更新联想词的多媒体资源推荐方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130424 Termination date: 20201111 |
|
CF01 | Termination of patent right due to non-payment of annual fee |