具有组格式的可变长度数据的改进型编码和解码的制作方法

文档序号:6494673阅读:154来源:国知局
具有组格式的可变长度数据的改进型编码和解码的制作方法
【专利摘要】本发明的实施例提供了用于将可变长度数据编码和解码的方法和系统,其可包括用于将搜索引擎收录列表进行编码和解码的方法。多个实施例可以包括不同的编码格式,这些不同的编码格式包括组一进制、封包一进制和/或封包二进制格式。一些实施例可以利用单指令多数据(SIMD)指令,单指令多数据(SIMD)指令可以作为解码过程的一部分对编码的数据执行并行整理操作。一些实施例可以采用查询表来确定解码过程中要采用的整理序列和/或掩码和/或移位。一些实施例可以采用混合格式。
【专利说明】具有组格式的可变长度数据的改进型编码和解码
【背景技术】
[0001]典型的搜索引擎索引算法采用反向索引数据结构。这在概念上类似于书籍背后的索引,它是将例如,词汇列表的索引数据结构映射到其在文档(或文档集)中的位置的索引数据结构。在搜索引擎的应用环境中,文档通常是Web页面、电子邮件消息等。词汇在文档中出现可以称为收录,包括一个词汇的所有文档的列表可以称为收录列表。刚好与书籍索引条目列表页码一样,收录列表可以包括文档标识号(docID)。当搜索引擎接收查询时,它可以对收录列表查找查询中的每个词汇,并组合结果。为了高效地组合结果,可以按其docID的次序存储器这些收录。
[0002]期望将收录列表存储在尽可能小的空间中。使用相邻docID之间的差而非docID本身,收录能够包括更少的数量。从常用数据库到MIDI规范,有多种其他示例,其中可以更紧密地将数据编码,然后在较后的点处将其解码,其中常常基于需要数据的时间重复地进行解码。有多种为将数据存储在更少的空间中而开发的技术。但是,这些方法或许有缺点,包括速度限制或存储效率限制。
附图简介
[0003]将参考附图描述根据本发明披露的多种实施例,其中:
[0004]图1图示其中能够实施多种实施例的环境;
[0005]图2A图示能够根据一些实施例使用的拆分一进制编码格式;
[0006]图2B图示根据一些实施例的采用拆分一进制编码格式编码的数据的示例;
[0007]图3A图示能够根据一些实施例使用的封包一进制编码格式;
[0008]图3B图示根据一些实施例的采用封包一进制编码格式编码的数据的示例;
[0009]图4A图示能够根据一些实施例使用的封包二进制编码格式;
[0010]图4B图示根据一些实施例的采用封包二进制编码格式编码的数据的示例;
[0011]图5A图示能够根据一些实施例使用的组二进制编码格式;
[0012]图5B图示根据一些实施例的采用组二进制编码格式编码的数据的示例;
[0013]图6A图示能够根据一些实施例使用的组一进制编码格式;
[0014]图6B图示根据一些实施例的采用组一进制编码格式编码的数据的示例;
[0015]图6C图示能够根据一些实施例使用的组一进制编码格式;
[0016]图7A图示能够根据一些实施例使用的组一进制编码格式;
[0017]图7B图示根据一些实施例的采用组一进制编码格式编码的数据的示例;
[0018]图7C图示能够根据一些实施例使用的组一进制编码格式;
[0019]图8图示能够根据一些实施例使用的用于将搜索引擎收录列表的文档标识号编码的方法;
[0020]图9图示能够根据一些实施例使用的用于将可变长度数据编码的方法;
[0021]图10图示能够根据一些实施例使用的并行整理(parallel shuffle)操作;
[0022]图11图示能够根据一些实施例使用的并行整理(parallel shuffle)操作;[0023]图12图示能够根据一些实施例使用的解码的方法;
[0024]图13图示如何构造能够根据一些实施例使用的整理序列;
[0025]图14图示能够根据一些实施例使用的用于将搜索引擎收录列表中的编码的文档标识号差解码的方法;
[0026]图15图示能够根据一些实施例使用的用于将可变长度数据解码的方法;
[0027]图16图示能够根据一些实施例使用的混合一进制序列编码格式;
[0028]图17图示根据一些实施例的采用混合一进制序列编码格式编码的数据的示例;
[0029]图18图示能够根据一些实施例使用的具有恒定长度描述符的块行程的混合编码格式;
[0030]图19图示根据一些实施例的采用具有恒定长度描述符的块行程的混合编码格式编码的数据的示例;
[0031]图20图示根据一些实施例的采用具有恒定长度描述符的块行程的混合编码格式编码的数据的示例;
[0032]图21图示根据一些实施例的采用具有恒定长度描述符的行程的混合编码格式编码的数据的示例;
[0033]图22图示根据一些实施例的采用具有可变长度描述符的行程的混合编码格式编码的数据的示例;以及
[0034]图23图示根据一些实施例的采用具有可变长度描述符的行程的混合编码格式编码的数据的示例。
【具体实施方式】
[0035]根据本发明披露的多种实施例的系统和方法可以克服用于将数据集编码和解码的常规方法中遇到的前文所述和其他缺点中的一个或多个缺点。具体来说,多种方法提供对包括整数序列,如搜索引擎收录列表中遇到的那些整数序列的数据集进行改进的编码和
/或解码。
[0036]提供一些方法、系统和/或装置,其用于采用根据多种实施例的并行整理操作将搜索引擎中的编码的文档标识号差解码。在一个实施例中,将编码的文档标识号差解码包括读一个或多个描述符。每个描述符包括有关一组编码的标识号差的尺寸信息。在一些实施例中,采用组一进制格式将编码的文档标识号差编码。读表示该组编码的文档标识号差的多个数据。将该组编码的文档标识号差与一个或多个描述符链接。标识查询表中的与一个或多个描述符链接的一个或多个整理序列。使用所标识的整理序列对表示该组编码的文档标识号差的多个数据执行一个或多个并行整理操作。一个或多个并行整理操作包括将一个或多个零序列插入到多个数据中。从表示该组编码的文档标识号差的整理的多个数据中确定多个解码的文档标识号差。
[0037]根据多种实施例提供用于将可变长度数据解码的方法、系统和/或装置。在一些实施例中,将可变长度数据解码包括读一个或多个数据块。每个数据块表示多个编码的可变长度数据。读与一个或多个数据块链接的一个或多个描述符。从查询表标识与一个或多个描述符链接的一个或多个整理序列。使用所标识的整理序列对该一个或多个数据块执行一个或多个整理操作。由整理的一个或多个数据块确定多个解码的可变长度数据。[0038]在一些实施例中,执行一个或多个整理操作包括将一个或多个零序列插入到整理的一个或多个数据块以标准格式,如整数的32位表示来表示该一个或多个数据块的一个或多个部分。该一个或多个数据块可以表示以可变长度表达编码的多个整数。在一些实施例中,该一个或多个数据块可以表示以可变长度表达编码的其它数据。
[0039]由整理的一个或多个数据块确定多个解码的可变长度数据还可以包括,从整理的一个或多个数据块确定部分结果。可以从另一个数据块确定与该部分结构关联的其余部分。此类实施例可以采用完整块变体,如上文论述。在一些情况中,一个或多个整理操作可以包括来自单指令多数据(SMD)处理器指令集的一个或多个并行整理指令。
[0040]一些实施例可以包括标识与一个或多个描述符链接的一个或多个偏移量。与一个或多个描述符链接的一个或多个偏移量可以包括具有固定尺寸的输入偏移量,在一些情况中,与一个或多个描述符链接的一个或多个偏移量可以包括具有可变尺寸的输出偏移量。该固定尺寸可以取决于一个或多个数据块和一个或多个描述符中包括的字节的数量。与一个或多个描述符链接的一个或多个偏移量可以包括具有可变尺寸的输入偏移量。该可变尺寸可以取决于数据块表示的数据的数量。一些实施例还可以包括标识输出偏移量。
[0041]本文描述的计数包括若干可变长度编码格式以及可以允许使用非常快速的解码方法的解码方法和系统。在一些情况中,这些格式还可以允许更大的数据压缩。虽然一些实施例可能是针对搜索引擎收录列表来采用的,但是本文描述的技术可以用在其中紧密地存储数字列表或其他数据集以及高效地将其解码是有益的的其他场合中,如采用数据库的情况中。
[0042]多个实施例可以提供多种优点,包括但不限于避免了可能与使用深流水线的一些处理器中的深流水线的效益相干扰的分支。多个实施例可以比常规可变长度编码和解码中的情况更频繁地读和写数据,包括在一些情况中读未对齐的数据(而非在对象尺寸边界上),而非判断需要读多少。一些实施例可以采用将可能解码的选项预先编译并将该信息存储在一个或多个表中。一些实施例可以使用单指令多数据(SIMD)指令并行地对多个字节操作。一些实施例可以采用SMD指令,如类似封包整理字节(PSHUFB)的整理指令。一些实施例可以采用包括有关数据的长度信息的描述符位和/或描述符字节。
[0043]提供用于更高效地将标准格式解码的方法。该格式可以称为varint-SU:它包括可变长度整数编码(varint),其具有所编码的整数的长度的拆分(S)—进制(U)表示。该方法可以采用并行处理来用于将此格式解码,其具有即使无法按自然机器次序存储压缩的字节仍有效的变化。多个实施例可以一次对编码的数据的一组字节操作。在一个实施例中,一次操作8个字节的块。该方法可以包括并行地提取或收集描述符位,这些描述符位可以是连续位和终止位。在一些实施例中,此提取或收集过程使用封包移动掩码字节(PM0VMSKB)指令。该方法可以使用提取的位作为预先计算的整理序列的表中的偏移量。如PSHUFB的并行排列指令可以使用此整理序列来确定如何将该数据解码。可以执行一系列的位移位操作以从解码的数据中移除初始连续和/或终止位。
[0044]在一些实施例中,提供编码格式连同解码方法,其涉及封包一进制(PU)表示。此格式可以称为varint-PU。在一些情况中,这可以包括将连续位和/或终止位移入能够在第一个字节发现的单个描述符中。这样可以允许数据位被连续地存储在存储器中,这可以使得更高效地解码成为可能。[0045]在一些实施例中,提供用于将作为块存储的一组编码的整数解码的方法。该格式可以包括组二进制(GB)表示,在一些实施例中可以称为varint-GB。在一些情况中,此方法可以采用如PSHUFB指令的整理指令以并行地将多组数据字节解码。整理序列从描述符类型的值指定的表中获取。
[0046]在一些实施例中,同时提供用于多组整数的编码格式和解码方法。在一些情况中,此格式可以包括可包括组一进制(GU)表示的格式。例如,对于一组8字节整数(潜在地不完整),该格式可以称为varint-G8IU,具有一进制长度编码。
[0047]本文给出另一个编码格式为varint G8⑶,其表示具有一进制长度编码的一组8字节信息(每个完整)。Varint-GS⑶一般是指编码期间整数或数据未刚好填入块中的剩余空间时的情况。在该情况下,可以将数据的第一部分存储在当前数据块中,以及可以将该数据的剩余部分转移存储在下一个块中。多个实施例可以包括解码方法,这些解码方法包括将块之间的进位纳入考虑的表。
[0048]在一些实施例中,提供可变长度编码格式的变体,其包括采用上述压缩方案的至少其中之一连同位向量来节省空间的混合。在一些实施例中,该可变长度编码格式可以包括组一进制格式。多个实施例可以包括检测要编码的即将到来的整数或数据的序列是否非常小,从而可以将这些整数或数据的多于一个整数或数据编码到一个字节中。可以将这些整数或数据作为位向量来存储。例如,第η位可以表示在位置基+η处的文档是否在收录列表中。特殊描述符值可以指示该组数据字节是否应该解释为使用可变长度整数格式之一还是解释为位向量。
[0049]在一些实施例中,提供可变长度编码格式的变体,其包括压缩方案和行程长度编码的混合以便节省空间。多个实施例可以通过存储行程的长度而非值本身来将一个行程的相似数据编码,如全部I的一个行程。
[0050]采用组格式之一的实施例可以容易地扩充到更大的组,并且这可以对可提供更宽并行性(例如,256位寄存器)的处理器提供附加的效率增益。
[0051]图1图示用于实施根据多种实施例的多个方面的环境100的示例。正如将认识到的,虽然出于解释的目的而使用了基于Web的环境,但是也可以在适合的情况下使用不同环境来实施多种实施例。电子客户端装置102包括可操作以通过适合的网络104发送和接收请求、消息或信息以及将信息送达回用户的装置的任何适合装置。此类客户端装置的示例包括个人计算机、蜂窝电话、手持消息传送装置、膝上型计算机、机顶盒、个人数字助理、电子书阅读器等。该网络可以包括任何适合的网络,包括内联网、因特网、蜂窝网络、局域网或任何其他此类网络或其组合。用于此类系统的组件可以至少部分地根据所选的网络和/或环境的类型而定。用于经由此类网络通信的协议和组件是众所周知的,并且在本文将不予以详细论述。通过网络的通信可以通过有线或无线连接及其组合来实现。在此示例中,该网络包括因特网,因为环境包括用于接收请求并对此响应提供内容的Web服务器106,虽然对于其他网络,可以如本领域技术人员所显见的,使用提供类似目的备选装置。一些实施例可以采用单个电子客户端装置102。
[0052]该说明性环境包括至少一个应用服务器108和多个资源、服务器、主机、实例、路由器、交换机、数据存储和/或给予本文中将称为数据面110定义的其他此类组件,当然应该理解此数据面的资源不限于存储数据和提供对数据的访问。应该理解,可以有若干个应用服务器、层或其他元件、过程或组件,它们可以链接或以其他方式配置,并且可以交互来执行如从适合的数据存储获取数据的任务。正如本文所使用的,术语“数据存储”是指能够存储、访问和检索数据的任何装置或装置的组合,其可以包括任何标准、分布式或集群式环境中的任何组合和数量的数据服务器、数据库、数据存储装置和数据存储介质。该应用服务器可以包括用于按执行客户端装置的一个或多个应用的多个方面所需而与数据存储集成、处理应用的数据访问和商业逻辑的大部分的任何适合的硬件和软件。该应用服务器与数据存储协同来提供许可控制服务,以及能够生成如文本、图形、音频和/或视频的内容以传输给用户,在此示例中,可以通过Web服务器以HTML、XML或另一个适合的结构化语言的形式将这些内容提供给用户。在一些实施例中,Web服务器106、应用服务器108和类似组件视为数据面的一部分。处理所有请求和响应以及在客户端装置102和应用服务器108之间的内容交付可以由Web服务器来处理。应该理解,Web和应用服务器并非必需的而仅仅是示范组件,因为结构化代码可以在任何适合的装置或主机机器上执行,正如本文其他地方所论述的。
[0053]数据面的数据存储110可以包括用于存储与特定方面相关的数据的若干分开的数据表、数据库或其他数据存储机构和介质。例如,图示的数据面包括用于存储生产数据112和用户信息116的机构,其可以用于为生产端提供内容。该数据面还示出为包括用于存储日志数据114的机构,日志数据114可以用于如报告和分析之类的目的。应该理解,可以有可能需要存储在数据存储中的许多其他方面,如用于页图像信息和访问权信息的方面,可以根据情况将其存储在任何上文列出的机构中或存储在数据面110中的附加机构中。数据面110可通过与之关联的逻辑操作以从应用服务器108接收指令,并对此响应以获取、更新或以其他方式处理数据、指令或其他此类信息。在一个示例中,用户可以提交针对某种类型的项目的搜索请求。在此情况中,数据面的组件可以访问用户信息以验证用户的身份,并且可以访问目录细节信息以获取与该类型的项目有关的信息。然后可以将该信息返回给用户,如在用户能够通过用户装置102上的浏览器查看的Web页面上列示的结果。可以在浏览器的专用页面或窗口查看所关注的特定项目的信息。
[0054]每个服务器通常将包括操作系统,操作系统提供该服务器的常见管理和操作的可执行程序指令,并且通常将包括计算机可读介质,计算机可读介质存储在被服务器的处理器执行时使服务器能够执行其需要的功能的指令。服务器的操作系统和常见功能性的适合实现是众所周知的或可通过商业渠道获取的,并且尤其根据本文公开,被本领域技术人员容易地实现。
[0055]一个实施例中的环境是分布式计算环境,其采用若干个计算机系统和组件,这些计算机系统和组件使用一个或多个计算机网络或直接连接经由通信链路互连。但是,本领域技术人员将认识到,此类系统在具有比图1所示更少或更多数量的组件的系统中同样能够很好地工作。因此,图1中的系统100的图示应该被视为本质上是说明性的,而非对本发明披露范围的限制。
[0056]如图1所示的环境对于如多种内容提供商或其他此类实体可以是有益的,其中可以使用多个主机和多种类型的资源来执行如提供内容、认证用户、分配资源的任务,或执行任何多种其他此类任务。这些主机的其中一些可以配置成提供相同的功能性,而另一些服务器可以配置成执行至少一些不同的功能。[0057]多种实施例提供多种可变长度编码的方法。一些实施例可以包括面向字节的编码。面向字节的编码包括如下属性。自然二进制表示的所有有效位均被保留。每个字节包含仅来自一个整数或数据的位。编码的单个字节内的数据位保留它们在原始数据或整数中所具有的排序。来自单个整数或数据的所有位优先于来自下一个整数或下一个数据的所有位。
[0058]编码的面向字节的格式可以因维数变化而有所不同。例如,可以采用二进制或一进制来表示数据或整数的长度。在一些情况中,可以将表示数据或整数的位与对应整数或数据的数据位相邻来存储,以使一些数据字节兼有地包含数据和长度信息。在一些情况中,可以将表示若干整数或数据的长度的位一起分组在与包含数据位的字节不同的一个或多个字节中。
[0059]在一些实施例中,可以将一进制或二进制表示或格式的位连续地封包或分组。还可以将一进制表示的位拆分到编码的整数或数据的多个字节上。在一些情况中,可以将二进制表示拆分到编码的整数或数据的多个字节上。在一些实施例中,用于表示一个或多个编码的整数或数据的长度的位集称为描述符,因为它可以描述数据位是如何组织的。可以将描述符设为与数据位相连。在一些情况中,可以将描述符设为不与数据位相连。
[0060]在一些实施例中,每个编码的整数或数据可以包括至少一个字节。二进制和一进制描述符都可以通过记录值η-1来表示整数或数据的长度η。这减少了表示给定长度所需的位的数量。作为备选,整数或数据的长度可以包括将长度存储为η,这可以允许长度零来表示零数据字节的任意常数。
[0061]可以采用上文论述的多个方面来提供对不同面向字节的编码格式的描述。这些方面可以用于将能够以四个字节或更少字节编码的整数编码。但是,一些情况一般可以扩充到覆盖编码数据。而且,这些编码原理还可以用于例如数据和/或整数可能包括多于四个字节的情况。
[0062]下文描述用于不同可变长度编码的若干不同实施例。在本发明披露的范围内可以构造另外的实施例。一般,多个实施例可以包括可具有不同长度的编码的值。可以将这些长度编码在一个或多个描述符中。可以采用两个属性来描述不同编码类型的描述符。第一个描述符属性可以包括安排描述。描述符的安排描述可以称为拆分、封包或组。如上文提到的,拆分描述符可以包括将提供长度信息的描述符的位分布在也包括有关一个或多个整数或数据的信息的若干字节之间。封包描述符可以指封包在一起的描述符位。在一些实施例中,封包描述符可以优先于相应的整数或数据的编码。组描述符可以包括将若干整数或数据的描述符分组在一起。
[0063]第二描述符属性可以包括长度编码描述。一些长度编码描述可以是一进制的,采用个别位,而一些长度编码描述是二进制的,采用两个位。基于所关注的编码的整数或数据的长度,一些实施例可以采用更多的位。
[0064]这些格式的其中一些有可在不同实施例中发现的多种变体。可以按小端或大端顺序存储编码的数据的字节,这是本领域中公知的技术。可以将描述符位存储在最小有效(LS)或最高有效位(MSB)中。虽然这些选择有时描述为任意约定,在实践中,可能存在一些效率上的考虑,以产生对于某些机器体系结构具有吸引力的某些变体的效率考虑。例如,在拆分一进制表示(如下文论述的),在最高有效位中将终止表示为O可以允许一个字节整数的常见情况能够不采用任何移位或掩码而进行解码。在其他示例中,对于封包表示,使用最小有效位来获益于非对齐加载从而将数据位保持在一起是有益的,。虽然在表示保留原有的字节排序时,传统解码方法可以更有效率地运行,但是,本文披露的SIMD方法的性能可以不依赖于排序。下文示例一般将包括小端顺序,但是,可以根据本文所描述的来调适大端顺序。例如,采用封包编码(如下文论述),可以将描述符存储在最小有效位并移位以获得具有最小端机器的数据。对于大端机器,可以将用于封包编码的描述符存储在最高有效位和掩码中以获取数据。此外,在一些实施例中可以扫描描述符中的I和O的读数。
[0065]一些实施例可以对描述符采用一进制表示。对于一进制格式,可以采用自然约定,其中可以通过连续I位的数量来表示数量(其可以称为连续位),后接终止O (称为终止位)。一些实施例可以反向使用此约定,使用连续O位,后接终止I。在一个实施例中,采用自然约定以及从最低有效位开始,例如位0111可以表示数字3。
[0066]在一些实施例中,拆分一进制格式可以视为表示在连续和/或终止位的序列中编码的整数或数据的长度。描述符位可以视为分布式连续位,其中每个字节中的位可以表征连续或终止。例如,三个字节整数编码可以看上去如下:
[0067]Ixxxxxxx
[0068]Ixxxxxxx
[0069]Oxxxxxxx
[0070]注意,前导位可以形成一进制数2,表示长度3。在一些实施例中,这可以称为Varint-SU,因为它是具有拆分在若干字节上且以一进制表示的长度信息的整数的可变长度表达。在一些实施例中,拆分一进制表示可以使用最高有效位作为连续或终止位。这可以使实施例对于终止字节的情况能够避免移位。对于编译器来说,这还可以允许使用符号校验以测试该位。但是,一些实施例可以将字节的最低有效位用于连续位或终止位。
[0071]图2A提供8位组成的字节的拆分一进制表示的实施例示例,其中描述符位210设在最高有效位(MSB)以及七个数据位220设在字节的其余位中。图2B提供可以使用拆分一进制表示来表示整数123456的示例,其中如果表示接续下一个字节,每个字节在每个字节中MSB或其余最左位(例如211和212)中包括1,以及如果达到整数的结尾,则在213中包括O。
[0072]—些实施例可以包括描述符的封包一进制表不。在一些实施例中,这可以称为Varint-PU,并且可以与varint_SU相似,但是其中将描述符位封包在一起。封包位可以收集在第一个字节的低阶位中而非拆分在所有字节上。选择低阶位来保存描述符对于小端编码或小端体系结构是适合的,这是本领域中公知的,从而一个整数的所有数据位均是连续的。出于相同的原因,在大端体系结构上,将描述符置于高阶位并使用大端编码对于解码可能更有效率。图3A提供封包一进制表不的实施例的一个不例,其中η个描述符位一起被封包在最低有效(LS)位310中,其中将7η个数据位封包在最高有效位320中。这提供小端体系结构的示例。对于大端体系结构,描述符位可以被置于最高有效位中。表330提供如何采用η个描述符位来表示数据位中的字节的数量的四个示例。图3Β示出数字123456的封包一进制表示的示例,其中前3个低阶位011311表示该数字涉及3个字节321的信息。
[0073]多个实施例还可以包括组一进制表示,下文对此予以更详细论述。
[0074]多个实施例可以采用描述符的封包二进制表示。例如,可以保留第一个字节的两个位来指示以二进制编码的整数或数据的长度。图4A提供其中采用两个描述符位410连同多达30个数据位420的实施例示例。表430提供如何采用两个描述符位410来表示数据位中的数量的四个示例。一些实施例可以采用更多或更少的数据位。图4B提供可以如何采用封包二进制表示来将123456编码的一个示例。要表示123456涉及17个数据位,这多于16位(S卩,两个字节)和少于25位(S卩,3个字节)。因此,两个描述符位411表示对这些数据位提供三个字节421。在此情况中,描述符位411将3个字节的长度表示为10。
[0075]其他实施例可以采用其他表示。例如,在一些情况中,可以采用拆分二进制表示,其中可以将二进制描述符位拆分到若干字节上以用于给定的整数或数据表示。一些实施例可以包括组二进制表示,下文对此予以更详细论述。
[0076]在描述符长度可预先固定的情况中,一些实施例可以采用二进制长度描述符。虽然本文描述的实施例一般涉及以固定长度示出的二进制格式,但是一些实施例可以采用附加的元数据来存储描述符长度本身。此外,一些实施例可以包括拆分固定长度的k位二进制描述符(每个字节一个位),这可以得到可能需要至少k个字节的面向字节的整数编码。
[0077]一些编码格式可以将若干整数或数据分组在一起。这可以提供采用SIMD并行性的机会。一些实施例可以包括满足保留字节的面向字节的编码属性的编码,其中包含原(未编码的)整数或数据中的有效位的每个字节不修改地出现在编码的形式中。
[0078]采用组编码的实施例可以包括从数据字节中分离出描述符字节。在一些实施例中,组格式中将描述符字节与数据字节分离可以能够实施更有效率的解码。这种分离能够通过表的使用来简化解码过程。但是,封包和拆分表示也可以从表的使用获益,正如下文更详细描述的。在一些实施例中,组格式可以避免按位操作,这在另一方面对于消除散布的描述符位可能是必要的。具体来说,采用字节保留编码的实施例可能尤其更易于采用SMD技术解码,下文对此予以更详细的描述。
[0079]图5A图示组二进制格式字节排序的示例。在图5A的示例中,字节排序包括一组四个整数(520-a、520-b、520-c和520_d),包含四个2位二进制数的描述符字节510位于该组之前。每个2位二进制数表示对应的整数的长度(例如,从右向左读,第一个2位数表示整数0520-a,接下来的2位数表示整数1520-b并以此类推)。图5A所示的此格式一般可以称为varint-GB格式。
[0080]图5B示出可以使用组二进制格式以小端字节顺序表示四个十六进制数0xAAAA521-a、0xBBBBBB521-b、0xCC521-c、0xDDDDDDDD521-d。四个整数对应地占据 2 个字节、3个字节、I个字节和4个字节。描述符字节511由2位二进制值η-1表示每个字节的长度η。使用此示例,图5Β所示的描述符字节511分别包括值01、10、00和11 (从右向左读)。01表示整数0xAAAA521-a的2字节长度;10表示整数0xBBBBBB521_b的3字节长度;00表示整数0XCC521-C的I字节长度;11表示整数0xDDDDDDDD521_d的4字节长度。为了在描述符位和数据字节之间保持一致性的顺序,一些实施例可以将第一个二进制长度存储在最低有效位中。由此,图5B所示的四个整数的描述符字节511表示为11001001。字节地址从右到左增加,从而与增加的位有效性的顺序匹配。描述符中成对的位的顺序与整数的顺序匹配。
[0081]组二进制格式的一些实施例包括固定数量的整数占用可变数量的字节,以二进制存储其长度。相比之下,组一进制格式的一些实施例包括固定数量的字节将可变数量的整数编码,以一进制存储其长度。例如,在一个实施例中,称为varint-GU,可以将8个数据字节连同包含每个编码的整数的长度的一进制表示的一个描述符字节分组在一起。8个数据字节的每一个字节可以编码少则两个整数以及多则八个整数,具体视其尺寸而定。描述符中零的数量指示该组中编码的整数的数量。图6A中示出组一进制格式的实施例。在此实施例中,8的块尺寸620可能是可使用描述符字节610的每个位的最小尺寸;对于一些实施例,大于8的倍数是可能的。图6B提供使用组一进制格式将四个整数编码的示例。在此示例中,使用与图5B所示的组二进制格式所示相同的四个整数OxAAAA、OxBBBBBB、OxCC和OxDDDDDDDD来图示组一进制格式。将这些值编码将包括10个字节,但是块中仅有8个字节。前三个整数0xAAAA621-a、0xBBBBBB621-b和0xCC621_c嵌入块中,使用6个字节,留下
2个字节的填充位630。最后的整数OxDDDDDDDD留到下一个块(未示出)。描述符611包含三个一进制值01 (表示0xAAAA621-a的2字节长度),011 (表示0xBBBBBB621_b的3字节长度),以及O (表示0xCC621-c的I字节长度),连同两个填充位11 (表示填充630的2个字节)。它们以与整数相同的顺序安排,从而赋予描述符二进制值11001101。
[0082]图6C提供可以将最多16个数据字节编码的组一进制格式的示例。在实施例中,采用两个描述符字节(分别为612-a和612-b),其中第一描述符字节612_a描述最多8个数据字节的第一块622-a以及第二描述符字节612-b描述最多8个数据字节的第二块622_b。组一进制格式的其他实施例可以将甚至更多数据字节编码,仅作为示例,如24或32个数据字节,其中对8个数据字节的每个附加组提供附加的描述符字节。虽然此示例示出与数据字节连续的描述符字节,但是一些实施例可以包括不与数据字节连续的描述符字节。
[0083]因为在一些实施例中可以表示整数的并非每组编码的字节都可以均匀地嵌入到8个字节块中,所以一些实施例可以提供该编码的变体。在一些情况中,它们可以称为不完整或完整的。
[0084]在不完整的块变体(在一些实施例中可以称为varint_G8IU)中,多个实施例可以存储尽可能吻合地存储在8个字节中,如果需要的话,将数据块保留为不完整的。在论述的实施例中,8是指数据块中的字节的数量。上文结合图6B论述了不完整块变体的实施例。剩余空间可以填充以零,但是在解码时可以被忽略。当没有另外的整数要解码时,描述符的最后(最高有效)位可以是I位的非终止序列。一些实施例可以包括此编码格式的变体,其使用可变尺寸数据块且避免填充位。
[0085]在采用完整块变体的实施例(在一个实施例中可以称为varint_G8CU)中,可以填满数据块中的所有字节。例如,在varint-G8CU实施例中,填满数据块中的所有八个字节。与先前一样,描述符中零位的数量指示所编码的完整整数的数量。在整数超过当前块的剩余空间的情况下,将吻合嵌入数量的整数置于当前块中。该整数的剩余字节转移到下一个数据块。相似地,将对应的描述符位转移到下一个块的描述符字节。图7A提供具有完整块的组一进制格式的示例,其具有8个数据字节r720和描述符字节710 ;这与图6A相似。图7B示出如何将字节转移到下一个数据块。同样地,出于举例的目的,图7B示出与若干其他示例中所使用相同的四个整数OxAAAA、OxBBBBBB、OxCC和OxDDDDDDDD。前三个整数721和对应的描述符位711完全如varint-G8IU中那样来存储。但是,varint_G8⑶可以不同方式处理第四个整数。将其前两个字节722置于第一数据块,完全填满它,并且剩余两个字节723进入后续块。与后两个字节712对应的两个描述符位进入下一个块的描述符字节。虽然跨两个描述符字节分布,但是此第四个整数的描述符位的一进制值仍表示所编码的整数的长度_1。
[0086]图7C提供可以采用两个描述符字节713后接16个数据字节724的组一进制格式的示例。此实施例可以采用如128位寄存器来实施。
[0087]图8提供根据多种实施例的计算机实施的方法800,用于将搜索引擎收录列表的文档标识号编码。方法800可以在例如图1的环境100中所见的环境和装置中实施。方法800还可以包括和/或采用结合图6A-C和/或图7A-C论述的组格式的多个方面。在采用可执行指令配置的一个或多个计算机系统的控制下,方法800包括确定用于数据存储的块的尺寸802。接收搜索引擎收录列表的多个文档标识号804。确定相邻文档标识号之间的差806。确定每个文档标识号差的编码表达808。文档标识号差的编码表达使用可变长度表达。标识文档标识号差的连续多个编码表达810。连续子集的每个文档标识号差的编码表达的相应尺寸之和小于或等于为进行数据存储确定的块尺寸。生成一个或多个描述符812。这些描述符提供有关该连续的文档标识号差的编码表达中文档标识号差的编码表达的数量以及相应文档标识号差的每个相应编码表达的尺寸的信息。这些描述符可以采用每个相应尺寸的一进制表不来表不文档标识号差的每个相应编码表达的尺寸。存储一个或多个描述符和文档标识号差的连续的编码表达814。将文档标识号差的连续的编码表达作为组来存储,并且将一个或多个描述符与该组文档标识号差的编码表达连续地来存储。
[0088]图9提供根据多种实施例的计算机实施的方法900,使用可变长度表达将数据编码。方法900可以在例如图1的环境100中所见的环境和装置中实施。方法800还可以包括和/或采用结合图6A-C、图7A-C和/或图8的方法800论述的组格式的多个方面。在采用可执行指令配置的一个或多个计算机系统的控制下,方法900包括为进行数据存储确定块尺寸902。标识多个数据项904。在一些情况中,这些数据项是增量间隙(delta-gap)。确定每个数据项的编码表达906。数据项的编码表达使用可变长度表达。标识数据项的多个编码表达的第一子集908。来自数据项的多个编码表达的第一子集中的数据项的编码表达的相应尺寸之和小于或等于所确定的用于数据存储的块的尺寸。生成第一描述符910。第一描述符表示第一子集的数据项的编码表达的相应尺寸。将数据项的多个编码表达的第一子集作为第一存储组来存储912。还存储第一描述符914。
[0089]在一些实施例中,第一描述符与第一存储组连续地来存储,而在其他情况中,可以将该描述符与第一存储组不连续地来存储。描述符以一进制格式表示每个数据项的每个相应编码表达的尺寸。一进制格式可以包括将每个数据项的每个编码表达的相应尺寸表示为一进制尺寸减去一,同时通过零将每个相应长度的表示分隔。在一些情况中,可以将填充信息插入到第一描述符中,表示第一子集与所确定的数据块尺寸之间的尺寸之差。此情况可以是在数据项的多个编码表达小于所确定的用于数据存储的块的尺寸时。
[0090]在一些实施例中,可以从数据项的多个编码表达中标识相应数据项的附加编码表达。可以将相应数据项的附加编码表达的至少第一部分作为第一存储组的部分来存储。可以将相应数据项的附加编码表达的至少第二部分作为第二存储组的部分来存储。在这些情况中可以生成第二描述符。第二描述符可以将相应数据项的附加编码表达的至少第二部分的尺寸部分地作为第二存储组的部分来存储。
[0091]多个实施例可以包括若干不同的解码方法,可以采用这些解码方法来将上文论述的一种或多种编码格式解码。这些解码方法还可以用于本发明披露中可能不一定论述的其他编码格式。一些实施例可以采用单指令多数据(SIMD)指令。多个实施例可以采用此类指令并行地对不同编码的格式所遇到的多个字节执行动作。
[0092]—些实施例可以采用可用于不同平台的SIMD指令,这些平台包括但不限于Intel和AMD在处理器中实施以及在许多数据中心大量使用的Intel?64体系结构。在Intel?64体系结构中,随着时间推移已经添加了一系列SMD增强。在SMD能力中,有16字节XMM向量寄存器和用于对它们操作的并行指令。一些实施例可以采用其他格式的SIMD指令提供与Intel?64体系结构类似或不同的能力。
[0093]一些实施例可以采用整理指令。仅作为示例,在一些实施例中,可以采用2006年随SSSE3引入的PSHUFB指令。它在XMM寄存器中执行字节的排列(“整理”),从而允许将零插入在指定的位置中。PSHUFB具有两个运算数,包含数据的位置和包含整理序列的寄存器。如果保留数据运算数的原值,则可以将PSHUFB视为根据整理序列(shf )将字节的源序列(src)转换成目的地序列(dst)。下文提供可提供PSHUFB所见的整理序列的一个伪代码示例。
【权利要求】
1.一种用于将可变长度数据解码的系统,其包括: 处理器;以及 存储装置,所述存储装置包括在被所述处理器执行时使所述系统执行如下操作的指令: 读取一个或多个数据块,每个数据块包括多个编码的可变长度数据; 读取与所述一个或多个数据块链接的一个或多个描述符; 从查询表标识与所述一个或多个描述符链接的一个或多个整理序列; 使用一个或多个所标识的整理序列对所述一个或多个数据块执行一个或多个整理操作;以及 由整理的一个或多个数据块确定多个解码的可变长度数据。
2.如权利要求1所述的用于将可变长度数据解码的系统,其中执行所述一个或多个整理操作还包括,将一个或多个零序列插入到所述整理的一个或多个数据块以按标准格式来表示所述一个或多个数据块的一个或多个部分。
3.如权利要求1所述的用于将可变长度数据解码的系统,其中所述一个或多个数据块表示多个可变长度整数。
4.如权利要求1所述的用于将可变长度数据解码的系统,其中由所述整理的一个或多个数据块确定多个解码的可变长度数据还包括: 由所述整理的一个或多个数据块确定部分结果,其中由另一个数据块确定与所述部分结果关联的剩余部分。
5.如权利要求1所述的用于将可变长度数据解码的系统,其中所述一个或多个整理操作包括来自单指令多数据(SMD)处理器指令集的一个或多个并行整理指令。
6.如权利要求1所述的用于将可变长度数据解码的系统,其还包括: 标识与所述一个或多个描述符链接的一个或多个偏移量。
7.如权利要求6所述的用于将可变长度数据解码的系统,其中与所述一个或多个描述符链接的所述一个或多个偏移量包括具有固定尺寸的输入偏移量和可变尺寸的输出偏移量。
8.如权利要求6所述的用于将可变长度数据解码的系统,其中与所述一个或多个数据块链接的所述一个或多个偏移量包括具有可变尺寸的输入偏移量。
9.一种计算机实施的方法,其用于使用可变长度表达来将数据编码,所述方法包括: 在以可执行指令配置的一个或多个计算机系统的控制下, 确定用于数据存储的块的尺寸; 标识多个数据项; 确定每个数据项的编码表达,其中所述数据项的编码表达使用可变长度表达; 标识所述数据项的所述多个编码表达的第一子集,其中来自所述数据项的多个编码表达的所述第一子集中的数据项的编码表达的相应尺寸之和小于或等于所确定的用于数据存储的块的尺寸; 生成第一描述符,所述第一描述符表示所述多个数据项的所述多个编码表达的所述第一子集中的数据项的编码表达的相应尺寸; 将所述多个数据项的所述多个编码表达的所述第一子集中的数据项的编码表达作为第一存储组来存储;以及存储所述第一描述符。
10.如权利要求9所述的使用可变长度表达将数据编码的计算机实施的方法,其中存储所述第一描述符包括,将所述第一描述符与所述第一存储组连续地存储。
11.如权利要求9所述的使用可变长度表达将数据编码的计算机实施的方法,其中存储所述第一描述符包括,将所述第一描述符与所述第一存储组不连续地存储。
12.如权利要求9所述的使用可变长度表达将数据编码的计算机实施的方法,其中生成所述第一描述符包括,以一进制格式表示每个数据项的每个相应编码表达的尺寸。
13.如权利要求12所述的使用可变长度表达将数据编码的计算机实施的方法,其中以一进制格式表示每个数据项的每个相应编码表达的尺寸包括,生成所述一进制格式,该一进制格式将每个数据项的每个编码表达的相应尺寸描述为一进制尺寸减去一,并且通过零将每个相应尺寸的表达分隔。
14.如权利要求12所述的使用可变长度表达将数据编码的计算机实施的方法,其中生成所述第一描述符包括,将填充信息插入到所述第一描述符中,表示所述第一子集与所述数据块尺寸之间的尺寸之差。
15.如权利要求9所述的使用可变长度表达将数据编码的计算机实施的方法,其还包括: 从所述数据项的所述多个编码表达中标识相应数据项的附加编码表达; 将所述相应数据项的所述附 加编码表达的至少第一部分存储为所述第一存储组的一部分;以及 将所述相应数据项的所述附加编码表达的至少第二部分存储为第二存储组的一部分。
【文档编号】G06F17/30GK103582883SQ201280014197
【公开日】2014年2月12日 申请日期:2012年2月22日 优先权日:2011年2月24日
【发明者】丹尼尔·E.·罗斯, 亚历山大·A.·斯特潘诺夫, 阿尼尔·拉梅什·冈格利, 帕拉姆吉特·S.·奥比罗, 瑞安·雅各布·恩斯特 申请人:A9.Com公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1