用于高效地支持通过分层标记数据的即席查询的通用索引的制作方法

文档序号:10494395阅读:187来源:国知局
用于高效地支持通过分层标记数据的即席查询的通用索引的制作方法
【专利摘要】分层数据对象通过使用在本文中被称为层次结构?值索引的索引而被编排索引。层次结构?值索引具有作为索引键的、从分层数据对象提取的记号(标签名称、节点字符串值中的字)。每个记号被映射到与分层数据对象中的记号的数据对应的位置。记号可以表示非叶结点,诸如XML元素或JSON字段。位置可以是覆盖和包括子节点的区域。对于表示非叶结点的记号,该记号被映射到的位置包含与该非叶结点的后代节点对应的任何记号的位置。因此,基于记号在分层数据对象内的位置的记号包含性可以用于确定分层数据对象中的节点之间的包含关系。
【专利说明】
用于高效地支持通过分层标记数据的即席查询的通用索引
[0001] 相关申请
[0002] 本申请要求Zhen Liu等人于2013年11月8日提交的标题为"Generic Indexing Technique Of Efficiently Supporting Ad-Hoc Query Over Hierarchical Semi-Structured Data"的美国临时申请61/901,558的优先权,该申请的内容通过引用并入本 文。
技术领域
[0003] 本发明的实施例涉及查询分层标记数据。
【背景技术】
[0004] 用于构造和描述数据的分层标记语言的使用已经在计算机行业中得到广泛接受。 标记语言的例子是可扩展标记语言(XML)。另一个例子是JavaScript对象表示(JSON)。
[0005] 使用分层标记语言构造的数据由节点组成。节点由标记这些节点的一组定界符划 分,并且可以被标示名称,这些名称在本文中被称为标签名称。一般地,分层标记语言的语 法指定标签名称被嵌入、被并置、或者被以其他方式依照句法地与划分节点的定界符相关 联。存在两种种类的节点,叶节点和非叶结点。
[0006] XML
[0007] 对于XML数据,节点由包括标签名称的起始标签和结束标签划分。例如,在下面的 XML片段中,
[0008] 〈ZIPC0DE〉
[0009] <C0DE>95125</C0DE>
[0010] <CITY>SAN J0SE</CITY>
[0011] <STATE>CA</STATE>
[0012] 〈/ZIPCODE〉
[0013] 起始标签〈ZIP CODE〉和结束标签〈/ZIP CODE〉划分具有名称ZIP CODE的节点。
[0014] 图IA是表示以上XML片段的节点树。参照图1A,它描绘了节点树101。非叶结点被描 绘了双线边界,而叶节点被描绘了单线边界。在XML中,非叶结点对应于元素节点,叶节点对 应于数据节点。节点树中的元素节点在本文中用节点的名称指代,节点的名称是节点所表 示的元素的名称。为方便阐述,数据节点用数据节点所表示的值指代。
[0015] 对应标签之间的数据被称为节点的内容。对于数据节点,内容可以是标量值(例 如,整数、文本字符串、日期)。
[0016] 非叶结点(诸如元素节点)包含一个或多个其他的节点。对于元素节点,内容可以 是数据节点和/或一个或多个元素节点。
[0017] ZIPC0DE是包含子节点C0DE、CITY和STATE的元素节点,这些子节点也是元素节点。 数据节点95125、SAN JOSE和CA分别是元素节点C0DE、CITY和STATE的数据节点。
[0018] 特定节点所包含的节点在本文中被称为该特定节点的后代节点。C0DE、CITY和 STATE是ZIPCODE的后代节点。95125是⑶DE和ZIPCODE的后代节点,SAN JOSE是CITY和 ZIPC0DE的后代节点,CA是STATE和ZIPC0DE的后代节点。
[0019] 非叶结点如此形成具有多个层次的节点的层次结构,该非叶结点在顶层。每个层 次上的节点链接到不同层次上的一个或多个节点。低于顶层的层次上的任何给定节点是该 给定节点直接上方的层次上的父节点的子节点。具有相同父节点的节点是兄弟节点。父节 点可以具有多个子节点。不具有链接到它的父节点的节点是根节点。不具有子节点的节点 是叶节点。具有一个或多个后代节点的节点是非叶结点。
[0020] 例如,在非叶结点ZIP CODE中,节点ZIP⑶DE是顶层上的根节点。节点95125、SAN JOSE和CA是叶节点。
[0021] 术语"分层数据对象"在本文中用于指代一个或多个节点的序列,该序列中的节点 中的至少一个是具有子节点的非叶结点。XML文档是分层数据对象的例子。另一个例子是 JSON对象。
[0022] JSON
[0023] JSON是轻量型分层标记语言。JSON对象包括一组字段,每个字段是字段名称/值 对。字段名称实际上是JSON对象中的节点的标签名称。字段的名称用冒号与字段的值分隔。 JSON值可以是:
[0024]对象,其是括在花括号"{}"里的并且在花括号内用逗号分隔的字段的列表。
[0025] 数组,其是括在方括号"[]"里的逗号分隔的JSON值的列表。
[0026] 原子,其是字符串、数字、真、假或空。
[0027]下面的JSON对象J用于例示说明JS0N。
[0028]
[0029] 对象 J 包含字段 FIRSTNAME、LASTNAME、ADDRESS、STREETADDRESS、CITY、STATE、 POSTAL⑶DE和PHONENUifflERS jIRSTNAME和LASTNAME分别具有原子字符串值 "JOHN" 和 "SMITH" ADDRESS是包含成员字段STREETADDRESS、CITY、STATE和P0STAIX0DE的对象,成员 字段STREETADDRESS、CITY、STATE和P0STALC0DE分别具有原子字符串值 "101 FIRST street"、"san jose"、"ca"、"95110" jhonenumbers是包括原子值 "408 555-1234" 和 "650 123-5555" 的数组。
[0030] JSON对象中的每个字段都是非叶结点,该非叶结点的名称是字段名称。每个数组 和对象是非叶结点。数据节点对应于原子值。
[0031] 图IB描绘作为包括如下所述的节点的分层数据对象101的JSON对象J。参照图1B, 存在四个根节点,它们是FIRSTNAME、LASTNAME、ADDRESS和PHONENUMBERSdFIRSTNAME、 LASTNAME、ADDRESS和PH0NENUMBERS中的每一个均是字段节点。ADDRESS具有后代对象节点。 从该对象节点,派生了四个后代字段节点,它们是STREETADDRESS、LASTNAE、STATE和 POSTALCODEo
[0032] 节点 FIRSTNAME、LASTNAME、STREETADDRESS、CITY、STATE和POSTALCODE具有后代数 据节点,这些后代数据节点分别表示原子字符串值"JACK"、"SMITH"、"101 FIRST STREET"、 "SAN JOSE"、"CA"、"95110"。
[0033] PH0NENUMBERS具有后代数组节点。该数组节点具有表示原子字符串值"408-555-1234"和"650-123-555"的两个后代数据节点。
[0034] 基于模式(schema)的方法
[0035] 高效查询对于访问分层数据对象是极其重要的。用于查询分层数据对象的高效方 法包括基于模式的方法。
[0036] -种基于模式的方法是基于模式的关系-存储方法。在该方法中,分层数据对象 ("集合成员")的集合被作为模式实例存储在由数据库管理系统(DBMS)管理的数据库的表 内。该方法利用对象-关系DBMS的能力来对数据编排索引和查询。一般地,基于模式的关系_ 存储方法涉及向DBMS注册模式,DBMS产生存储模式所定义的属性(例如,元素、字段)所需的 表和列。
[0037] 将分层标记文档或对象的集合存储为模式的实例可能需要开发定义在集合的任 何成员中找到的许多(如果不是全部的话)属性的模式。模式所定义的属性中的一些或许多 可能仅出现在集合成员的相对较小的子集中。模式所定义的属性的数量可能比许多集合成 员的属性的数量大很多倍。许多属性可能被稀疏地填充。管理具有相对较多的属性(其中一 些或许多可能被稀疏地填充)的模式对于DBMS以及DBMS的管理员和用户可能是繁重的。 [0038]无模式方法
[0039]为了避免使用基于模式的方法的缺陷,可以使用无模式方法。一种无模式方法是 部分投影方法。根据部分投影方法,集合的一组常被查询的属性被投影并且被复制到另外 的表的列中;这些表的存在是为了使用例如二叉树或位图索引编排来支持列的DBMS索引编 排。当集合的查询工作量已知遵循模式(pattern)以使得常被查询的属性可以被确定时,该 方法最佳地工作。当工作量是临时的并且投影的属性的数量不能被容易地约束到相对较少 的数量时,该方法不是最佳地工作。此外,未被投影的属性中的许多需要对照集合成员使用 文本搜索或功能评估来进行搜索。
[0040] 另一无模式方法是反向索引方法。反向索引用于对集合的值编排索引。反向索引 方法提供基于关键字的高效即席查询。
[0041] 基于结构特征的查询
[0042] 当查询分层标记数据时,重要的是能够指定要返回的数据的结构特征。分层标记 数据的结构特征包括元素包含性(containment)、字段包含性以及分层标记数据中的节点 之间的基于路径的和分层的关系。一般地,基于模式的方法提供基于结构特征的更高效的 即席查询。
[0043] 本文中描述了用于基于分层标记数据的结构特征高效地查询分层标记数据的无 模式索引编排方法。
[0044] 本章节中所描述的方法是可以寻求的方法,但是不一定是以前已经设想过或寻求 过的方法。因此,除非另有指示,否则不应仅由于在本章节中所描述的任一方法包括在本章 节中就假定该方法有资格作为现有技术。
【附图说明】
[0045] 在附图中:
[0046] 图IA例示说明根据本发明的实施例的作为包括节点的分层数据对象的XML数据。
[0047] 图IB例示说明根据本发明的实施例的作为包括节点的分层数据对象的JSON对象。 [0048]图2例示说明根据本发明的实施例的用于为JSON对象创建数据库表并且将JSON对 象插入在该数据库表内的数据库语言语句。
[0049] 图3例示说明根据本发明的实施例的为JSON对象产生的记号。
[0050] 图4例示说明根据本发明的实施例的层次结构-值索引。
[0051] 图5例示说明根据本发明的实施例的用于产生记号以用层次结构-值索引编排索 引的解析事件。
[0052]图6例示说明在其上可以实现实施例的计算机系统的框图。
【具体实施方式】
[0053]在下面的描述中,为了说明的目的,阐述了许多特定细节,以便提供本发明的透彻 理解。然而,将清楚的是,本发明的实施例可以在没有这些特定细节的情况下实施。在其他 情况下,结构和装置被以框图形式示出,以便避免不必要地使本发明模糊。
[0054]以下描述几个特征,这些特征均可以彼此独立地使用或者与其他特征的任何组合 一起使用。然而,任何单个的特征可能不能解决以上所讨论的问题中的任何一个,或者仅可 以解决以上所讨论的问题中的一个。以上所讨论的问题中的一些可能不能通过本文中所描 述的特征中的任何一个来充分解决。尽管提供了标题,但是与特定标题相关的、但是在具有 该标题的章节中没有找到的信息也可能在本说明书的其他地方被找到。
[0055] 概述
[0056] 本文中描述了用于对分层数据对象编排索引的方法,这些方法使得能够基于分层 数据对象的结构特征进行高效查询。分层数据对象通过使用在本文中被称为层次结构-值 索引的索引而被编排索引。层次结构-值索引具有作为索引键的从分层数据对象提取的记 号(token)。记号可以是标签名称、数据节点的字符串值中的字、或数据节点的值,以及其它 事物。每个记号被映射到在一个或多个分层数据对象中与记号的数据对应的位置。
[0057] 记号可以表示非叶结点,诸如XML元素或JSON字段。位置可以是覆盖并且包括非叶 结点的一个或多个子节点的区域。对于表示非叶结点的记号,该记号被映射到的位置包含 与该非叶结点的后代节点对应的任何记号的位置。因此,基于记号在分层数据对象内的位 置的记号包含性(token containment)可以用于确定分层数据对象中的节点之间的包含关 系。包含关系可以用于高效地至少部分地评估分层关系以及对分层数据对象的查询中所指 定的其他结构特征。
[0058] 使用层次结构-值索引查询分层数据对象不需要按照层次结构-值索引编排索引 的分层数据对象的模式。因此,通过层次结构-值索引实现了分层数据对象的高效查询,而 不需要描述分层数据对象的模式。
[0059] 基于本文中所描述的层次结构-值索引的方法不仅就前面描述的包含非叶结点和 叶节点的分层数据对象的模型来进行说明,而且还使用JSON来例示说明。本领域技术人员 可以如本文中所描述的那样将本文中所描述的方法应用于用其他分层标记语言(诸如XML) 编写的其他分层数据对象。
[0060] 例示性分层数据对象
[0061]图2例示说明用于为JSON对象创建并且填充数据库结构的DDL( "数据定义语言") 和DML("数据操纵语言")。这些数据结构和JSON对象用于例示说明本发明的实施例。
[0062] 参照图2,它描绘了DDL语句202,该语句当被提交给DBMS时使DBMS创建具有列JID 和JOBJ的表JTABtJTAB中的行存储JSON对象。JID的数据类型是数值;JTAB中的每行在JID中 存储唯一数值来标识存储在该行中的JSON对象。
[0063] DDL语句204当被提交给DBMS时使DBMS创建并且维护列JOBJ的层次结构-值索引。 当JSON对象被插入到表JTAB中时,层次结构-值索引被更新以反映 JSON对象。
[0064] DML语句206和DML语句208是插入语句,这些插入语句当被提交给DBMS时使DBMS存 储该语句中所指定的JSON对象。DML语句206插入用1标识的JSON对象;该JSON对象在本文中 被称为JSON对象UDML语句208插入用2标识的JSON对象;该JSON对象在本文中被称为JSON 对象2。
[0065] 层次结构-值索引的例示性记号
[0066] 层次结构-值索引可以是包括多个索引的复合索引。根据本发明的实施例,层次结 构-值索引包括关键字索引,并且可以包括一个或多个范围索引。下面在另一个章节中描述 范围索引。
[0067] 关键字索引包括从分层数据对象提取的记号。记号可以是非叶结点的标签名称、 数据节点中的字、或数据节点中的另一个值、定界符、或分层数据对象的另一个特征。形成 关键字索引需要从分层数据对象解析和/或提取记号。在分层数据对象中找到的所有记号 并非全都有必要用关键字索引来编排索引。
[0068] -般地,关键字索引对作为标签名称或者字符串值数据节点中的字的记号编排索 弓丨。关键字索引将每个记号索引编排到包含该记号的一个或多个分层数据对象以及覆盖该 记号的内容的那些分层数据对象中的字符序列。
[0069] 对于JS0N,记号可以是:
[0070] 1)对象或数组的开头
[0071] 2)字段名称
[0072] 3)原子值,在非字符串JSON值的情况下
[0073] 4)字符串原子值中的字
[0074] 记号的次序用序数表示,序数在本文中被称为记号编号。与字段名称或字符串原 子值中的字对应的记号用于形成关键字索引的关键值。关键字索引中的每个索引条目将记 号映射到记号位置,记号位置可以是记号编号或者由例如起始记号编号和结束记号编号定 义的记号范围。
[0075] 与非叶结点的标签名称对应的记号在本文中被称为标签名称记号。关于JS0N,标 签名称是字段名称,与字段名称对应的记号是标签名称记号,但是在本文中也可以被称为 字段记号。
[0076] 就记号的记号编号而言,记号范围指定JSON对象中的与字段节点和该字段节点的 内容对应的区域。
[0077]图3描绘了 JSON对象1中的记号。图3中的每个标出的标记用记号编号指代JSON对 象1中的记号。记号#1是JSON对象的开头。记号#2是字段名称"name"。记号#3是字段"name" 的原子字符串值中的第一个字。记号#4是字段"name"的原子字符串值中的第二个字。记号# 7对应于字段记号"friends"。记号#8是与作为字段"friends"的JSON值的数组的开头对应 的定界符。记号#9和记号#15均是与该数组内的对象的开头对应的定界符。
[0078]作为数据节点的字符串值中的字的记号在本文中被称为字记号。记号#3是字记 号。与数据节点的非字符串值对应的记号在本文中被称为值记号。记号#14和记号#21是表 示日期值的值记号。
[0079]例示性层次结构-值索引
[0080]图4描绘了层次结构-值索引401,根据本发明的实施例的层次结构-值索引。层次 结构-值索引401是包括关键字索引402和日期范围索引404的复合索引。
[0081 ]关键字索引402是如上所述那样对记号编排索引的、包括列"记号"、"类型"和"倒 排列表"的表。列"记号"包含与在JSON对象中找到的字段记号和字记号对应的记号。列"类 型"包含记号类型,其可以是指定作为字段记号的记号的"标签名称",并且可以是指定作为 字记号的记号的"关键字"。
[0082]列"倒排列表"包含倒排列表。倒排列表包括对分层数据对象的一个或多个引用, 这些引用在本文中被称为对象引用。如以下所示的,对象引用包含标识分层数据对象的标 识符以及一个或多个记号位置。
[0083]关键字索引402中的每个条目将记号映射到倒排列表,从而将记号映射到包含该 记号的每个JSON对象和与该记号对应的对象中的位置。图4中的关键字索引402的描述示出 了为JSON对象1和JSON对象2产生的条目。
[0084]参照图4,关键字索引402包含条目"名称"。因为该条目包含列"类型"中的"标签名 称",所以该条目将作为字段记号的记号"名称"映射到倒排列表((1,(2-4),(10-12),(16-19)(2,((2-4)))中指定的JSON对象和记号位置。倒排列表包含以下对象引用:
[0085] (1,(2-4),(10-12) ,(16-19))该对象引用是指JSON对象1。该对象引用将字段记号 "name"映射到JSON对象1中的由记号范围#2、-#4、记号范围#10-#12以及记号范围#16-#19 定义的区域。
[0086] (2,(2-4)))该对象引用是指JSON对象2。该对象引用将字段节点"name"映射到 JSON对象2中的由记号范围#2-#4定义的区域。
[0087]关键字索引402还包含条目"Helen"。因为该条目包含"类型"中的"关键字",所以 该条目将作为数据节点中的字的记号"Helen"映射到倒排列表(1,(11,17))(2,(3))中指定 的JSON对象和区域。该倒排列表包含如下的对象引用:
[0088] (I,(I 1,17))该对象引用是指JSON对象1。该对象引用进一步将字"Helen"映射到 JSON对象1中的由记号位置#11和#17定义的两个位置。
[0089] (2,(3))该对象引用是指JSON对象2。该对象引用将字"Helen"映射到JSON对象2中 的由记号位置#3定义的位置。
[0090] 范围索引
[0091] 对于诸如字的数据类型,值域具有比其他更"连续"种类的数据类型(诸如数值或 日期/时间类型)小的基数。通常,查询使选择标准基于拥有连续数据的属性。范围索引可以 使得能够更高效地计算基于范围的索引。范围索引按范围对连续数据编排索引。范围索引 的键是范围。
[0092]日期范围索引404(参见图4)是范围索引的例子。日期范围索引404是对与具有日 期值的数据节点对应的记号编排索引的表。这样的记号在本文中被称为日期值记号。日期 范围索引404包括列"范围"和列"倒排列表"。列"范围"包含日期范围,"倒排列表"包含倒排 列表。
[0093]日期范围索引404中的每个条目将列"范围"中的相应范围映射到落在该相应范围 内的日期值记号的实例,其中,日期值记号的实例在列"倒排列表"中的倒排列表所指定的 JSON对象内的位置上。列"倒排列表"中的倒排列表包括对JSON对象的一个或多个对象引 用,在本文中被称为对象-值引用。如以下所示的,对象-值引用包含标识JSON对象的标识 符、特定的日期值记号、一个或多个记号位置。
[0094]日期范围索引404包含1990-01-01至2000-01-01的条目。该条目将该日期范围映 射到JSON对象,所述JSON对象包含落在倒排列表(1,(1996-09-10,14)) (1,(1998-09-09, 6)) (2,(1998-09-09,6))所指定的JSON对象的区域内的日期值记号。该倒排列表包含如下 的对象-值引用:
[0095] (1,(1996-09-10,14))该对象-值引用是指JSON对象1。该对象-值引用具体地将日 期值记号1996-09-10映射到记号位置#14。
[0096] (1,(1998-09-09,6))该对象-值引用是指JSON对象1。该对象-值引用具体地将日 期值记号1998-09-09映射到记号位置#6。
[0097] (2,(1998-09-09,6))该对象-值引用是指JSON对象2。该对象-值引用具体地将日 期值记号1998-09-09映射到记号位置#6。
[0098] 虽然已经通过使用对数据类型范围编排索引的范围索引来例示说明本发明的实 施例,但是本发明的实施例不限于对日期数据类型编排索引的范围。
[0099] 在实施例中,用范围索引编排索引的数据类型也可以用对应部分的字符串数据类 型的关键字索引编排索引。例如,范围索引可以对数值型整数值编排索引。整数值也可以被 作为关键字索引402中的字符串值编排索引。范围索引将数值型整数值作为二进制整数类 型(例如,表示整数值的8、16或32位字节类型)编排索引。使用范围索引来评估基于范围的 整数值的标准可能更高效,但是使用关键字索引来评估要求均等的整数值的标准更高效。
[0100] 关键字索引或范围索引可以以各种方式实现;本发明的实施例不限于特定实现。 在实施例中,关键字索引或范围索引被实现为数据库表。包含键值的列(诸如列"记号"和列 "范围")可以用辅助索引(诸如b树索引或位图索引)来编排索引。用于存储倒排列表的列可 以被存储在LOB (大对象)列中。
[0101] 产生层次结构-值索引
[0102] 层次结构-值索引可以使用流传输-事件解析器来产生。流传输-事件解析器遍历 分层数据对象,并且当在遍历分层数据对象期间遇到节点时,产生"解析"事件,节点为诸如 字段节点、元素节点、数据节点或者这样的节点的末尾。
[0103] 根据本发明的实施例,解析事件对应于分层数据对象中的节点、节点的开头或节 点的末尾。每个这样的事件可以对应于一个或多个记号。当解析事件被生成时,所遇到的任 何记号被提取,并且可以被分配JSON对象内的记号位置。所提取的记号和所分配的记号位 置用于更新层次结构-值索引。
[0104] 参照图5,图5包括解析事件表500。解析事件表500列出了在对JSON对象1进行解析 时产生的解析事件的流。所述事件触发为解析事件分配单调递增的记号编号以及针对解析 事件提取的任何记号。这种解析事件在本文中被称为记号解析事件。每个记号解析事件被 归类为非叶事件或叶事件,这依据记号解析事件是对应于用于非叶结点的记号、还是对应 于用于叶节点的记号而定。下表列出了根据实施例的为对JSON对象进行解析而产生的记号 解析事件。其他实施例可以产生不同的一组记号解析事件。
[0107]每个非叶事件对应于非叶结点,并且与另一个非叶事件作为一对一前一后地出 现。一对中的第一个遇到的非叶事件是"开始事件",其对应于JSON对象中的非叶对象的位 置的开头。该对中的另一个事件是"结束事件",对应于区域的末尾。对于字段节点,开始事 件是Field事件,对应的End Field事件是结束事件。对于对象节点,Begin Obj事件是开始 事件,对应的End Obj事件是结束事件。对于数组节点,Begin Array事件是开始事件,对应 的End Array事件是结束事件。
[0108] 当非叶结点的叶事件和开始事件被遇到时,单调递增的记号编号被分配给遇到的 记号。
[0109] 对于非叶结点,分配给Beg Obj事件的记号编号表示记号范围的开头。可以使用堆 栈来跟踪开始事件和对应的结束事件。当开始事件被遇到时,它被压入堆栈的顶部。当结束 事件被遇到时,堆栈上的开始事件被移除,并且最后分配的记号编号被分配作为记号范围 的末尾。
[0110] 对于叶节点,记号解析事件涉及可以变为一个或多个记号的JSON值的提取。对于 非字符串值,记号解析事件和提取的记号被分配记号编号。对于字符串值,记号编号被按顺 序分配给每个字。
[0111] 以上用于提取记号以及分配记号位置的过程可以参照图5中的解析事件表500来 例示说明,解析事件表500列出了分配给JSON对象1(也参见图3)中的记号的记号编号。每个 条目表示一个记号解析事件。对于给定条目,第一列列出了记号解析事件和通过该事件提 取的一个记号或多个记号。第二列列出了分配给每个记号的记号位置。
[0112] 记号解析事件501是事件流中的第一个,并且被分配记号编号1。没有记号被提取。 对应的结束事件是记号解析事件555。当在解析期间被最后遇到时,记号解析事件555触发 最近的先前分配的记号被分配(记号编号21)作为记号解析事件501的记号范围的末尾。 [0113]下一个解析事件是记号解析事件502。记号解析事件502和提取的记号字符串 "name"被分配记号编号2作为记号范围的开头。
[0114]下一个解析事件是记号解析事件503,String Value事件。记号解析事件503被分 配记号编号3和4,因为为记号解析事件503提取的值包含字"John"和"Smith"。记号编号3被 分配给"John",记号编号4被分配给"Smith"。
[0115] 作为跟着Field事件之后的String Value事件的记号解析事件503是记号解析事 件502的结束事件。最近分配的记号编号被作为记号解析事件502及其提取的字段记号 "name"的记号范围的末尾分配。
[0116] 一旦解析事件表500中所示的记号解析事件被产生,关键字索引402就基于提取的 记号和记号的对应的解析事件类型而被更新。
[0117]例如,表示字段名称的记号的记号解析事件502用于更新字段"name"的关键字索 弓丨402中的条目。表示原子字符串值的记号的记号解析事件503用于更新关键字记号"John" 和"Smith"的关键字索引402中的条目。
[0118] 用于编排索引的文本搜索选项
[0119] 在实施例中,以支持各种特殊的文本搜索能力的方式执行产生用于对关键字索引 402编排索引的记号和关键字。
[0120]在实施例中,当产生编排索引的记号时,可以忽略"停止字"。停止字是提供非常小 的搜索选择性的非常常见的字,例如,比如"the"、"and"和"to"的字。对停止字不产生记号 或记号编号;在关键字索引402中不创建条目。
[0121] 实施例可以利用词干提取(stemming)。在词干提取中,(词干的具有词尾变化形式 的)记号字的词干代替记号字用作关键字。因此,当字段的值是"driving home"时,"drive" 被编排索引到记号"driving"的记号位置。
[0122] 实施例可以利用大写字母版本。在大写字母版本中,记号字的大写字母版本用作 关键字。因此,当字段的值是"driving home"时,"DRIVING"被编排索引到记号"driving"的 记号位置,"HOME"被编排索引到"home"的记号位置。
[0123] 基于路径的语句操作符
[0124] 路径表达式是包括"路径步骤"的序列的表达式,该"路径步骤"的序列基于分层数 据对象中的一个或多个节点的分层位置来标识所述一个或多个节点。"路径步骤"可以由 7"或另一个定界符划分。每个路径步骤可以是指定到分层数据对象内的节点的路径 的标签名称。XPath是指定用于路径表达式的路径语言的查询语言。另一查询语言是SQL/ JSON,其由Orac I e公司联合其他方开发。
[0125] 在SQL/JS0N中,JSON的路径表达式的例子是"$ · freinds .name"。步骤"name"指定 具有节点名称"name"的节点。步骤"fre inds"指定节点"name"的父节点的节点名称指 定路径表达式的上下文,其默认是其路径表达式正被评估的当前JSON对象。
[0126] 路径表达式还可以对节点应满足的步骤指定谓词或标准。例如,下面的查询
[0127] $·friends.birthdate>TO_DATE('1998-09-09','YYYY-MM-DD')
[0128]指定节点 "birthdate"大于日期值"1998-09-09"。
[0129] 支持分层标记语言的查询语言包括基于路径表达式对照分层数据对象评估的基 于路径的语句操作符。这样的查询语言可以提供基于路径的语句操作符,这些语句操作符 尤其使用三种以下类型的基于路径的评估中。
[0130] 路径存在:
[0131] 路径存在评估确定路径表达式所标识的节点是否存在于分层数据对象中。如以下 查询语言语句所示的,Oracle公司支持的JS0N_EXISTS操作符是可以用于对JSON对象执行 路径存在评估的语句操作符的例子。
[0132] Ql:Select*from JTAB where JS0N_EXISTS(($.friends.name'passing jobj) [0133]查询Ql指定从具有由路径表达式"$.friends .name"所标识的节点的表JTAB选择 JSON对象。
[0134] 路径中的值
[0135] 如以下查询所示的,路径中的值评估确定节点的值是否包括指定的值;路径表达 式标识节点、值、和/或指定的值应满足的条件。
[0136] Q2:Select*from JTAB
[0137] where JS0N_EXISTS( ($.friends.name?(i=,,Helen Yan')'passing jobj)
[0138] 查询Q2指定从具有包含与字符串值"Helen Yan"相等的值的节点的表JTAB选择 JSON对象。
[0139] 值范围
[0140] 值范围评估确定节点的值是否落在范围内。如以下查询所示的,路径表达式标识 节点和该节点的值应满足的范围。
[0141] Q3:Select*from JTAB
[0142] Where JS0N_EXISTS('$.friends.birthdate>T0_DATE(,1998-09-09,,'YYYY-MM-DD'))'passing jobj)
[0143] 查询Q3指定从具有包含比"1998-09-09"大的日期值的节点的表JTAB选择JSON对 象。
[0144] 对基于路径的操作符的DBMS评估
[0145] 根据本发明的实施例,DBMS对在提交给DBMS的数据库语句中引用的基于路径的语 句操作符进行评估。DBMS使用层次结构-值索引来对基于路径的语句操作符进行评估。为了 描述DBMS如何使用层次结构-值索引来对基于路径的查询操作符进行评估,描述DBMS如何 对数据库语句和其中所包含的语句操作符进行评估是有用的。
[0146] 为了执行查询,DBMS的查询优化器可以产生查询的一个或多个不同的候选执行计 划,这些候选执行计划被查询优化器评估以确定哪个执行计划应被用于计算查询。
[0147] 查询执行计划定义用于计算查询的操作。执行计划可以用互连的节点(在本文中 被称为执行计划操作符或计划操作符)的有向图来表示,所述互连的节点中的每个对应于 执行计划的操作或功能。该图(即,有向树)的层次结构表示执行计划操作被执行的次序以 及数据如何在执行计划操作中的每个之间流动(例如,成行)。
[0148] 执行计划操作符可以产生一组行作为输出。存在用于执行操作(诸如表扫描、排 序-合并联接、嵌套循环联接或过滤操作)的执行计划操作符。例如,表扫描计划操作符可以 扫描数据库表中的行,并且将这些行返回给过滤计划操作符。过滤计划操作符可以过滤满 足查询中的要求列具有特定值的谓词条件的行,返回在该列中具有该特定值的行。
[0149] -种类型的执行计划操作符执行索引评估。这样的计划操作符在本文中被称为索 引计划操作符。索引计划操作符对索引进行评估以返回满足标准的行的身份,所述标准为 诸如指定行的列具有在查询谓词中对该列指定的特定值的标准。
[0150] 根据实施例,索引计划操作符用于使用层次结构-值索引来执行索引评估,以确定 哪些节点和分层数据对象满足路径表达式中所指定的标准。这样的索引计划操作符在本文 中被称为基于路径的索引操作符。
[0151 ]对基于路径的索引操作符的索引评估
[0152] 使用层次结构-值索引对路径表达式执行索引评估可能需要执行不同记号的倒排 列表之间的基于包含性的联接。基于包含性的联接用于确定记号位置包含性,即,记号位置 是否包含另一个记号的记号位置。基于不同记号的倒排列表的对象引用,基于包含性的联 接需要确定记号的对象引用是否是针对同一分层数据对象(基于对象id)的并且一个对象 引用中的记号位置是否包括另一个对象引用的记号范围。
[0153] 根据本发明的实施例,索引计划操作符使用层次结构-值索引来执行基于包含性 的联接,以对路径表达式进行评估。例如,基于包含性的联接可以用于对下面的路径Pl执行 路径存在评估:
[0154] Pl:friends.name"
[0155] 为了对以上路径执行路径存在评估,关键字索引402被扫描以检索路径表达式中 的每个标签名称的倒排列表,标签名称是"friends"和"name"。从这些倒排列表,确定 "friends"的倒排列表包括指定记号位置的对象引用(1,((7-21)),该记号位置包括"name" 的倒排列表中的对象引用(1,···((1〇-12…中的另一个记号位置。
[0156] 后包含性处理
[0157] 使用层次结构-值索引的基于包含性的联接操作可能不足以完成基于路径的评 估。可能需要另外的形式的评估;这样的另外的形式的评估在本文中被称为后包含性处理。 即使包含性-联接可能不足以充分地评估基于路径的评估,基于包含性的联接操作也对高 效地过滤和排除不满足路径表达式的分层数据对象、从而形成候选分层数据对象的更小的 过滤的集合是有用的。候选分层对象的更小的过滤的集合然后可以经过另外的评估以完成 基于路径的评估。索引计划操作符可以既执行基于包含性的操作,又执行后包含性处理。
[0158] 例如,在以上路径Pl中,基于包含性的联接可以确定"friends"节点可以包含节点 "name",而不是节点"name"是节点"friends"的子节点,如路径Pl中所指定的。为了充分地 执行路径存在评估,JSON对象1可能需要通过例如对JSON对象1进行解析来被进一步评估。
[0159] 后包含性处理的另一个例子用路径P2例示说明:
[0160] ($ .name? ($=" John Smith")
[0161] 路径P2请求具有与字符串值"John Smith"相等的节点名称"name"的根节点。基于 包含性的联接可以用于确定哪些字段记号"name"具有既包含关键字记号"John"、又包含关 键字记号"Smith"的记号位置,而不是哪些字段记号对应于包含整个字符串值"John Smith"的字段节点。其原因是,关键字索引402将关键字映射到记号,但是不将包含多于一 个字的整个字符串值映射到记号。尽管如此,基于包含性的联接与后包含性处理组合起来 可以用于充分地评估路径P2。
[0162] 例如,基于包含性的联接可以初始地执行来确定关键字记号"John"和关键字记号 "Smith"的集合,这两者都被字段记号"name"所包含。然后,对该集合的对象引用在后包含 性处理操作期间被检查。该操作确定包括同一分层数据对象内的关键字记号"John"和记号 "Smith"的关键字记号对,记号"Smith"具有跟在关键字记号"John"的记号编号之后的记号 编号。
[0163] 路径表达式可以指定节点占据特定数组位置。数组位置不能仅通过基于包含性的 联接操作而被确定。在这种情况下,后包含性处理包括对候选分层数据对象进行评估以确 定节点在数组中的数组位置。
[0164] 用于文本搜索的后包含性处理
[0165] 后包含性处理可以被执行来支持各种特殊的文本搜索能力,诸如早先提及的那 止匕 -、O
[0166] 对于使用大写字母转换的实施例,基于关键字的查询谓词可以是大小写敏感的。 在这种情况下,一旦候选分层数据对象的过滤的集合已经被确定为包含路径表达式所指定 的节点中的字符串值,所述分层数据对象本身就被访问并且被检查以确定大小写是否匹 配。
[0167] 对于使用词干提取的实施例,查询谓词的搜索标准可能要求与搜索项的精确匹 配。然而,因为词干提取,搜索标准中的项需要转换为词干形式,并且候选分层数据对象的 过滤的集合基于该词干形式而形成。后包含性处理然后被执行以用于精确匹配。这样的后 包含性处理用路径P3例示说明:
[0168] ($.name?($=,>driving home,>)
[0169] 基于包含性的联接可以初始地执行来确定关键字记号"Drive"和关键字记号 "home"的集合,这两者都被字段记号"name"所包含。然后,对该集合的对象引用在后包含性 处理操作期间被检查。该操作确定包括同一分层数据对象内的关键字记号"driving"和记 号"home"的关键字记号对,记号"home"具有跟在关键字记号"driving"的记号编号之后的 记号编号。
[0170]作为另一个例子,对于使用停止字的实施例,搜索标准可能要求与搜索项的精确 匹配。然而,因为停止项,初始搜索是基于不包括停止字的一组关键字。后包含性处理被执 行以用于与停止字精确匹配。
[0171]范围索引的使用
[0172] 在本发明的实施例中,基于包含性的联接不仅基于对象引用中指定的记号位置, 而且还基于对象引用中指定的值记号。此外,范围索引可以用于不仅执行值范围评估,而且 还执行路径中的值评估。
[0173] 值范围评估的例子由下面的路径表达式P3提供:
[0174] .friends.birthdate>TO_DATE('1998-09-09','YYYY-MM-DD')
[0175] 日期范围索引404被评估以找到与覆盖日期范围"1998-09-09"的键范围相关联的 条目,并且从对应的条目检索倒排列表(1,(1996-09-10,14) )(1,(1998-09-09,6)) (2, (1998-09-09,6))。然后,从倒排列表(1,(1998-09-09,6))(2,( 1998-09-09,6))中选择指定 所指定的范围内的记号值的对象引用。然后对字段记号"friends"和"birthdate"执行基于 包含性的联接。后包含性处理可以被执行以充分地评估路径表达式P3所指定的条件。注意, 如果日期范围索引404具有对超过"1990-01-01至2000-01-01"的范围编排索引的条目,则 这些条目的倒排列表将被类似地评估。
[0176] 路径中的值评估的例子由下面的路径表达式P3提供:
[0177] '$.friends.birthdate = TO_DATE( ' 1998-09-09','YYYY-MM-DD')
[0178] 日期范围索引404以类似于上述方式的方式被使用,除了指定与谓词值匹配的记 号值的对象引用选自倒排列表(1,( 1998-09-09,6))(2,( 1998-09-09,6))之外。
[0179] 组合路径表达式
[0180] 查询可以包含基于路径的语句操作符。每个基于路径的语句操作符的路径表达式 可以涉及对相同节点内所包含的数据节点进行评估。这样的查询的例子是查询Q4:
[0181] Q4:Select*from TAB
[0182] Where JS0N_EXISTS(.friends.birthdate>TO_DATE(,1998-01-01,, 'YYYY-MM-DD'))'passing jobj)0r
[0183] JS0N_EXISTS(.friends.birthdate〈TO_DATE(,1996-01-01,, 'YYYY-MM-DD')')passing jobj)'
[0184]这两个语句操作符均指定数据节点驻留在路径表达式.friends.birthdate"所 标识的相同节点下。
[0185] 用于对Q4进行评估的查询执行计划可以包括用于每个JS0N-EXISTS语句操作符的 基于路径的索引操作符。每个将产生包含满足相应的路径表达式的JSON对象的行。行的交 集将包含满足Q4中的谓词的JSON对象。然而,在该方法中,这两个基于路径的索引操作符对 于相同的节点将对基于包含性的联接的同一集合进行评估。另一方法是使用单个基于路径 的索引操作符来对这两个路径表达式进行评估。基于包含性的联接的所述集合将对同一节 点评估一次。
[0186] 数据库系统
[0187] 本发明的实施例在DBMS的上下文中被使用。因此,DBMS的描述是有用的。
[0188] DBMS管理数据库。DBMS可以包括一个或多个数据库服务器。数据库包括存储在持 久存储器机构(诸如一组硬盘)上的数据库数据和数据库词典。数据库数据可以被存储在一 个或多个数据容器中。每个容器包含性记录。每个记录内的数据被组织到一个或多个字段 中。在关系DBMS中,数据容器被称为表,记录被称为行,字段被称为列。在面向对象的数据库 中,数据容器被称为对象类,记录被称为对象,在本文中也被称为对象记录,字段被称为属 性。其他数据库架构可以使用另一术语。
[0189] 数据库词典包括定义物理地或逻辑地包含在数据库中的数据库对象的元数据。实 际上,数据库词典定义整个数据库。数据库对象包括用于存储数据库对象数据的表、索引、 视图、列、数据类型、用户、用户特权以及存储结构(诸如表空间)。
[0190] 用户通过向DBMS的数据库服务器提交使该数据库服务器对存储在该数据库中的 数据执行操作的命令来与该数据库服务器进行交互。用户可以是在与数据库服务器交互的 客户端计算机上运行的一个或多个应用。多个用户在本文中也可以共称为用户。
[0191] 数据库语句可以为符合数据库语言的语法的数据库语句的形式。用于表达数据库 语句的一种示例语言是SQL。定义数据库结构(诸如表、视图或复杂数据类型)的DDL语句被 发给DBMS。例如,CREATE、ALTER、DROP和RENAME是在一些SQL实现中找到的DDL命令的例子。 当创建数据库对象或者修改数据库对象的DDL语句被发出时,数据库词典被修改以相应地 定义数据库对象。管理存储在数据库结构内的数据的DML命令被发给DBMS。例如,SELECT、 INSERT、UPDATA和DELETE是在一些SQL实现中找到的DML指令的常见例子。SQL/XML和SQL/ JSON是当操纵对象-关系数据库中的XML数据时使用的SQL的扩展。
[0192] 尽管上述例子是基于Oracle的SQL,但是本文中所提供的技术不限于Oracle的 SQL、任何专有形式的SQL、任何标准化版本或形式的SQL (ANSI标准)、或任何特定形式的数 据库命令或数据库语言。此外,为了简化其中所包含的说明的目的,数据库命令或其他形式 的计算机指令可以被描述为执行动作,诸如创建表、修改数据以及设置会话参数。然而,应 当理解,命令本身不执行动作,而是DBMS在执行命令时执行对应的动作。因此,如本文中所 使用的这样的语句意图对于当被DBMS执行时使DBMS执行对应动作的命令是速记的。
[0193] 分层数据对象的存储
[0194] 各种类型的存储机制用于存储分层数据对象,诸如XML文档。一种类型的存储机制 将分层数据对象作为文本文件存储在文件系统中。如前面所提及的,用于存储分层数据对 象的另一类型的机制是DBMS。在DBMS中,分层数据对象可以被存储在表的行中,分层数据对 象的节点被存储在该行的分开的列中。整个分层数据对象也可以被存储在列中的Iob(大对 象)中。分层数据对象可以被分解并且被作为对象的层次结构存储在数据库中;每个对象是 对象类的实例,并且存储分层数据对象的一个或多个元素。数据库系统的具有分层数据对 象的表和/或对象在本文中被称为基本表或对象。
[0195] 二进制-记号编码是分层数据对象可以被存储在数据库中的另一形式。二进制-记 号编码产生分层数据对象的紧凑的二进制表示,该二进制表示被设计为减小分层数据对象 的大小。二进制-记号编码对分层数据对象进行编码的方式之一是通过用固定值表示字符 串。
[0196] 硬件概述
[0197] 根据一个实施例,本文中所描述的技术由一个或多个专用计算装置实现。专用计 算装置可以被硬连线来执行这些技术,或者可以包括被持久地编程为执行这些技术的数字 电子装置(诸如一个或多个专用集成电路(ASIC)或现场可编程门阵列(FPGA))或者可以包 括按照固件、存储器、其他储存装置或组合中的程序指令执行这些技术的一个或多个通用 硬件处理器。这样的专用计算装置还可以组合具有定制编程的定制的硬连线逻辑、ASIC、或 FPGA来实现这些技术。专用计算装置可以是台式计算机系统、便携式计算机系统、手持装 置、联网装置、或合并硬连线逻辑和/或程序逻辑来实现这些技术的任何其他装置。
[0198] 例如,图6是例示在其上可以实现本发明的实施例的计算机系统600的框图。计算 机系统600包括用于传送信息的总线602或其他通信机构、以及与总线602耦合的、用于对信 息进行处理的硬件处理器604。硬件处理器604可以是例如专用微处理器。
[0199] 计算机系统600还包括耦合到总线602的、用于存储信息和将被处理器604执行的 指令的主存储器606,诸如随机存取存储器(RAM)或其他动态存储装置。主存储器606还可以 用于存储在将被处理器604执行的指令的执行期间的临时变量或其他中间信息。这样的指 令当被存储在可供处理器604访问的非暂态存储介质中时将计算机系统600变为被定制为 执行这些指令中所指定的操作的专用机器。
[0200] 计算机系统600还包括用于存储用于处理器604的静态信息和指令的只读存储器 (R0M)608或其他静态存储装置。存储装置610(诸如磁盘、光学盘或固态驱动器)被提供,并 且耦合到总线602,用于存储信息和指令。
[0201] 计算机系统600可以经由总线602耦合到用于向计算机用户显示信息的显示器 612,诸如阴极射线管(CRT)。包括字母数字键和其他键的输入装置614耦合到总线602,用于 将信息和命令选择传送给处理器604。另一种类型的用户输入装置是用于将方向信息和命 令选择传送给处理器604并且用于控制显示器612上的光标移动的光标控制装置616,诸如 鼠标、轨迹球、或光标方向键。该输入装置通常具有两个轴(第一轴(例如,X)和第二轴(例 如,y))上的两个自由度,这两个自由度使得该装置可以指定平面中的位置。
[0202]计算机系统600可以使用与该计算机系统组合使计算机系统600成为专用机器或 者将计算机系统600编程为专用机器的定制的硬连线逻辑、一个或多个ASIC或FPGA、固件 和/或程序逻辑来实现本文中所描述的技术。根据一个实施例,本文中的技术由计算机系统 600响应于处理器604执行主存储器606中所包含的一个或多个指令的一个或多个序列来执 行。这样的指令可以从另一个存储介质(诸如存储装置610)读取到主存储器606中。主存储 器606中所包含的指令序列的执行使处理器604执行本文中所描述的处理步骤。在替代实施 例中,可以使用硬连线的电路系统来代替软件指令或者与软件指令组合。
[0203]本文中所使用的术语"存储介质"是指存储使机器以特定方式操作的数据和/或指 令的任何非暂态介质。这样的存储介质可以包括非易失性介质和/或易失性介质。非易失性 介质包括例如光盘、磁盘或固态驱动器,诸如存储装置610。易失性介质包括动态存储器,诸 如主存储器606。常见形式的存储介质包括例如软盘、柔性盘、硬盘、固态驱动器、磁带、或任 何其他磁性数据存储介质、CD-ROM、任何其他光学数据存储介质、具有孔图案的任何物理介 质、RAM、PROM、以及EPROM、FLASH-EPR0M、NVRAM、任何其他存储器芯片或盒。
[0204]存储介质不同于传输介质,但是可以与传输介质结合使用。传输介质参与在存储 介质之间传送信息。例如,传输介质包括同轴电缆、铜线和光纤,它们包括包含总线602的导 线。传输介质还可以采取声波或光波的形式,诸如在无线电波和红外数据通信期间产生的 那些声波或光波。
[0205] 各种形式的介质可以参与将一个或多个指令的一个或多个序列运载到处理器604 以用于执行。例如,这些指令可以初始地运载在远程计算机的磁盘或固态驱动器上。远程计 算机可以将这些指令加载到其动态存储器中,并且使用调制解调器通过电话线发送这些指 令。计算机系统600本地的调制解调器可以接收电话线上的数据,并且使用红外发射器来将 该数据转换为红外信号。红外探测器可以接收红外信号中所运载的数据,并且适当的电路 系统可以将该数据放置在总线602上。总线602将数据运载到主存储器606,处理器604从主 存储器606检索并执行这些指令。主存储器606接收的指令可以可选地在处理器604执行之 前或之后被存储在存储装置610上。
[0206] 计算机系统600还包括耦合到总线602的通信接口 618。通信接口 618提供耦合到网 络链路620的双向数据通信,网络链路620连接到本地网622。例如,通信接口 618可以是综合 业务数字网络(ISDN)卡、电缆调制解调器、卫星调制解调器、或者提供与相应类型的电话线 的数据通信连接的调制解调器。另举一例,通信接口 618可以是提供与可兼容LAN的数据通 信连接的局域网(LAN)卡。还可以实现无线链路。在任何这样的实现中,通信接口618发送并 且接收运载表示各种类型的信息的数字数据流的电信号、电磁信号或光信号。
[0207] 网络链路620通常通过一个或多个网络将数据通信信息提供给其他数据装置。例 如,网络链路620可以通过本地网622提供与主机计算机624或由互联网服务提供商(ISP) 626运营的数据设备的连接。ISP 626继而通过全球分组数据通信网络(现在常被称为"互联 网"628)提供数据通信服务。本地网622和互联网628都使用运载数字数据流的电信号、电磁 信号或光信号。通过各种网络的信号、以及网络链路620上的通过通信接口 618的信号是示 例形式的传输介质,这些信号将数字数据运载到计算机系统600,并且从计算机系统600运 载数字数据。
[0208]计算机系统600可以通过网络、网络链路620和通信接口 618发送消息并且接收数 据,包括程序代码。在互联网例子中,服务器630可以通过互联网628、ISP 626、本地网622和 通信接口 618发送被请求的应用程序的代码。
[0209]所接收的代码可以在其被接收时被处理器604执行,和/或被存储在存储装置610 或其他非易失性储存器中以供以后执行。计算机系统处理包括处理器时间的分配以及(物 理的和/或虚拟的)存储器的分配,存储器的分配是用于存储被处理器执行的指令,用于存 储处理器执行指令而产生的数据,和/或用于存储当计算机系统处理不在运行时处理器时 间的分配之间的处理器状态(例如,寄存器的内容)。计算机系统处理在操作系统的控制下 运行,并且可以在计算机系统上执行的其他程序的控制下运行。
[0210]在前面的说明书中,已经参照在不同实现中可以变化的许多特定细节描述了本发 明的实施例。因此,要从例示性、而非限制性的意义上来看待说明书和附图。本发明的范围 以及
【申请人】意图什么是本发明的范围的唯一的排他的指示是本申请中的权利要求的集合 以特定形式发布的字面范围和等同范围,这些权利要求以所述特定形式发布,包括任何后 续修改。
【主权项】
1. 一种方法,包括: 对于多个分层数据对象,通过至少对所述多个分层数据对象中的每个分层数据对象进 行解析来产生多个记号,所述多个记号中的每个记号与所述多个记号在分层数据对象内的 记号位置相关联,其中,所述多个记号包括: 非叶记号,每个非叶记号与所述多个分层数据对象中的标签名称节点对应; 叶记号,每个叶记号与构成所述多个分层数据对象中的分层数据对象中的数据节点的 值对应; 其中,所述非叶记号的每个记号位置包含所述叶记号中的叶记号在所述多个分层数据 对象中的分层数据对象中的记号位置;以及 产生对所述多个记号编排索引的层次结构-值索引,所述层次结构-值索引将所述多个 记号中的每个记号映射到所述多个分层数据对象中的特定的一个或多个分层数据对象内 的特定的一个或多个记号位置。2. 根据权利要求1所述的方法,还包括基于所述层次结构-值索引以及所述叶记号和所 述非叶记号之间的记号包含性来对路径表达式进行评估。3. 根据权利要求1所述的方法, 其中,所述非叶记号包括标签名称记号,所述标签名称记号中的每个标签名称记号表 示所述多个分层数据对象内的节点的标签名称;并且 其中,所述叶记号包括关键字记号,所述关键字记号中的每个关键字记号表示所述多 个分层数据对象内的数据节点中的字;并且 其中,产生层次结构-值索引包括产生对所述关键字记号和所述标签名称记号的所述 至少一部分编排索引的第一索引,所述层次结构-值索引将所述标签名称记号的所述至少 一部分和所述关键字记号中的每个记号映射到所述多个分层数据对象中的一个或多个分 层数据对象内的一个或多个记号位置。4. 根据权利要求3所述的方法,其中: 所述第一索引包括第一索引条目; 其中,对于所述标签名称记号的所述至少一部分和所述关键字记号中的每个特定记 号,所述第一索引条目中的索引条目将所述每个特定记号映射到在一个或多个相应的分层 数据对象内的一个或多个记号位置。5. 根据权利要求4所述的方法,其中,对于所述标签名称记号的所述至少一部分和所述 关键字记号的每个特定记号,所述第一索引条目的索引条目包含倒排列表,所述倒排列表 包括对象引用,所述对象引用中的每个对象引用标识所述一个或多个相应的分层数据对象 中的特定分层数据对象,并且指定所述特定分层数据对象内的特定的一个或多个记号位 置。6. 根据权利要求3所述的方法, 其中,所述叶记号包括多个值记号,所述多个值记号中的每个值记号表示多个分层数 据对象内的数据节点的值;并且 其中,产生层次结构-值索引包括产生对所述多个值记号的值范围编排索引的第二索 弓丨,所述第二索引将所述值范围映射到所述值记号和所述值记号在所述多个分层数据对象 内的记号位置。7. 根据权利要求6所述的方法,其中: 所述第二索引包括第二索引条目; 其中,对于所述值范围中的每个值范围,所述第二索引条目的索引条目包含所述每个 值范围以及包括对象引用的倒排列表,所述对象引用中的每个对象引用标识所述多个分层 数据对象中的特定分层数据对象、特定记号值以及所述特定值的一个或多个记号位置。8. 根据权利要求6所述的方法,其中,基于所述层次结构-值索引以及所述叶记号和所 述非叶记号之间的记号包含性来对路径表达式进行评估包括使用所述第二索引执行值范 围评估。9. 根据权利要求1所述的方法,其中,产生层次结构-值索引包括: 对所述多个分层数据对象中的特定分层数据对象进行解析,由此产生包括解析事件的 子集的多个解析事件; 对于所述解析事件的子集中的每个特定解析事件: 当所述每个特定解析事件表示标签名称时,产生标签名称记号和所述标签名称记号的 表示所述标签名称记号的记号范围的开头的记号编号; 当所述每个特定解析事件表示字符串值时,对于所述字符串值中的每个字,建立字记 号和所述字记号的记号编号;并且 当所述每个特定解析事件表示其特定标签名称记号被产生的节点的末尾时,产生表示 所述特定标签名称的记号范围的结束的另一个记号编号。10. 根据权利要求2所述的方法,其中,对路径表达式进行评估包括: 基于记号包含性来执行基于包含性的联接以对照所述多个分层数据对象部分地对所 述路径表达式进行评估;并且 执行后包含性处理以完成所述路径表达式的评估。11. 根据权利要求1所述的方法,还包括: 将所述多个分层数据对象存储在DBMS的特定数据库表的列中; 接收请求创建所述列上的索引的DDL语句; 响应于接收到所述DDL语句: 创建所述层次结构-值索引;以及 响应于指定对所述列的修改的数据库语句,修改所述层次结构-值索引。12. 根据权利要求11所述的方法,其中,所述层次结构值索引包括特定数据库表,所述 特定数据库表包括: 具有记号的列;以及 存储倒排列表的二进制对象列。13. 根据权利要求2所述的方法,还包括: 响应于包括包含所述路径表达式的基于路径的语句操作符的数据库语句: 产生包括基于路径的索引计划操作符的执行计划,以用于评估所述基于路径的语句操 作符;并且 执行包括所述基于路径的索引计划操作符的执行计划,其中,执行所述基于路径的索 引计划操作符包括所述对所述路径表达式进行评估。14. 根据权利要求2所述的方法,其中,所述路径表达式要求以下中的至少一个:路径存 在评估、路径中的值评估以及值范围评估。15.根据权利要求1所述的方法,其中,所述多个分层数据对象符合JSON或XML。
【文档编号】G06F17/30GK105849726SQ201480070254
【公开日】2016年8月10日
【申请日】2014年11月6日
【发明人】刘振华, B·哈默施密特, D·麦克马洪
【申请人】甲骨文国际公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1