用于搜索可扩展标记语言(xml)数据的方法和装置的制作方法

文档序号:6468587阅读:144来源:国知局
专利名称:用于搜索可扩展标记语言(xml)数据的方法和装置的制作方法
技术领域
本公开内容涉及可扩展标记语言(XML),尤其涉及提高搜索XML文 档的速度。
背景技术
XML是一种开放标准的通用标记语言,被用来对文档进行编码,以利 于经由互联网共享数据。与HTML相似,XML也被用来创建万维网上包 含文本、图形、声音、视频和超链接的文档。然而,XML不同于HTML 的是,XML使用的标签用来指示编码数据的逻辑结构而不是显示规范。
存在许多不同的用于在存储结构中表示XML数据的方式。例如,XML 数据可以被表示为(1)由万维网联盟(W3C)推荐的字符序列;(2)具有次 级索引以提高存取速度的字符序列;(3)结构列表(a list of structures),其中 每个结构表示XML数据的某个方面;或者(4)结构树,其中每个结构表示 XML数据的某个方面。
XML数据的典型的"结构列表"表示(representation)使用各种结构类 型来表示XML数据的不同特征,并且按文档顺序把这些结构连接到一个 列表中。典型的结构类型是元素、属性、字符数据、命名空间、处理指令 和注释。
XML数据的"结构列表"表示的优点是与"结构树"表示相比其相 对紧凑,并且其还比字符序列更易于进行自动处理。因此,它是低速的字 符序列处理和可能需要大存储器的"结构树"表示之间的一个良好的折衷。
可以使用由XML数据展示的层次结构,在逻辑上规定对XML文档的 搜索,例如,查找节点'b'的孩子,所述节点'b'是节点、'的孩子, 这在万维网联盟(W3C) XML路径语言(XPath)语法中可以用与使用字符序 列的正则表达式类似的方式,将其表示成"//a/b/*"。然而,相比搜索被表 示为"结构树"(其中,各结构之间的指针可以被用来限制搜索空间)的数据,对被存储为结构列表的数据使用分层搜索模型可能会很慢。因此,"结
构树"表示提供对XML数据的随机存取,而"结构列表"仅提供顺序存 取。


通过参照附图进行下列详细的描述,所要求保护的主题的实施例的特
征将会变得更加明显,在图中相同的数字指示相同的部分,并且其中
图1A和1B说明了XML文档的一 个例子; 图2是SIMD指令执行模型的框图3A说明了根据本发明的原理,从图1B示出的结构列表中提取的主 列表(primary list)的一个实施例;
图3B说明了从图1B示出的结构列表提取的次列表(secondary list)的 一个实施例;
图3C说明了从图1B示出的结构列表中提取的、交替插入主列表和次 列表的结构的一个实施例;
图4是说明用于根据图1B示出的结构列表来生成图3A示出的主列表
的方法的一个实施例的流程图;以及
图5是包括用于根据XML文档的结构列表表示来生成主列表的列表-紧縮向量转换器(list to packed vector converter)的一个实施例的系统的框 图。
尽管将参照所要求保护的主题的示例性实施例进行下列详细描述,然 而对于这些实施例的许多替代方式、修改和变化对本领域的技术人员是显 而易见的。因此,所要求保护的主题应被广泛地看待,并且仅由所附权利 要求中所阐述的内容来限定。
具体实施例方式
图1A和IB说明了 XML文档的一个例子。XML文档可以被格式化 为在可以从www.w3.org得到的万维网联盟(W3C)可扩展标记语言(XML) 1.0中描述的格式。如图1A所示,XML文档IOO包括多个元素102、 104、 106、 108,并且这些元素具有开始标签'<>'和/或结束标签'</>'。元素102、 104、 106、 108的类型,例如<a, b, c或d',被包括在开始标签 和结束标签中。
参考图1A,元素102包括使用"xmlns"声明的一个命名空间,该命 名空间具有名称(nsl)和统一资源标识符(uri)(命名空间),所述统一资源标识 符是标识抽象或物理资源的紧凑字符序列。元素102还包括一个属性,其 具有名称(al)和值(属性)。
图1B说明了结构列表150,其可以被用来表示图1A示出的XML文 档100。 XML数据的典型的"结构列表"表示使用不同的结构类型来表示 XML数据的不同特征并且按文档顺序把这些结构连接到一个列表中。典型 的结构类型是元素(例如,开始元素、结束元素)、属性、命名空间,处理 指令、注释和字符数据(例如,文本)。
如图1B所示,用于表示图1A示出的XML文档100的结构列表150 包括用结构152-1、……、152-15表示的元素类型a、 b、 c、和d、命名空 间、属性和文本,所述结构152-1、……、152-15包括开始和结束元素结 构、命名空间结构、属性结构和文本结构。
因此,元素类型'a, 102(图1A),即〈a xmlns: nsl—,命名空间"al=" 属性"> </a>,是用开始元素结构152-1、命名空间结构152-2,属性结构 152-3,文本结构152-4和结束元素结构152-15来表示的。结合图1A中示 出的XML文档100,结构152-1对应于<&>,结构152-2对应于xmlns: nsl=" 命名空间";结构152-3对应于af'属性";结构152-4对应于换行和制表 符,并且结构152-15对应于</3>。
为了縮小搜索XML文档的"结构树"表示和搜索XML文档的"结构 列表"表示之间的性能差异,可以增强"结构树"中的结构(使其具有用来 提供结构之间的直接链接的偏移或指针,或者是通过把很少被存取的数据 移动到次级存储机制中),以减少存储器读取量。还可以一起计算多个分层 搜索,从而将存取成本摊到多个搜索上。然而,即使使用了这些技术,搜 索性能仍旧受制于扫描XML文档中的所有数据以寻找特定类型的元素所 耗费的时间。
因为在结构列表中的每个结构的长度(比特数)是变化的,因此搜索特 定的元素类型需要逐字节地顺序搜索整个XML文档,以便找到一个匹配。XML文档可能有数以千计的记录,因此,针对特定记录对XML文档从头 到尾进行扫描非常耗时。
根据本发明的原理,通过用适合单指令多数据(SIMD)指令的格式来存 储XML数据,提高了对"结构列表"表示的扫描速度以帮助搜索处理过 程。SIMD指令可以被用来并行地对多个结构元素执行搜索。
单指令多数据(SIMD)指令同时对一个数据集中的多个元素执行相同 的操作。为了允许单个SIMD指令检査多个结构,该数据集的元素通常被 存储在"紧縮向量"(即,一种包括多个具有相同大小的元素的数据结构中)。 不是逐字节地从每个结构中加载数据,而是用适合SIMD指令使用的格式 来存储XML数据。
在一个实施例中,用并行的形式来排列一组结构,使得数据容易被 SIMD指令存取。针对图1A示出的XML文档的、在图1B示出的结构列 表在逻辑上被分成两部分(l)用并行布局将关键信息集合在一起的主列 表;和(2)用标准的串行形式表示的剩余数据的次列表。
图2是SIMD指令执行模型的框图。SIMD指令的工作方式是,使用 一条指令同时对多条数据进行操作。如图2所示,第一操作数200具有被 标记为B
-B[7]的8个字节,并且第二操作数202具有被标记为A
-A[7] 的8个字节。对于第一操作数200中的每一个字节和第二操作数202中的 对应字节,并行地执行相同的操作'op'204,以产生具有被标记为R[O] -R[7] 的8个字节的结果。
图3A说明了根据本发明的原理,从图1B示出的结构列表150中提取 的主列表300的一个实施例。根据SIMD指令的长度,在连续的存储器中 存储一组结构类型和一组结构名称。如结合图2示出的模型所论述的,这 允许使用SIMD指令在主列表300中并行地搜索该组结构类型和/或该组结 构名称。
图3A说明了主列表300的布局,其假定每个组有8个供SIMD指令 使用的项,该SIMD指令并行地对64个比特(8个字节)进行操作。在其它 实施例中,每个组可以有大于或小于8个项。在示出的实施例中,主列表 300拥有被标记为B[O]到B[31]的32个字节,这些字节用于存储从结构列 表表示150中提取的结构名称和类型。响应于应用编程接口(API)要求在XML文档100中执行搜索的请求, 可以从被表示为结构列表150的该XML文档中提取出主列表300。可以使 用列表-紧縮向量转换器从结构列表表示150中提取元素,以生成主列表 300中的紧縮向量表示。
被存储在主列表300中的、来自结构列表表示150的每个元素或者是 结构类型或者是结构名称。在示出的实施例中,SIMD指令使用的操作数 大小是64个比特(即,8个字节)。因此,为主列表300分配存储器中32 个(4 x 8字节)连续字节,以便存储与在图1B的结构列表表示150中示出 的15个结构相对应的所有结构类型和结构名称。
前8个字节[BO - B7](—组8个并行项)存储与图1B示出的结构列表表 示150中的前8个结构152-1、…、152-8相对应的结构类型。接下来的8 个字节[B8 - B15]存储与图1B示出的结构列表表示150中的前8个结构 152-1、、 152-8相对应的结构名称。字节B[16]到B[23]存储与图1B示 出的结构列表表示150中的结构152-9、…、152-15相对应的结构类型, 并且字节B[24]到B[31]存储与图1B示出的结构列表表示150中的结构 152-9、、 152-15相对应的结构名称。
在字节B[O]- B[7]和字节B[16]-B[23]中存储的结构类型包括开始元 素(SE)类型结构、结束元素(EE)类型结构、命名空间(NS)类型结构、属性(A) 类型结构以及文本(T)类型结构。结构名称包括a-d、 nsl和al。
在将要进行搜索的XML文档100中,结构类型和结构名称是最常见 的字段。在主列表300中的关键数据项是在字节[B0]-[B7]和字节B[16]-B[23]中存储的结构类型、以及可选地在字节B[8]-[B15]和字节B[24]- B[31] 中存储的结构名称。对于结构名称,该表示允许将字符串用表示该字符串 的数字来替换,就像在XML数据表示中常用到的那样。同样,如所示, 每个结构类型和结构名称可以被编码到一个字节中。
可以使用SIMD指令在主列表300中搜索特定的结构类型和/或结构名 称。例如,可以使用对主列表300的字节B
-[B7]和B[16]-B[23]进行操 作的两个SIMD相等性比较来在XML文档100中搜索特定类型的结构。
因此,在图3A示出的主列表300中的紧縮向量表示通过并行搜索8 个字节而在逻辑上减少了扫描成本。通过将SIMD相等性操作与字节范围B
-[B7]和[B24]-[B31滩组合,可以执行更复杂的搜索。
尽管可以在主列表300中安排结构列表表示150的所有数据,但存在 一些很少被使用的项,其会增加在主列表300中搜索特定的结构名称或类 型所耗费的时间。因此,在一个实施例中,在主列表300中不包括在结构 列表表示150中很少被使用的元素,例如,uri和属性值。不是顺序地搜索 整个结构列表表示150, XML文档是被存储在由紧縮向量构成的主列表 300以及一个次列表中。
图3B说明了从图1B示出的结构列表150中提取的次列表302的一个 实施例。
如果在主列表300中的搜索没有产生匹配,则除了使用主列表之外, 使用以常规的串行方式排列的次列表302来搜索很少被使用的项。次列表 302存储指向数据的指针(DP)。在图3B示出的例子中,示出了 24个指针 (DP
-DP[23])。每个指针可以拥有4个字节或8个字节,取决于系统中 的CPU是32位(4字节)还是64位(8字节)。主列表300中的每个项 (B
-B[31])与次列表(流)302中的三个项(DP)相关。这三个项存储的指针 指向了用来对没有被存储在主列表300中的、很少被存取的XML数据进 行描述所必需的附加信息。
第一个项用于存储指向记录(结构)152-1、…、152-15的前缀字符串的
指针,第二个项用于存储指向名称字符串的指针或指向URI字符串的指针, 而第三个项用于存储指向文本字符串的指针。因为不是所有的结构类型都 使用全部三个项,所以在图3B示出的次列表302中未使用的项被示为0。
在图3B示出的例子中,Pn表示指向记录、'的前缀字符串的指针, Nn表示指向记录'n'的名称字符串的指针,Un表示指向记录'n'的URI 字符串的指针,以及Tn表示指向记录'n'的文本字符串的指针。这些字 段被存储为前缀、名称/URI以及文本,即被存储在三个项中。因为没有结 构类型既需要名称又需要URI,所以名称和URI共享第二个项。
通过用主列表300中结构的位置乘以3倍的次列表302中项的大小(例 如4或8),可以为特定结构152-1、…、152-15计算出其在次列表302中 的偏移。
在另一个实施例中,主列表和次列表可以被交替插入在一个结构中,
10并且/或者可以选择性地对输入的某些部分使用并行数据表示,而对其它部
分不使用。在任一情况下,用于提高搜索效率的XML数据的并行数据布 局的原理仍然适用。
为了交替插入主流和次流,首先,用主流的格式对固定数目的结构进 行编码,并且将其存储在存储器中。接着,用次流的格式对相同固定数目 的结构进行编码,并将其存储在存储器中接下来的连贯存储单元中。重复 这种处理过程多次,直至完成对所有数据进行编码。图3C说明了从图1B 示出的结构列表150中提取的、交替插入主列表和次列表的结构310的一 个实施例。如图3C所示,主列表被存储在304和308而次列表被存储在 306禾口 308。
图4是说明用于根据图1B示出的结构列表表示150来生成图3A示出 的主列表300的方法的一个实施例的流程图。
在块400,列表-紧縮向量转换器等待接收要求处理XML文档100的 请求。用于要求处理XML文档的请求可以由用于处理XML文档的API 调用生成。JAXP是API调用的一个例子,其被用于在JAVA中处理XML 文档。如果接收到请求,则处理继续进行到块402。如果没有接收到请求, 则处理继续进行到块400。
在块402,对被存储为图1B示出的结构列表表示150的XML文档100 进行解析,以便从N个连贯的结构中提取结构类型。例如,参考图1B, 如果N是8,则从该结构列表表示的前八个结构152-1、…、152-8中提取 结构类型,其第一个结构类型是开始元素(SE)类型,并且第八个结构类型 是结束元素(EE)。处理继续进行到块404。
在块404,随着从该结构列表表示中提取出N个结构类型,将这些结 构类型存储在在主列表300中的连续存储单元中。处理继续进行到块406。
在块406,在从N个元素中的每一个中提取出结构类型之后,对结构 列表表示150进行解析以确定N个结构名称, 一个结构名称对应于从中提 取出结构类型的N个结构中的一个结构。处理继续进行到块408。
在块408,随着从该结构列表表示中提取出N个结构名称,将这些结 构名称存储在该主列表300中的连续存储单元中,从存储第N个结构类型 之后的存储单元开始。为N个结构中的每个结构预留一个用于存储结构名称的位置,而不管是否存在与该结构相关联的结构名称。例如,如图3A 所示,即使结构152-4没有结构名称,仍然预留用于存储与结构152-4相 关联的结构名称的字节B[ll]。处理继续进行到块410。
在块410,列表-紧縮向量转换器确定在结构列表表示150中是否存在 另一个将要被处理的结构。如果有,则处理继续进行到块402,以处理在 结构列表表示150中剩余的结构。如果没有,则继续进行到块412。
在块412,在已根据结构列表表示150生成该主列表300之后,可以 在该主列表300中搜索特定的结构类型和/或结构名称。使用SIMD指令, 可以并行地对主列表中的紧縮向量中的8个字节与一个字节进行比较以搜 索匹配。例如,诸如比较紧縮字节相等(PCMPEQB)指令这样的x86 MMX 比较指令执行目的操作数和源操作数中的紧縮字节的相等性比较。处理继 续进行到块400以等待另一个请求。
图5是一个系统的框图,所述系统包括用于根据XML文档528的结 构列表表示来生成主列表534的列表-紧縮向量转换器530的一个实施例。
系统500包括处理器501、存储器控制中心(MCH) 502以及输入/输出 (1/0)控制中心(ICH) 504。 MCH 502包括用于控制处理器501和存储器504 之间的通信的存储器控制器506。处理器501和MCH 502通过系统总线 516进行通信。
处理器501可以是支持SIMD流指令扩展(SSE)指令的多种处理器中的 任意其中一种,例如,单核英特尔⑧奔腾4⑧处理器、单核英特尔赛扬处理 器、英特尔⑧XScale处理器、或诸如英特尔⑧奔腾D、英特尔⑧至强⑧处理 器或英特尔⑧酷睿⑧双核处理器这样的多核处理器、或任意其它类型的处 理器。
存储器503可以是动态随机存取存储器(DRAM)、静态随机存取存储 器(SRAM)、同步动态随机存取存储器(SDRAM)、第二代双倍数据速率 (DDR2)RAM、或Rambus动态随机存取存储器(RDRAM)、或任何其它类 型的存储器。
可以使用诸如直接媒体接口(DMI)这样的高速芯片对芯片(chip-to-chip) 互连514把ICH 504耦合到MCH 502上。通过两个单向通道,DMI支持 的2吉比特/秒的并发传输速率。
12ICH 504可以包括存储输入/输出(1/0)控制器510,其用于控制与至少 一个被耦合到ICH504上的存储设备512进行通信。存储设备可以是,例 如,磁盘驱动器、数字视频光盘(DVD)驱动器、光盘(CD)驱动器、独立磁 盘冗余阵列(RAID)、磁带机或其它存储设备。使用串行存储协议,例如串 行连接小型计算机系统接口(SAS)或串行高级技术附件(SATA), ICH 504可 以通过存储协议互连518与存储设备512进行通信。
ICH 504还可以包括网络接口通信(NIC)控制器526,用于控制通过互 联网与至少一个其它系统536进行通信。存储器508可以存储用于根据 XML文档528的结构列表表示来生成主列表534的列表-紧縮向量转换器 530。 XML文档528可以被存储在RAID阵列512中,或被存储在经由互 联网550可访问的另一个系统528中。紧縮向量转换器530对XML文档 528的结构列表表示536(可以存储在存储器508中)进行操作。根据本发明 的原理,紧縮向量转换器530根据XML文档528的结构列表表示来生成 主列表534和次列表532。
针对64比特SIMD指令,即并行地对64个比特(8个字节)进行操作的 SIMD指令,描述了本发明的一个实施例。然而,本发明并不被限于并行 地对64比特进行操作。本发明的实施例可以使用并行地对大于64比特进 行操作的SMD指令,例如,使用了 128比特寄存器对16个字节并行地进 行操作。
对本领域技术人员来说显而易见的是,本发明的实施例中所涉及的方 法可以用包括计算机可用介质的计算机程序产品来实现。例如,这样的计 算机可用介质可以由其上存储有计算机可读程序代码的只读存储器设备 (诸如光盘只读存储器(CD-ROM)盘或常规的ROM设备)或计算机磁盘构成。
尽管已经参照本发明的实施例来具体地示出和描述了本发明,但本领 域的技术人员应该理解,可以对其进行形式和细节上的各种修改,而不脱 离由所附权利要求包含的本发明实施例的范围。
1权利要求
1、一种方法,包括从可扩展标记语言(XML)文档的结构列表表示中提取一组元素;以及在连续的存储单元中将该组元素存储到紧缩向量中,以支持并行地搜索该组中的元素。
2、 根据权利要求1所述的方法,其中,该组中的元素是结构类型。
3、 根据权利要求1所述的方法,其中,该组中的元素是结构名称。
4、 根据权利要求1所述的方法,其中,该组中的元素的数目至少是8个。
5、 根据权利要求1所述的方法,还包括-使用单指令多数据(SIMD)指令对所述紧縮向量进行搜索,以便并行地 在所述紧縮向量中的该组元素中的每个元素中搜索匹配。
6、 根据权利要求5所述的方法,其中,所述SIMD指令并行地对8 个字节进行操作。
7、 根据权利要求5所述的方法,其中,所述SIMD指令并行地对16 个字节进行操作。
8、 根据权利要求1所述的方法,还包括存储由可变大小的元素构成的次列表,以支持搜索可变大小的元素, 其中所述可变大小的元素是从所述结构列表表示中提取的、且没有被包括 在所述主列表中。
9、 一种装置,包括列表-紧縮向量转换器,用于从可扩展标记语言(XML)文档的结构列表 表示中提取一组元素;以及主列表,用于在连续的存储单元中将该组元素存储到紧縮向量中,以 支持并行地搜索该组中的元素。
10、 根据权利要求9所述的装置,其中,该组中的元素是结构类型。
11、 根据权利要求9所述的装置,其中,该组中的元素是结构名称。
12、 根据权利要求9所述的装置,其中,该组中的元素的数目至少是8个。
13、 根据权利要求9所述的装置,其中,所述主列表支持使用单指令 多数据(SIMD)指令对所述紧縮向量进行搜索,以便并行地在所述紧縮向量 中的该组元素中的每个元素中搜索匹配。
14、 根据权利要求13所述的装置,其中,所述SIMD指令并行地对8 个字节进行操作。
15、 根据权利要求13所述的装置,其中,所述SIMD指令并行地对 16个字节进行操作。
16、 根据权利要求9所述的装置,还包括次列表,用于存储从所述结构列表表示中提取的、且没有被包括在所 述主列表中的可变大小的元素,以支持搜索可变大小的元素。
17、 一种包括具有相关信息的机器可访问介质的制品,其中,所述信 息当被访问时使得机器执行从XML文档的结构列表表示中提取一组元素;以及 在连续的存储单元中将该组元素存储到紧縮向量中,以支持并行地搜索该组中的元素。
18、 根据权利要求17所述的制品,其中,该组中的元素是结构类型。
19、 根据权利要求17所述的制品,其中,该组中的元素是结构名称。
20、 根据权利要求17所述的制品,其中,所述机器还执行 使用单指令多数据(SIMD)指令对所述紧縮向量进行搜索,以便并行地在所述紧縮向量中的该组元素中搜索匹配。
全文摘要
可扩展标记语言(XML)数据被表示为结构列表,其中该列表中的每个结构用来表示该XML的一个方面。一组频繁使用的元素被从该结构列表表示中提取出来,并且存储在紧缩向量中。该紧缩向量表示支持直接在XML数据上使用单指令多数据(SIMD)指令,以加快XML数据被搜索的速度,同时令存储该XML数据所需的存储器最小化。
文档编号G06F17/30GK101452482SQ200810183338
公开日2009年6月10日 申请日期2008年12月2日 优先权日2007年12月3日
发明者K·约内斯 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1