CN103582883B - 具有组格式的可变长度数据的改进型编码和解码 - Google Patents
具有组格式的可变长度数据的改进型编码和解码 Download PDFInfo
- Publication number
- CN103582883B CN103582883B CN201280014197.3A CN201280014197A CN103582883B CN 103582883 B CN103582883 B CN 103582883B CN 201280014197 A CN201280014197 A CN 201280014197A CN 103582883 B CN103582883 B CN 103582883B
- Authority
- CN
- China
- Prior art keywords
- data
- descriptor
- length
- byte
- variable
- 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.)
- Active
Links
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/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/176—Support for shared access to files; File sharing support
- G06F16/1767—Concurrency control, e.g. optimistic or pessimistic approaches
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/185—Hierarchical storage management [HSM] systems, e.g. file migration or policies thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1873—Versioning file systems, temporal file systems, e.g. file system supporting different historic versions of files
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/46—Conversion to or from run-length codes, i.e. by representing the number of consecutive digits, or groups of digits, of the same kind by a code word and a digit indicative of that kind
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明的实施例提供了用于将可变长度数据编码和解码的方法和系统,其可包括用于将搜索引擎收录列表进行编码和解码的方法。多个实施例可以包括不同的编码格式,这些不同的编码格式包括组一进制、封包一进制和/或封包二进制格式。一些实施例可以利用单指令多数据(SIMD)指令,单指令多数据(SIMD)指令可以作为解码过程的一部分对编码的数据执行并行整理操作。一些实施例可以采用查询表来确定解码过程中要采用的整理序列和/或掩码和/或移位。一些实施例可以采用混合格式。
Description
背景技术
典型的搜索引擎索引算法采用反向索引数据结构。这在概念上类似于书籍背后的索引,它是将例如,词汇列表的索引数据结构映射到其在文档(或文档集)中的位置的索引数据结构。在搜索引擎的应用环境中,文档通常是Web页面、电子邮件消息等。词汇在文档中出现可以称为收录,包括一个词汇的所有文档的列表可以称为收录列表。刚好与书籍索引条目列表页码一样,收录列表可以包括文档标识号(docID)。当搜索引擎接收查询时,它可以对收录列表查找查询中的每个词汇,并组合结果。为了高效地组合结果,可以按其docID的次序存储器这些收录。
期望将收录列表存储在尽可能小的空间中。使用相邻docID之间的差而非docID本身,收录能够包括更少的数量。从常用数据库到MIDI规范,有多种其他示例,其中可以更紧密地将数据编码,然后在较后的点处将其解码,其中常常基于需要数据的时间重复地进行解码。有多种为将数据存储在更少的空间中而开发的技术。但是,这些方法或许有缺点,包括速度限制或存储效率限制。
附图简介
将参考附图描述根据本发明披露的多种实施例,其中:
图1图示其中能够实施多种实施例的环境;
图2A图示能够根据一些实施例使用的拆分一进制编码格式;
图2B图示根据一些实施例的采用拆分一进制编码格式编码的数据的示例;
图3A图示能够根据一些实施例使用的封包一进制编码格式;
图3B图示根据一些实施例的采用封包一进制编码格式编码的数据的示例;
图4A图示能够根据一些实施例使用的封包二进制编码格式;
图4B图示根据一些实施例的采用封包二进制编码格式编码的数据的示例;
图5A图示能够根据一些实施例使用的组二进制编码格式;
图5B图示根据一些实施例的采用组二进制编码格式编码的数据的示例;
图6A图示能够根据一些实施例使用的组一进制编码格式;
图6B图示根据一些实施例的采用组一进制编码格式编码的数据的示例;
图6C图示能够根据一些实施例使用的组一进制编码格式;
图7A图示能够根据一些实施例使用的组一进制编码格式;
图7B图示根据一些实施例的采用组一进制编码格式编码的数据的示例;
图7C图示能够根据一些实施例使用的组一进制编码格式;
图8图示能够根据一些实施例使用的用于将搜索引擎收录列表的文档标识号编码的方法;
图9图示能够根据一些实施例使用的用于将可变长度数据编码的方法;
图10图示能够根据一些实施例使用的并行整理(parallel shuffle)操作;
图11图示能够根据一些实施例使用的并行整理(parallel shuffle)操作;
图12图示能够根据一些实施例使用的解码的方法;
图13图示如何构造能够根据一些实施例使用的整理序列;
图14图示能够根据一些实施例使用的用于将搜索引擎收录列表中的编码的文档标识号差解码的方法;
图15图示能够根据一些实施例使用的用于将可变长度数据解码的方法;
图16图示能够根据一些实施例使用的混合一进制序列编码格式;
图17图示根据一些实施例的采用混合一进制序列编码格式编码的数据的示例;
图18图示能够根据一些实施例使用的具有恒定长度描述符的块行程的混合编码格式;
图19图示根据一些实施例的采用具有恒定长度描述符的块行程的混合编码格式编码的数据的示例;
图20图示根据一些实施例的采用具有恒定长度描述符的块行程的混合编码格式编码的数据的示例;
图21图示根据一些实施例的采用具有恒定长度描述符的行程的混合编码格式编码的数据的示例;
图22图示根据一些实施例的采用具有可变长度描述符的行程的混合编码格式编码的数据的示例;以及
图23图示根据一些实施例的采用具有可变长度描述符的行程的混合编码格式编码的数据的示例。
具体实施方式
根据本发明披露的多种实施例的系统和方法可以克服用于将数据集编码和解码的常规方法中遇到的前文所述和其他缺点中的一个或多个缺点。具体来说,多种方法提供对包括整数序列,如搜索引擎收录列表中遇到的那些整数序列的数据集进行改进的编码和/或解码。
提供一些方法、系统和/或装置,其用于采用根据多种实施例的并行整理操作将搜索引擎中的编码的文档标识号差解码。在一个实施例中,将编码的文档标识号差解码包括读一个或多个描述符。每个描述符包括有关一组编码的标识号差的尺寸信息。在一些实施例中,采用组一进制格式将编码的文档标识号差编码。读表示该组编码的文档标识号差的多个数据。将该组编码的文档标识号差与一个或多个描述符链接。标识查询表中的与一个或多个描述符链接的一个或多个整理序列。使用所标识的整理序列对表示该组编码的文档标识号差的多个数据执行一个或多个并行整理操作。一个或多个并行整理操作包括将一个或多个零序列插入到多个数据中。从表示该组编码的文档标识号差的整理的多个数据中确定多个解码的文档标识号差。
根据多种实施例提供用于将可变长度数据解码的方法、系统和/或装置。在一些实施例中,将可变长度数据解码包括读一个或多个数据块。每个数据块表示多个编码的可变长度数据。读与一个或多个数据块链接的一个或多个描述符。从查询表标识与一个或多个描述符链接的一个或多个整理序列。使用所标识的整理序列对该一个或多个数据块执行一个或多个整理操作。由整理的一个或多个数据块确定多个解码的可变长度数据。
在一些实施例中,执行一个或多个整理操作包括将一个或多个零序列插入到整理的一个或多个数据块以标准格式,如整数的32位表示来表示该一个或多个数据块的一个或多个部分。该一个或多个数据块可以表示以可变长度表达编码的多个整数。在一些实施例中,该一个或多个数据块可以表示以可变长度表达编码的其它数据。
由整理的一个或多个数据块确定多个解码的可变长度数据还可以包括,从整理的一个或多个数据块确定部分结果。可以从另一个数据块确定与该部分结构关联的其余部分。此类实施例可以采用完整块变体,如上文论述。在一些情况中,一个或多个整理操作可以包括来自单指令多数据(SIMD)处理器指令集的一个或多个并行整理指令。
一些实施例可以包括标识与一个或多个描述符链接的一个或多个偏移量。与一个或多个描述符链接的一个或多个偏移量可以包括具有固定尺寸的输入偏移量,在一些情况中,与一个或多个描述符链接的一个或多个偏移量可以包括具有可变尺寸的输出偏移量。该固定尺寸可以取决于一个或多个数据块和一个或多个描述符中包括的字节的数量。与一个或多个描述符链接的一个或多个偏移量可以包括具有可变尺寸的输入偏移量。该可变尺寸可以取决于数据块表示的数据的数量。一些实施例还可以包括标识输出偏移量。
本文描述的计数包括若干可变长度编码格式以及可以允许使用非常快速的解码方法的解码方法和系统。在一些情况中,这些格式还可以允许更大的数据压缩。虽然一些实施例可能是针对搜索引擎收录列表来采用的,但是本文描述的技术可以用在其中紧密地存储数字列表或其他数据集以及高效地将其解码是有益的的其他场合中,如采用数据库的情况中。
多个实施例可以提供多种优点,包括但不限于避免了可能与使用深流水线的一些处理器中的深流水线的效益相干扰的分支。多个实施例可以比常规可变长度编码和解码中的情况更频繁地读和写数据,包括在一些情况中读未对齐的数据(而非在对象尺寸边界上),而非判断需要读多少。一些实施例可以采用将可能解码的选项预先编译并将该信息存储在一个或多个表中。一些实施例可以使用单指令多数据(SIMD)指令并行地对多个字节操作。一些实施例可以采用SIMD指令,如类似封包整理字节(PSHUFB)的整理指令。一些实施例可以采用包括有关数据的长度信息的描述符位和/或描述符字节。
提供用于更高效地将标准格式解码的方法。该格式可以称为varint-SU:它包括可变长度整数编码(varint),其具有所编码的整数的长度的拆分(S)一进制(U)表示。该方法可以采用并行处理来用于将此格式解码,其具有即使无法按自然机器次序存储压缩的字节仍有效的变化。多个实施例可以一次对编码的数据的一组字节操作。在一个实施例中,一次操作8个字节的块。该方法可以包括并行地提取或收集描述符位,这些描述符位可以是连续位和终止位。在一些实施例中,此提取或收集过程使用封包移动掩码字节(PMOVMSKB)指令。该方法可以使用提取的位作为预先计算的整理序列的表中的偏移量。如PSHUFB的并行排列指令可以使用此整理序列来确定如何将该数据解码。可以执行一系列的位移位操作以从解码的数据中移除初始连续和/或终止位。
在一些实施例中,提供编码格式连同解码方法,其涉及封包一进制(PU)表示。此格式可以称为varint-PU。在一些情况中,这可以包括将连续位和/或终止位移入能够在第一个字节发现的单个描述符中。这样可以允许数据位被连续地存储在存储器中,这可以使得更高效地解码成为可能。
在一些实施例中,提供用于将作为块存储的一组编码的整数解码的方法。该格式可以包括组二进制(GB)表示,在一些实施例中可以称为varint-GB。在一些情况中,此方法可以采用如PSHUFB指令的整理指令以并行地将多组数据字节解码。整理序列从描述符类型的值指定的表中获取。
在一些实施例中,同时提供用于多组整数的编码格式和解码方法。在一些情况中,此格式可以包括可包括组一进制(GU)表示的格式。例如,对于一组8字节整数(潜在地不完整),该格式可以称为varint-G8IU,具有一进制长度编码。
本文给出另一个编码格式为varint G8CU,其表示具有一进制长度编码的一组8字节信息(每个完整)。Varint-G8CU一般是指编码期间整数或数据未刚好填入块中的剩余空间时的情况。在该情况下,可以将数据的第一部分存储在当前数据块中,以及可以将该数据的剩余部分转移存储在下一个块中。多个实施例可以包括解码方法,这些解码方法包括将块之间的进位纳入考虑的表。
在一些实施例中,提供可变长度编码格式的变体,其包括采用上述压缩方案的至少其中之一连同位向量来节省空间的混合。在一些实施例中,该可变长度编码格式可以包括组一进制格式。多个实施例可以包括检测要编码的即将到来的整数或数据的序列是否非常小,从而可以将这些整数或数据的多于一个整数或数据编码到一个字节中。可以将这些整数或数据作为位向量来存储。例如,第n位可以表示在位置基+n处的文档是否在收录列表中。特殊描述符值可以指示该组数据字节是否应该解释为使用可变长度整数格式之一还是解释为位向量。
在一些实施例中,提供可变长度编码格式的变体,其包括压缩方案和行程长度编码的混合以便节省空间。多个实施例可以通过存储行程的长度而非值本身来将一个行程的相似数据编码,如全部1的一个行程。
采用组格式之一的实施例可以容易地扩充到更大的组,并且这可以对可提供更宽并行性(例如,256位寄存器)的处理器提供附加的效率增益。
图1图示用于实施根据多种实施例的多个方面的环境100的示例。正如将认识到的,虽然出于解释的目的而使用了基于Web的环境,但是也可以在适合的情况下使用不同环境来实施多种实施例。电子客户端装置102包括可操作以通过适合的网络104发送和接收请求、消息或信息以及将信息送达回用户的装置的任何适合装置。此类客户端装置的示例包括个人计算机、蜂窝电话、手持消息传送装置、膝上型计算机、机顶盒、个人数字助理、电子书阅读器等。该网络可以包括任何适合的网络,包括内联网、因特网、蜂窝网络、局域网或任何其他此类网络或其组合。用于此类系统的组件可以至少部分地根据所选的网络和/或环境的类型而定。用于经由此类网络通信的协议和组件是众所周知的,并且在本文将不予以详细论述。通过网络的通信可以通过有线或无线连接及其组合来实现。在此示例中,该网络包括因特网,因为环境包括用于接收请求并对此响应提供内容的Web服务器106,虽然对于其他网络,可以如本领域技术人员所显见的,使用提供类似目的备选装置。一些实施例可以采用单个电子客户端装置102。
该说明性环境包括至少一个应用服务器108和多个资源、服务器、主机、实例、路由器、交换机、数据存储和/或给予本文中将称为数据面110定义的其他此类组件,当然应该理解此数据面的资源不限于存储数据和提供对数据的访问。应该理解,可以有若干个应用服务器、层或其他元件、过程或组件,它们可以链接或以其他方式配置,并且可以交互来执行如从适合的数据存储获取数据的任务。正如本文所使用的,术语“数据存储”是指能够存储、访问和检索数据的任何装置或装置的组合,其可以包括任何标准、分布式或集群式环境中的任何组合和数量的数据服务器、数据库、数据存储装置和数据存储介质。该应用服务器可以包括用于按执行客户端装置的一个或多个应用的多个方面所需而与数据存储集成、处理应用的数据访问和商业逻辑的大部分的任何适合的硬件和软件。该应用服务器与数据存储协同来提供许可控制服务,以及能够生成如文本、图形、音频和/或视频的内容以传输给用户,在此示例中,可以通过Web服务器以HTML、XML或另一个适合的结构化语言的形式将这些内容提供给用户。在一些实施例中,Web服务器106、应用服务器108和类似组件视为数据面的一部分。处理所有请求和响应以及在客户端装置102和应用服务器108之间的内容交付可以由Web服务器来处理。应该理解,Web和应用服务器并非必需的而仅仅是示范组件,因为结构化代码可以在任何适合的装置或主机机器上执行,正如本文其他地方所论述的。
数据面的数据存储110可以包括用于存储与特定方面相关的数据的若干分开的数据表、数据库或其他数据存储机构和介质。例如,图示的数据面包括用于存储生产数据112和用户信息116的机构,其可以用于为生产端提供内容。该数据面还示出为包括用于存储日志数据114的机构,日志数据114可以用于如报告和分析之类的目的。应该理解,可以有可能需要存储在数据存储中的许多其他方面,如用于页图像信息和访问权信息的方面,可以根据情况将其存储在任何上文列出的机构中或存储在数据面110中的附加机构中。数据面110可通过与之关联的逻辑操作以从应用服务器108接收指令,并对此响应以获取、更新或以其他方式处理数据、指令或其他此类信息。在一个示例中,用户可以提交针对某种类型的项目的搜索请求。在此情况中,数据面的组件可以访问用户信息以验证用户的身份,并且可以访问目录细节信息以获取与该类型的项目有关的信息。然后可以将该信息返回给用户,如在用户能够通过用户装置102上的浏览器查看的Web页面上列示的结果。可以在浏览器的专用页面或窗口查看所关注的特定项目的信息。
每个服务器通常将包括操作系统,操作系统提供该服务器的常见管理和操作的可执行程序指令,并且通常将包括计算机可读介质,计算机可读介质存储在被服务器的处理器执行时使服务器能够执行其需要的功能的指令。服务器的操作系统和常见功能性的适合实现是众所周知的或可通过商业渠道获取的,并且尤其根据本文公开,被本领域技术人员容易地实现。
一个实施例中的环境是分布式计算环境,其采用若干个计算机系统和组件,这些计算机系统和组件使用一个或多个计算机网络或直接连接经由通信链路互连。但是,本领域技术人员将认识到,此类系统在具有比图1所示更少或更多数量的组件的系统中同样能够很好地工作。因此,图1中的系统100的图示应该被视为本质上是说明性的,而非对本发明披露范围的限制。
如图1所示的环境对于如多种内容提供商或其他此类实体可以是有益的,其中可以使用多个主机和多种类型的资源来执行如提供内容、认证用户、分配资源的任务,或执行任何多种其他此类任务。这些主机的其中一些可以配置成提供相同的功能性,而另一些服务器可以配置成执行至少一些不同的功能。
多种实施例提供多种可变长度编码的方法。一些实施例可以包括面向字节的编码。面向字节的编码包括如下属性。自然二进制表示的所有有效位均被保留。每个字节包含仅来自一个整数或数据的位。编码的单个字节内的数据位保留它们在原始数据或整数中所具有的排序。来自单个整数或数据的所有位优先于来自下一个整数或下一个数据的所有位。
编码的面向字节的格式可以因维数变化而有所不同。例如,可以采用二进制或一进制来表示数据或整数的长度。在一些情况中,可以将表示数据或整数的位与对应整数或数据的数据位相邻来存储,以使一些数据字节兼有地包含数据和长度信息。在一些情况中,可以将表示若干整数或数据的长度的位一起分组在与包含数据位的字节不同的一个或多个字节中。
在一些实施例中,可以将一进制或二进制表示或格式的位连续地封包或分组。还可以将一进制表示的位拆分到编码的整数或数据的多个字节上。在一些情况中,可以将二进制表示拆分到编码的整数或数据的多个字节上。在一些实施例中,用于表示一个或多个编码的整数或数据的长度的位集称为描述符,因为它可以描述数据位是如何组织的。可以将描述符设为与数据位相连。在一些情况中,可以将描述符设为不与数据位相连。
在一些实施例中,每个编码的整数或数据可以包括至少一个字节。二进制和一进制描述符都可以通过记录值n-1来表示整数或数据的长度n。这减少了表示给定长度所需的位的数量。作为备选,整数或数据的长度可以包括将长度存储为n,这可以允许长度零来表示零数据字节的任意常数。
可以采用上文论述的多个方面来提供对不同面向字节的编码格式的描述。这些方面可以用于将能够以四个字节或更少字节编码的整数编码。但是,一些情况一般可以扩充到覆盖编码数据。而且,这些编码原理还可以用于例如数据和/或整数可能包括多于四个字节的情况。
下文描述用于不同可变长度编码的若干不同实施例。在本发明披露的范围内可以构造另外的实施例。一般,多个实施例可以包括可具有不同长度的编码的值。可以将这些长度编码在一个或多个描述符中。可以采用两个属性来描述不同编码类型的描述符。第一个描述符属性可以包括安排描述。描述符的安排描述可以称为拆分、封包或组。如上文提到的,拆分描述符可以包括将提供长度信息的描述符的位分布在也包括有关一个或多个整数或数据的信息的若干字节之间。封包描述符可以指封包在一起的描述符位。在一些实施例中,封包描述符可以优先于相应的整数或数据的编码。组描述符可以包括将若干整数或数据的描述符分组在一起。
第二描述符属性可以包括长度编码描述。一些长度编码描述可以是一进制的,采用个别位,而一些长度编码描述是二进制的,采用两个位。基于所关注的编码的整数或数据的长度,一些实施例可以采用更多的位。
这些格式的其中一些有可在不同实施例中发现的多种变体。可以按小端或大端顺序存储编码的数据的字节,这是本领域中公知的技术。可以将描述符位存储在最小有效(LS)或最高有效位(MSB)中。虽然这些选择有时描述为任意约定,在实践中,可能存在一些效率上的考虑,以产生对于某些机器体系结构具有吸引力的某些变体的效率考虑。例如,在拆分一进制表示(如下文论述的),在最高有效位中将终止表示为0可以允许一个字节整数的常见情况能够不采用任何移位或掩码而进行解码。在其他示例中,对于封包表示,使用最小有效位来获益于非对齐加载从而将数据位保持在一起是有益的,。虽然在表示保留原有的字节排序时,传统解码方法可以更有效率地运行,但是,本文披露的SIMD方法的性能可以不依赖于排序。下文示例一般将包括小端顺序,但是,可以根据本文所描述的来调适大端顺序。例如,采用封包编码(如下文论述),可以将描述符存储在最小有效位并移位以获得具有最小端机器的数据。对于大端机器,可以将用于封包编码的描述符存储在最高有效位和掩码中以获取数据。此外,在一些实施例中可以扫描描述符中的1和0的读数。
一些实施例可以对描述符采用一进制表示。对于一进制格式,可以采用自然约定,其中可以通过连续1位的数量来表示数量(其可以称为连续位),后接终止0(称为终止位)。一些实施例可以反向使用此约定,使用连续0位,后接终止1。在一个实施例中,采用自然约定以及从最低有效位开始,例如位0111可以表示数字3。
在一些实施例中,拆分一进制格式可以视为表示在连续和/或终止位的序列中编码的整数或数据的长度。描述符位可以视为分布式连续位,其中每个字节中的位可以表征连续或终止。例如,三个字节整数编码可以看上去如下:
1xxxxxxx
1xxxxxxx
0xxxxxxx
注意,前导位可以形成一进制数2,表示长度3。在一些实施例中,这可以称为Varint-SU,因为它是具有拆分在若干字节上且以一进制表示的长度信息的整数的可变长度表达。在一些实施例中,拆分一进制表示可以使用最高有效位作为连续或终止位。这可以使实施例对于终止字节的情况能够避免移位。对于编译器来说,这还可以允许使用符号校验以测试该位。但是,一些实施例可以将字节的最低有效位用于连续位或终止位。
图2A提供8位组成的字节的拆分一进制表示的实施例示例,其中描述符位210设在最高有效位(MSB)以及七个数据位220设在字节的其余位中。图2B提供可以使用拆分一进制表示来表示整数123456的示例,其中如果表示接续下一个字节,每个字节在每个字节中MSB或其余最左位(例如211和212)中包括1,以及如果达到整数的结尾,则在213中包括0。
一些实施例可以包括描述符的封包一进制表示。在一些实施例中,这可以称为Varint-PU,并且可以与varint-SU相似,但是其中将描述符位封包在一起。封包位可以收集在第一个字节的低阶位中而非拆分在所有字节上。选择低阶位来保存描述符对于小端编码或小端体系结构是适合的,这是本领域中公知的,从而一个整数的所有数据位均是连续的。出于相同的原因,在大端体系结构上,将描述符置于高阶位并使用大端编码对于解码可能更有效率。图3A提供封包一进制表示的实施例的一个示例,其中n个描述符位一起被封包在最低有效(LS)位310中,其中将7n个数据位封包在最高有效位320中。这提供小端体系结构的示例。对于大端体系结构,描述符位可以被置于最高有效位中。表330提供如何采用n个描述符位来表示数据位中的字节的数量的四个示例。图3B示出数字123456的封包一进制表示的示例,其中前3个低阶位011 311表示该数字涉及3个字节321的信息。
多个实施例还可以包括组一进制表示,下文对此予以更详细论述。
多个实施例可以采用描述符的封包二进制表示。例如,可以保留第一个字节的两个位来指示以二进制编码的整数或数据的长度。图4A提供其中采用两个描述符位410连同多达30个数据位420的实施例示例。表430提供如何采用两个描述符位410来表示数据位中的数量的四个示例。一些实施例可以采用更多或更少的数据位。图4B提供可以如何采用封包二进制表示来将123456编码的一个示例。要表示123456涉及17个数据位,这多于16位(即,两个字节)和少于25位(即,3个字节)。因此,两个描述符位411表示对这些数据位提供三个字节421。在此情况中,描述符位411将3个字节的长度表示为10。
其他实施例可以采用其他表示。例如,在一些情况中,可以采用拆分二进制表示,其中可以将二进制描述符位拆分到若干字节上以用于给定的整数或数据表示。一些实施例可以包括组二进制表示,下文对此予以更详细论述。
在描述符长度可预先固定的情况中,一些实施例可以采用二进制长度描述符。虽然本文描述的实施例一般涉及以固定长度示出的二进制格式,但是一些实施例可以采用附加的元数据来存储描述符长度本身。此外,一些实施例可以包括拆分固定长度的k位二进制描述符(每个字节一个位),这可以得到可能需要至少k个字节的面向字节的整数编码。
一些编码格式可以将若干整数或数据分组在一起。这可以提供采用SIMD并行性的机会。一些实施例可以包括满足保留字节的面向字节的编码属性的编码,其中包含原(未编码的)整数或数据中的有效位的每个字节不修改地出现在编码的形式中。
采用组编码的实施例可以包括从数据字节中分离出描述符字节。在一些实施例中,组格式中将描述符字节与数据字节分离可以能够实施更有效率的解码。这种分离能够通过表的使用来简化解码过程。但是,封包和拆分表示也可以从表的使用获益,正如下文更详细描述的。在一些实施例中,组格式可以避免按位操作,这在另一方面对于消除散布的描述符位可能是必要的。具体来说,采用字节保留编码的实施例可能尤其更易于采用SIMD技术解码,下文对此予以更详细的描述。
图5A图示组二进制格式字节排序的示例。在图5A的示例中,字节排序包括一组四个整数(520-a、520-b、520-c和520-d),包含四个2位二进制数的描述符字节510位于该组之前。每个2位二进制数表示对应的整数的长度(例如,从右向左读,第一个2位数表示整数0520-a,接下来的2位数表示整数1 520-b并以此类推)。图5A所示的此格式一般可以称为varint-GB格式。
图5B示出可以使用组二进制格式以小端字节顺序表示四个十六进制数0xAAAA521-a、0xBBBBBB 521-b、0xCC 521-c、0xDDDDDDDD 521-d。四个整数对应地占据2个字节、3个字节、1个字节和4个字节。描述符字节511由2位二进制值n-1表示每个字节的长度n。使用此示例,图5B所示的描述符字节511分别包括值01、10、00和11(从右向左读)。01表示整数0xAAAA 521-a的2字节长度;10表示整数0xBBBBBB 521-b的3字节长度;00表示整数0xCC521-c的1字节长度;11表示整数0xDDDDDDDD 521-d的4字节长度。为了在描述符位和数据字节之间保持一致性的顺序,一些实施例可以将第一个二进制长度存储在最低有效位中。由此,图5B所示的四个整数的描述符字节511表示为11001001。字节地址从右到左增加,从而与增加的位有效性的顺序匹配。描述符中成对的位的顺序与整数的顺序匹配。
组二进制格式的一些实施例包括固定数量的整数占用可变数量的字节,以二进制存储其长度。相比之下,组一进制格式的一些实施例包括固定数量的字节将可变数量的整数编码,以一进制存储其长度。例如,在一个实施例中,称为varint-GU,可以将8个数据字节连同包含每个编码的整数的长度的一进制表示的一个描述符字节分组在一起。8个数据字节的每一个字节可以编码少则两个整数以及多则八个整数,具体视其尺寸而定。描述符中零的数量指示该组中编码的整数的数量。图6A中示出组一进制格式的实施例。在此实施例中,8的块尺寸620可能是可使用描述符字节610的每个位的最小尺寸;对于一些实施例,大于8的倍数是可能的。图6B提供使用组一进制格式将四个整数编码的示例。在此示例中,使用与图5B所示的组二进制格式所示相同的四个整数0xAAAA、0xBBBBBB、0xCC和0xDDDDDDDD来图示组一进制格式。将这些值编码将包括10个字节,但是块中仅有8个字节。前三个整数0xAAAA 621-a、0xBBBBBB 621-b和0xCC 621-c嵌入块中,使用6个字节,留下2个字节的填充位630。最后的整数0xDDDDDDDD留到下一个块(未示出)。描述符611包含三个一进制值01(表示0xAAAA 621-a的2字节长度),011(表示0xBBBBBB 621-b的3字节长度),以及0(表示0xCC621-c的1字节长度),连同两个填充位11(表示填充630的2个字节)。它们以与整数相同的顺序安排,从而赋予描述符二进制值11001101。
图6C提供可以将最多16个数据字节编码的组一进制格式的示例。在实施例中,采用两个描述符字节(分别为612-a和612-b),其中第一描述符字节612-a描述最多8个数据字节的第一块622-a以及第二描述符字节612-b描述最多8个数据字节的第二块622-b。组一进制格式的其他实施例可以将甚至更多数据字节编码,仅作为示例,如24或32个数据字节,其中对8个数据字节的每个附加组提供附加的描述符字节。虽然此示例示出与数据字节连续的描述符字节,但是一些实施例可以包括不与数据字节连续的描述符字节。
因为在一些实施例中可以表示整数的并非每组编码的字节都可以均匀地嵌入到8个字节块中,所以一些实施例可以提供该编码的变体。在一些情况中,它们可以称为不完整或完整的。
在不完整的块变体(在一些实施例中可以称为varint-G8IU)中,多个实施例可以存储尽可能吻合地存储在8个字节中,如果需要的话,将数据块保留为不完整的。在论述的实施例中,8是指数据块中的字节的数量。上文结合图6B论述了不完整块变体的实施例。剩余空间可以填充以零,但是在解码时可以被忽略。当没有另外的整数要解码时,描述符的最后(最高有效)位可以是1位的非终止序列。一些实施例可以包括此编码格式的变体,其使用可变尺寸数据块且避免填充位。
在采用完整块变体的实施例(在一个实施例中可以称为varint-G8CU)中,可以填满数据块中的所有字节。例如,在varint-G8CU实施例中,填满数据块中的所有八个字节。与先前一样,描述符中零位的数量指示所编码的完整整数的数量。在整数超过当前块的剩余空间的情况下,将吻合嵌入数量的整数置于当前块中。该整数的剩余字节转移到下一个数据块。相似地,将对应的描述符位转移到下一个块的描述符字节。图7A提供具有完整块的组一进制格式的示例,其具有8个数据字节r 720和描述符字节710;这与图6A相似。图7B示出如何将字节转移到下一个数据块。同样地,出于举例的目的,图7B示出与若干其他示例中所使用相同的四个整数0xAAAA、0xBBBBBB、0xCC和0xDDDDDDDD。前三个整数721和对应的描述符位711完全如varint-G8IU中那样来存储。但是,varint-G8CU可以不同方式处理第四个整数。将其前两个字节722置于第一数据块,完全填满它,并且剩余两个字节723进入后续块。与后两个字节712对应的两个描述符位进入下一个块的描述符字节。虽然跨两个描述符字节分布,但是此第四个整数的描述符位的一进制值仍表示所编码的整数的长度-1。
图7C提供可以采用两个描述符字节713后接16个数据字节724的组一进制格式的示例。此实施例可以采用如128位寄存器来实施。
图8提供根据多种实施例的计算机实施的方法800,用于将搜索引擎收录列表的文档标识号编码。方法800可以在例如图1的环境100中所见的环境和装置中实施。方法800还可以包括和/或采用结合图6A-C和/或图7A-C论述的组格式的多个方面。在采用可执行指令配置的一个或多个计算机系统的控制下,方法800包括确定用于数据存储的块的尺寸802。接收搜索引擎收录列表的多个文档标识号804。确定相邻文档标识号之间的差806。确定每个文档标识号差的编码表达808。文档标识号差的编码表达使用可变长度表达。标识文档标识号差的连续多个编码表达810。连续子集的每个文档标识号差的编码表达的相应尺寸之和小于或等于为进行数据存储确定的块尺寸。生成一个或多个描述符812。这些描述符提供有关该连续的文档标识号差的编码表达中文档标识号差的编码表达的数量以及相应文档标识号差的每个相应编码表达的尺寸的信息。这些描述符可以采用每个相应尺寸的一进制表示来表示文档标识号差的每个相应编码表达的尺寸。存储一个或多个描述符和文档标识号差的连续的编码表达814。将文档标识号差的连续的编码表达作为组来存储,并且将一个或多个描述符与该组文档标识号差的编码表达连续地来存储。
图9提供根据多种实施例的计算机实施的方法900,使用可变长度表达将数据编码。方法900可以在例如图1的环境100中所见的环境和装置中实施。方法800还可以包括和/或采用结合图6A-C、图7A-C和/或图8的方法800论述的组格式的多个方面。在采用可执行指令配置的一个或多个计算机系统的控制下,方法900包括为进行数据存储确定块尺寸902。标识多个数据项904。在一些情况中,这些数据项是增量间隙(delta-gap)。确定每个数据项的编码表达906。数据项的编码表达使用可变长度表达。标识数据项的多个编码表达的第一子集908。来自数据项的多个编码表达的第一子集中的数据项的编码表达的相应尺寸之和小于或等于所确定的用于数据存储的块的尺寸。生成第一描述符910。第一描述符表示第一子集的数据项的编码表达的相应尺寸。将数据项的多个编码表达的第一子集作为第一存储组来存储912。还存储第一描述符914。
在一些实施例中,第一描述符与第一存储组连续地来存储,而在其他情况中,可以将该描述符与第一存储组不连续地来存储。描述符以一进制格式表示每个数据项的每个相应编码表达的尺寸。一进制格式可以包括将每个数据项的每个编码表达的相应尺寸表示为一进制尺寸减去一,同时通过零将每个相应长度的表示分隔。在一些情况中,可以将填充信息插入到第一描述符中,表示第一子集与所确定的数据块尺寸之间的尺寸之差。此情况可以是在数据项的多个编码表达小于所确定的用于数据存储的块的尺寸时。
在一些实施例中,可以从数据项的多个编码表达中标识相应数据项的附加编码表达。可以将相应数据项的附加编码表达的至少第一部分作为第一存储组的部分来存储。可以将相应数据项的附加编码表达的至少第二部分作为第二存储组的部分来存储。在这些情况中可以生成第二描述符。第二描述符可以将相应数据项的附加编码表达的至少第二部分的尺寸部分地作为第二存储组的部分来存储。
多个实施例可以包括若干不同的解码方法,可以采用这些解码方法来将上文论述的一种或多种编码格式解码。这些解码方法还可以用于本发明披露中可能不一定论述的其他编码格式。一些实施例可以采用单指令多数据(SIMD)指令。多个实施例可以采用此类指令并行地对不同编码的格式所遇到的多个字节执行动作。
一些实施例可以采用可用于不同平台的SIMD指令,这些平台包括但不限于Intel和AMD在处理器中实施以及在许多数据中心大量使用的64体系结构。在64体系结构中,随着时间推移已经添加了一系列SIMD增强。在SIMD能力中,有16字节XMM向量寄存器和用于对它们操作的并行指令。一些实施例可以采用其他格式的SIMD指令提供与64体系结构类似或不同的能力。
一些实施例可以采用整理指令。仅作为示例,在一些实施例中,可以采用2006年随SSSE3引入的PSHUFB指令。它在XMM寄存器中执行字节的排列(“整理”),从而允许将零插入在指定的位置中。PSHUFB具有两个运算数,包含数据的位置和包含整理序列的寄存器。如果保留数据运算数的原值,则可以将PSHUFB视为根据整理序列(shf)将字节的源序列(src)转换成目的地序列(dst)。下文提供可提供PSHUFB所见的整理序列的一个伪代码示例。
仅作为示例,整理序列中的第i个值指示哪个源字节要置于第i个目的地字节中。在一些实施例中,如果整理序列中的第i个值为负,则将零置于对应的目的地字节中。
一些实施例可以采用PSHUFB指令以外的其他SIMD整理指令。例如,出于说明下文论述的解码方法的目的,来自PowerPC处理器的AltiVec/VMX指令集的VPERM可以提供类似的功能性。此外,其他平台的其他整理指令可以提供多个功能,以及可以在不同的实施例中进行采用。
图10中图示的示例示出可以如何使用PSHUFB来采用索引序列i 1010、整理序列shf 1020、源序列src 1030和目的地序列dst 1040立即将四个32位整数的字节顺序反转。
如上文论述的一些实施例可以包括字节保留格式,其对于所关注的一个或多个整数或数据移除了前导零字节同时保持有效字节不变。解码则可以包括在右边位置中再次插入零字节。一些实施例可以采用通过在序列{0,1,2,3,...}中插入-1构造的整理序列。一些实施例可以采用-1以外的值在整数序列中插入。采用此序列,在插入丢失的零的同时,如PSHUFB的整理指令可以占用有效数据字节。
图11中示出使用如PSHUFB的整理指令来将上文论述的编码的格式之一解码的示例。在此示例中,编码的格式是称为varint-G8IU的组一进制格式。这是图6B中表示的相同数据。图11示出整理序列shf 1120、索引序列i 1110、编码的格式的源序列src 1130和解码的数据的目的地序列dst 1140。例如,索引0处的整理序列的最右边字节(即,具有最低地址的字节)0占用第0个源字节,并将其置于第0个目的地字节中。一般,第i个整理序列项指令要从哪个项位置提取源并将其置于第i个目的地位置。又如,图11示出对于i=4,整理序列解释为将索引2处的源置于具有索引4的目的地处。此外,当整理序列具有-1(在其他实施例中可能以不同的方式表示)时,在该索引处将零值置于目的地中。例如,在索引i=3处,整理序列具有-1,在此情况中,将零置于索引i=3的目的地处。在此特定示例中,将3个整数解码,从而得到如附图提到的3的输出偏移量。
对于给定的格式,可以为特定数据块及其对应的描述符字节预先计算正确的整理序列。对于描述符的可能值(以及有时为附加状态),可以构建任何整理序列的表,在解码时可能需要。
在一些实施例中,该表项还包含预先计算的偏移量。对于组二进制格式,如varint-GB格式,偏移量可以指示耗用多少个字节才将4个整数解码;例如,它可以输出16个字节。其他实施例可以输出更多或更少的字节,并且在一些情况中可以包括更多或更少的整数。对于组一进制格式,如varint-GU格式,偏移量可以指示将多少个整数解码;例如,它可以耗用8个字节。其他实施例可以耗用更多字节(如果采用的话)。
在一些实施例中表构造仅进行一次,而表查询可以在每次将组解码时进行。
给定这些表可用的情况下,可以如下文描述解码的通用方法:
1.读一块数据及其对应的描述符;
2.从表中查询适合的整理序列和/或偏移量;
3.执行整理;
4.写结果;
5.前移输入和输出指针。
图12提供根据一些实施例的一些解码方法的框图。在框1202处,读数据以及与该数据对应的一个或多个描述符。在框1204处,从可以预先计算的表标识与描述符关联的一个或多个整理序列。在框1206处,使用该整理序列对数据执行整理操作。此操作可以并行地执行。在框1208处,从整理的数据写解码的结果。在一些实施例中,将返回有关读了多少数据的信息。
下文提供对若干不同格式的上述步骤的不同实施,虽然其他实施例可以对其他格式采用这些步骤中更多或更少的步骤。
多个实施例允许利用非常少的指令同时将若干整数或数据解码。一些实施例可以不要求条件语句,并由此避免因分支误预测导致的性能罚分。可以将逻辑复杂性从代码转移到表。多个实施例可以包括固定量的读和写,然后依赖于表来确定实际已处理了多少输入数据或输出数据。这可要求输入和输出缓存器具有至少可用于读或写的此量。
在一些实施例中,在任何固定边界上不对齐数据块。一些实施例可以根据CPU高效地执行非对齐的读和写的能力。
一些实施例可以采用并行解码,在一些情况中,可以使用如下文的伪代码来描述:
因为此方法构成解码过程的内循环,所以多个实施例可以内嵌实施以避免函数调用的开销。如上文伪代码中所示,多个实施例可以取三个输入:
·src–指向编码的值的输入字节流的指针;
·dst–在varint-GB和varint-G8IU的情况中,指向整数的输出流的指针;在varint-G8CU的情况中,dst可以是指向字节的输出流的指针,因为将varint-G8CU的块解码可以促成写解码的整数的部分;以及
·state–辅助状态,可以用于varint-G8CU以指示所写的最后一个整数的字节的数量对4取模。
多个实施例可以从输入流读编码的值,将解码的整数或数据输出到输出流,并作为其结果返回src、dst的新位置和更新的状态。
一些实施例可以读16字节,这是一些寄存器(如PSHUFB操作使用的XMM寄存器)的尺寸。但是,还可以读更多的字节;例如,一些寄存器可以具有更小或更大的尺寸,仅作为示例,如8字节或32字节。与单字节描述符对应的字节的数量对于一进制格式可以是8,以及对于二进制格式可以是最多16。
多个实施例可以对于每种格式采用不同的表。例如,表对于varint-GB和varint-G8IU格式可以具有256个项,对于每个描述符值可以具有一个项。对于varint-G8CU格式,表可以具有4×256=1024个项,因为它们对于每个描述符和状态对可以是一个项,并且状态是整数i,其中0=i<4。
一些实施例可以采用如shuffleAndWrite操作的操作,其结合提供的整理序列使用PSHUFB操作以通过将零插入到正确位置中来扩充16个字节数据,然后将其结果写到目的地。其他实施例可以相似地采用整理序列连同并行整理操作以通过将零插入到正确位置并写结果来扩充一系列数据字节。
在varint-GB的情况中,整理序列可以是描述单个PSHUFB操作的16字节序列。单个PSHUFB就可足够,因为该组包含四个编码的整数,并且因此输出可能不超过16个字节。
在一些实施例中,为了将组一进制格式解码,整理序列可以是指定两个PSHUFB操作的32字节序列。第二个PSHUFB对于一进制格式可能是必需的,因为8字节数据块可以将最多8个整数编码,这能够扩充到32个字节。第一个PSHUFB的输出可以写到dst处开始的位置,以及第二个PSHUFB的输出可以写到dst+16处开始的位置。为了避免条件语句,可以执行第二整理,即使是在输出未超过16个字节时。因为PSHUFB将寄存器重新安排就位,所以在第二PSHUFB之前可以利用原数据重新加载对应的寄存器。一些实施例可以仅包括单个整理操作。一些实施例可以采用一次整理而非两次整理。
对于一些一进制格式,在上文伪代码中递增src的输入偏移量可以是8的字节。对于varint-G8IU,以解码的整数为单位测量的输出偏移量可以在2和8之间变化,序列的最后一个块除外,最后一个块可以包含介于1与8之间的整数。对于varint-G8CU,将一个块解码可以促使写解码的整数的一部分,所以输出是字节流以及偏移量以字节单位来测量。输出介于8与32个字节之间,序列的最后一个块除外,最后一个块可以输出介于1与32个之间的字节。
在二进制格式的情况中,输出偏移量可以是恒定的4个整数。varint-GB格式的实施例可以具有辅助信息来处理长度不可被4整除的序列。这可以使用单独存储的长度信息或序列中可不出现零值的约定来实施,由此可以忽略终止零。输入偏移量可以在4与16个字节之间变化。对于这些编码实施例,输入偏移量还可以考虑描述符的额外的一个字节。可以预先计算可变偏移量,并将其存储在格式表中。
对于varint-G8CU格式,该表还可以包含指示最后一个整数中的字节数的新状态信息以用于将后续块解码。
对于每种编码的格式,可以预先构造解码表。可以在多种解码的方法中采用此类解码表,如上文描述的解码方法。每个表可以包括与每个可能的描述符值和状态值对应的表项。每个表项逻辑上包含四个内容:
·整理序列
·输入偏移量
·输出偏移量
·要用于后续块的状态值
对于这些格式的其中一些,这些值的其中一些在表中所有项上是常量的,所以无需显性地存储。
表构造过程可以取描述符字节值和状态值作为输入。它可以构建项的整理序列,并计算输入和输出偏移量和下一个状态。
一些实施例可以处理有效描述符值,这些有效描述符值实际可以由编码产生。对于varint-GB,所有可能的字节值均可以是有效的。对于组一进制格式,如果连续零位之间的距离不超过4,则描述符可以是有效的。
在一些实施例中,用于构造整理序列、偏移量值和下一个状态值的方法可以根据如下抽象函数而定:
·num(d)给出描述符值d描述的组中其编码已完成的整数的数量。对于varint-GB,这是4(最后一个块除外,最后一个块可以是1至4)。对于组一进制格式,此值可以是d中的0(终止)位的数量。
·len(d;i)给出组中第i个整数的长度,对于每个i,0=i<n。对于varint-GB,这可以是d中第i个个别位对确定的长度,或对于一进制格式,可以是d中的第i个一进制值。
·rem(d)给出组中最后一个编码的整数中字节的数量对4取模。对于varint-G8CU,这可能是需要的,其中它等于描述符中前导1的数量。对于其他格式,它可以是0。
一些实施例可以构造可利用来在序列{0,1,2,3,...}中插入-1(或至当前零块的其他可能数量)表示正在解码的源数据的一个块中的字节位置的整理序列。如PSHUFB指令的整理指令可以利用所得到的整理序列,以复制有效数据字节,同时插入丢失的前导零。下文伪代码提供可用于不同实施例来构造给定描述符值的整理序列的一个描述:
上文整理序列构造伪代码包括两个输入:
·desc:描述符值
·state:从前一组中最后一个整数中写入的字节的数量对4取模。对于varint-GB和varint-G8IU,state的值总是0,因为仅完整的整数以这些格式写入在给定数据块中。
第一循环在组中与给定描述符对应的每个完成的整数上迭代。对于组中每个完成的整数,内循环将整理序列设为将编码的字节从整理操作的源移动,插入-1以产生完成解码的整数所必须的前导零。这里,变量j在数据块中源数据位置上前移,同时变量k在整理序列中的位置上前移,整理序列中的位置对应于整理操作的目的地位置。
对于varint-G8CU,可能需要最后的循环。它将整理序列的其余部分设为从组中最后一个非完整的整数的源转移编码的字节。该循环对于其中rem(desc)是零的其他组格式无效。
多个实施例还可以计算输入偏移量。对于一进制格式,输入偏移量可以等于块数据字节的数量连同描述符字节的数量。例如,偏移量在有8个字节的数据块和1个描述符字节的情况中为9。对于组二进制格式,如varint-GB格式,可以将给定描述符d的输入偏移量描述为:
这是组中的整数长度加描述符字节的1之和。
varint-GB和varint-G8IU的输出偏移量可以等于num(d)整数,其中对于varint-GB,i可以是4。varint-G8CU的输出偏移量可以表示为:
4·num(d)–state+rem(d)。
后续块的状态值对于varint-GB和varint-G8IU可以是0,以及对于和varint-G8CU可以是rem(d)。
一些实施例可以采用上文描述的方法的特定实施。例如,下文描述提供用于将上文论述的特定格式的其中一些解码的若干特定方法。
在一些实施例中,为了将varint-GB中的一组整数(在一些实施例中可以是4个)解码,可以在描述符指示的表中查询长度和整理序列项,可以将整理序列应用于输入数据,并且可以按表中发现的长度将输入前移。输出可以按4个整数的长度(即,16个字节)前移。这可以在下文的伪代码中示出。此方法可以应用于以及适于其他组二进制格式和一些其他格式,如拆分一进制格式。
可以通过不同的方式构造可以与上文解码结合采用的长度表和整理序列。在一些实施例中,该表具有对应于描述符字节的每个可能值的项。在描述符字节的所有可能值上迭代,可以为给定描述符字节值构造表项。表中存储的长度可以是描述符字节中每对位描述的长度加上前移通过描述符字节本身的一之和。整理序列可以构建为将来自源的字节映射到目的地,但是可以填充-1以便以最多四个字节的前导零填满每个解码的整数。下文可以描述构造此类表的一种方式。此表构造方法应用于以及适于其他组二进制格式和一些其他格式,如拆分一进制格式。
将varint-G8IU解码可能在某种程度上比将varint-GB解码复杂。因为在单个块中可以将多如8个整数编码,所以它们的解码的形式可能占用多如32个字节。因为一些体系结构(如64 XMM向量寄存器)可能只有16个字节,所以可以执行两次整理来产生完整的32个字节的输出。一些实施例能够以仅一次整理操作来解码。不进行检查以查看是否需要第二次整理,一些实施例可以简单地每次执行两次整理,并确定要保持多少输出数据。下文伪代码提供有关以varint-G8IU格式将8个字节解码的此类方法的一个描述:
在将varint-G8IU的一个块之后,可以按8个字节前移输入,但是输出位置可以前移可变的量,具体取决于已解码的整数的数量。在一些实施例中,向量寄存器可以填充以16个字节的输入数据,虽然可以仅将8字节块解码。此方法可以应用于以及适于其他组一进制格式和一些其他格式,如拆分一进制格式。
在一个实施例中,图13示出为给定描述符构造具有位置1310的整理序列1320的操作。这是图6B中表示的相同数据。对此示例,描述符字节包含11001101,输出长度是3个4字节整数。因为仅产生12个字节输出,所以在此情况中无需第二整理的输出。可以为表构造长度和整理序列项,对应于描述符字节的每个可能值一个项。下文伪代码示出可以如何创建每个表项的一个示例。此方法可以将字节位置(从0到7)复制到整理序列,但是每次遇到描述符中的终止(零)位时,可以足够的-1填充整理序列以计算具有前导(最高有效)零字节的当前输出整数。
建为单个32字节的序列。
在一些实施例中,可以对所有可能字节值构造表项,但是并非所有字节值都可以对应于有效的可能描述符。虽然有效描述符不可有多于三个连续1位(长度上指示编码的整数4个字节),但是无效的描述符可以为了防止此条件语句,可以在上文的伪代码中采用“整数中剩余字节>0”测试。
涉及将varint-G8CU格式解码的多个实施例可以包括额外的复杂性。例如,可以部分地写入未完整地嵌入数据块中的整数,其剩余字节存储在连续的数据块中。为此原因,具有用于长度和整理序列的此格式表的多个实施例可以在不同数量的字节转移的情况中包含不同的数据。该表可以视为具有两个维度,一个由迄今写入部分解码的整数中的字节的数量来索引,以及另一个由描述符字节值来索引。此外,每个表项不仅可以包含整理序列和输出长度,而且可以包含部分输出字节计数的新值。一些实施例由此可以采用如下文伪代码描述的用于一个varint-G8CU块的解码方法。
varint-G8CU的表构造可以与varint-G8IU相似,但是该方法可以考虑到将前一个块解码时,部分编码的整数的字节的数量(称为部分输出计数)已经被写。这可以在下文的伪代码中示出,对于一些实施例,下文的伪代码可以用于为可用于将如varint-G8CU的一些格式解码的表构造整理序列。因为输出可能不再保证产生完整的32位整数,所以可能需要将输出位置按字节单位而非整数前移。如下伪代码中的长度计算可以反映此差异。
虽然上文提供根据多种实施例的解码方法和组格式的表构造方法的若干不同示例,但是还可以在本发明披露的范围内采用用于解码和表构造的其他方法。
再者,上文的解码和/或表构造方法还可以被其他实施例采用,这些其他实施例可以采用并行整理操作和/或表以用于将其他编码格式(如拆分一进制、拆分二进制、封包一进制和/或封包一进制)解码。
在一个实施例中,可以提供用于将拆分一进制格式解码的方法。多个实施例可以采用并行方法,该并行方法可以采用SIMD指令来将此格式解码。一些实施例可以一次对编码的数据的一块字节(如8个字节)操作。编码的数据可以是根据拆分一进制编码格式来编码的。可以并行地提取或收集每个字节中发现的描述符位,这些描述符位可以是连续位或终止位。在一些实施例中,此收集过程可以采用SIMD指令,如PMOVMSKB指令。例如,PMOVMSKB指令可以从字节的收集中提取最高有效位。还可以采用其他并行指令来收集或提取这些位。可以将提取的位(可以称为描述符)用作预先计算的整理序列的表中的偏移量。可以将使用整理序列的,如PSHUFB的并行排列指令用于确定如何将该数据解码。在一些实施例中,可以应用位一系列的位移位操作以从解码的数据中移除或消除初始连续和/或终止位。可以将使用表和整理操作来解码的类似方法用于拆分二进制编码的格式。一些实施例可以使用个别步骤来实现相似的结果,即使在字节顺序发生变化的情况下。此过程可以包括预先计算构成两次排列的整理序列,其中一次排列将格式解码以及另一次更改字节顺序。
在一些实施例中,可以采用用于为上文论述的组一进制格式(如varint-G8IU)构造表的方法以使用如PSHUFB的整理指令将拆分一进制编码的数据解码。
图14提供根据多种实施例的计算机实施的方法1400,用于将搜索引擎收录列表中编码的文档标识号差解码。方法1400可以在例如图1的环境100中所见的环境和装置中实现。方法1400还可以包括和/或采用如上文论述的将组格式解码的多个方面,包括至少结合图5A-B、图6A-C和/或图7A-C描述的组格式。在利用可执行指令配置的一个或多个计算机系统的控制下,方法1400包括读一个或多个描述符1402。每个描述符包括有关一组编码的标识号差的尺寸信息。在一些实施例中,编码的文档标识号差是以组一进制格式编码的。读表示该组编码的文档标识号差的多个数据1404,其中将该组编码的文档标识号差与一个或多个描述符链接。标识与查询表中的一个或多个描述符链接的一个或多个整理序列1406。使用所标识的整理序列对表示该组编码的文档标识号差的多个数据执行一个或多个并行整理操作1408。一个或多个并行整理操作包括将一个或多个零序列插入到多个数据中。确定整理的多个数据中表示该组编码的文档标识号差的多个解码的文档标识号差1410。
图15提供根据多种实施例的计算机实施的方法1500,用于将可变长度数据解码。方法1500可以在例如图1的环境100中所见的环境和装置中实施。方法1500还可以包括和/或采用如上文论述的将组格式解码的多个方面,包括至少结合图5A-B、图6A-C和/或图7A-C描述的组格式,和/或图14的方法1400。在利用可执行指令配置的一个或多个计算机系统的控制下,方法1500包括读一个或多个数据块1502。每个数据块表示多个编码的可变长度数据。读取与一个或多个数据块链接的一个或多个描述符1504。从查询表标识与一个或多个描述符链接的一个或多个整理序列1506。使用所标识的整理序列对该一个或多个数据块执行一个或多个整理操作1508。从整理的一个或多个数据块确定多个解码的可变长度数据1510。
在一些实施例中,执行一个或多个整理操作包括将一个或多个零序列插入到整理的一个或多个数据块以标准格式,如整数的32位表示来表示该一个或多个数据块的一个或多个部分。该一个或多个数据块可以表示多个可变长度整数。在一些实施例中,该一个或多个数据块可以表示其他可变长度数据。
由整理的一个或多个数据块确定多个解码的可变长度数据还可以包括,从整理的一个或多个数据块确定部分结果。可以从另一个数据块确定与该部分结构关联的其余部分。此类实施例可以利用完整块变化,如上文论述。在一些情况中,一个或多个整理操作可以包括来自单指令多数据(SIMD)处理器指令集的一个或多个并行整理指令。
一些实施例可以包括表示与一个或多个描述符链接的一个或多个偏移量。与一个或多个描述符链接的一个或多个偏移量可以包括具有固定尺寸的输入偏移量;在一些情况中,与一个或多个描述符链接的一个或多个偏移量可以包括具有可变尺寸的输出偏移量。固定尺寸可以取决于一个或多个数据块和一个或多个描述符中包括的字节的数量。与一个或多个描述符链接的一个或多个偏移量可以包括具有可变尺寸的输入偏移量。该可变尺寸可以取决于数据块表示的数据的数量。一些实施例还可以包括标识其他输出偏移量。
包括如封包一进制或封包二进制的封包格式的多个实施例也可以采用与上文论述的那些共有一些相似性的解码方法。包括将封包格式解码的多个实施例可以包括预先计算用于将编码的格式的位进行掩码和移位的表。在例如采用封包二进制格式的一些实施例中,第一个字节的低阶两个位可以指示可能需要多少个字节来将整数编码。如封包二进制格式的解码方法可以包括如下步骤。可以将一组字节(在一些情况中可以是四个)读入到连续存储器中。可以使用读取的数据的第一个字节以在掩码的表中查询。将结果向右2个位移位以消除描述符。可以应用掩码来确定要保留哪些字节并输出结果。可以按描述符描述的量移动输入指针。
可以将封包格式解码的多个实施例可以避免条件语句或循环。在一些实施例中,可以将移位和掩码组合成写入到输出的相同语句;这可以免于保存描述符副本的需求。在一些实施例中,掩码可以在可能需要的字节上全部具有1位,并且不需要的字节上具有0位。
在一些实施例中可以采用相似的方法来将封包一进制格式解码。在一些实施例中,并不如封包二进制格式中的情况那样移位2个位,多个实施例可以根据表来移位不同的量。
一些实施例可以采用接下来论述的附加的辅助编码方法。这些方法可以称为混合编码或格式。在这些混合格式中,可以使用标记符来指示是使用编码的基本形式还是更具压缩的备选形式。
在一些实施例中,提供可变长度编码格式的变体,其包括给定压缩方案和位向量的混合以便节省空间。在一些实施例中,该可变长度编码格式可以包括组一进制格式。多个实施例可以包括检测要编码的即将到来的整数或数据的序列的每个成员是否非常小,从而可以将这些整数或数据的多于一个整数或数据编码到一个字节中。可以将这些整数或数据作为位向量来存储。例如,第n位可以表示在位置基+n处的文档是否在收录列表中。特殊描述符值可以指示该组数据字节是否应该解释为使用可变长度整数格式之一还是解释为位向量。
采用位向量的多个实施例可以采用一进制格式或序列存储有关小整数或数据的数据。一进制序列可以通过连接以零分隔的a-1、b-1、c-1…的一进制表示来表示小值a、b、c…的序列。此类序列可以置于以字节指示序列表示的长度的字节之后。仅作为示例,可以将小于8个整数行程包封在一进制序列中。当两个或更多个整数的编码的值嵌入到单个字节中,即它们的和小于或等于8时,可以使用一进制序列。这可以保证此形式的编码使用的空间不多于上文论述的其他格式之一中对应的可变长度表达。
例如,如下混合一进制序列方法可以应用于将包括G8IU和G8CU的组一进制格式。在每个块边界处,可以潜在地切换到备选编码,其中小数字序列(在一些情况中可以是增量间隙(delta-gap))编码为一个一进制数的序列。描述符的低阶四位可以用作标记符1610,如图16所示。例如,如果它们的值是1111,这在有效的G8IU或G8CU描述符中是不会出现的,则它可以指示这些数据字节是使用备选压缩形式编码的。在一些情况中可以采用其他标记符来指示正在使用备选压缩形式。在此示例中,描述符的高阶四位1615表示一进制序列表示的字节中的长度减去一。
可以使用不同的条件语句来确定要何时从基本格式切换到备选压缩格式。在一个实施例中,编码器查找要编码的接下来两个整数。如果接下来两个整数都嵌入到使用一进制表示的一个字节中,则可以创建以这些值开始的一进制序列,并且可以接续直到达到最大字节长度(16)或直到下一个增量间隙的一进制表示超过8(以位为单位的一个字节的尺寸)为止。如果两个整数无法嵌入到使用一进制表示的一个字节中,则对此块使用基本编码(例如,G8IU或G8CU)。
例如,假定要编码的下一个序列的值是:2,1,1,4,1,1,3,1,5,1,2,9。前两个值的一进制编码是01和0。因为连续的值占用小于一个字节,所以可以使用压缩一进制序列。每个一进制值连接直到达到值9为止,这在一进制中无法以一个字节表示。可以将9之前的值存储为一个一进制序列,如图17所示。该序列占用22个位1720,需要3个字节的存储装置。可以使用1111的标记符1710来指示正在使用混合格式。可以将描述符中的高阶位1715设为0010,在二进制中为比3少一。如果最终字节中留下附加的位,则将它们设为1 1725;序列的最终字节中的高阶1在解码时总是被忽略,因为它们表示未终止的一进制值。
在一些实施例中,提供可变长度编码格式的变体,其包括给定压缩方案和行程长度编码的混合以便节省空间。在一些实施例中,该可变长度编码格式可以包括组一进制格式。多个实施例可以通过存储行程的长度而非值本身来将一个行程的相似数据编码,如全部1的一个行程。仅作为示例,值1的长行程可以频繁地出现在一些索引中。在一些产品搜索的应用环境中,因为常见词汇的重复,如产品类型或名称,而可能发现重复。多个实施例可以包括若干不同行程长度编码。一些实施例可以包括附带恒定长度描述符的行程。这些实施例可以包括长度介于3与258之间的行程,这可以编码在表示长度-3的单个字节中。一些实施例可以包括附有可变长度描述符的行程。这些实施例可以包括长度介于3与2Λ28+2之间的行程,这可以如上文论述的使用拆分一进制格式来编码。一些实施例可以包括附有恒定长度描述符的块的行程。这些实施例可以包括长度为8m(其中m在[1,16]内)的行程,这可以编码在具有二进制值m-1的4位中。当1的行程是至少3个的长度时,一些实施例可以采用行程长度编码。这可以确保行程长度编码使用的空间不多于对应的可变长度表达。
下文提供以利用恒定长度描述符(RBC)的块行程的混合编码的示例。此示例可以应用于组一进制格式,包括G8IU和G8CU。
例如,如果特定值在数据中非常常见,则可以通过查找该值的连续行程并仅存储该行程的长度来实现高度压缩。在一些应用中,值1非常常见,所以下文将专门以此方式表示1的行程。当然,也可以采用相似的方式来将其他常数的行程编码。为了节省空间,可以将b个连续1的块计数,其中b是计数器的粒度。对于下文的示例,b将等于8,显然还可以使用其他值的b。
正如上文论述的,在每个块边界处,可以潜在地切换到备选编码,其中连续1的行程由指示行程长度的计数来表示。描述符的低阶四位可以用作标记符。例如,如图18所示,可以采用在此示例中表示为1111(在有效的G8IU或G8CU描述符中是不会出现的)的标记符1810来指示描述符的高阶位按如下表示行程长度。如果高阶4位1815的二进制值是v,则行程的长度是b*(v+1)。这样允许表示其长度是介于b和16b之间的b的任何倍数的行程。
无论何时,例如只要见到b或更多1的即将来到的行程,即采用压缩RBC编码。当编码了128个值时或1的行程结束时,RBC序列可以终止。如果即将来到的行程1的长度不是b的倍数,则可以使用不超过该行程长度的最大倍数,并使用规则基本编码将剩余的值(连同要存储在该块中的其他即将来到的值一起)存储在下一个块中。这种表示极其地紧密;其不需要任何数据字节;所有信息都在描述符字节中。
例如,假定序列中的下一个值是1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5。因为b=8且有至少8个一,所以可以构造行程长度编码的序列。行程中的一的数量是19,即2*8+3。8的最近倍数是16,所以可以使用仅对应于这16的RBC表示。“2”表示组8的数量;可以存储值2-1=1,如图19中引用号1915处所示。再有,还可以使用标记符1910,在此示例中表示为1111。
一些实施例可以包括附有恒定长度描述符(RC)的行程的混合编码方案。此方法主要应用于拆分一进制格式(varint-SU),并且还可以与组一进制或封包一进制组合。下文提供利用拆分一进制的实施的描述,当然还可以将其修改成应用于其他一进制格式。
如上文论述,可以通过其长度来表示恒定值的行程。但是,对于此示例,在SU格式中不采用单独的描述符字节。因此,可以将值零用作标记符2010,如图20所示;这可能需要值零不占用输入(例如,这是收录列表中增量间隙的情况)。编码的表示中每个字节可以是varint-SU编码的整数中的初始字节,或对于RC格式可以是标记符的值零。如果该值是非零的,则此字节可以是普通SU编码的整数中的第一个字节。如果该值为零,则可以使用下一个字节来存储行程长度信息。确切地来说,对于长度r>2的行程,将r-3的二进制值存储在字节中,如图引用号2020所示。这样允许长度从3至258的行程的编码。
为了确定何时使用RC格式,可以检查即将来到的序列值。如果至少接下来三个值是1,则1的整个行程(最多258个)可能是以压缩形式编码的。否则,下一个值可能是以SU格式存储的。切换到RC格式所需的最小长度的阈值不一定是3;3是确保编码比varint-SU更紧密的最小阈值。
例如,假定序列中的下一个值是1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5。图21示出以RC格式存储此序列一的示例。因为此序列以至少三个1开始,所以整个一的序列可能是以RC格式编码的。这意味着在第一个字节2110中存储零,以及在第二个字节2120中存储19减3的行程长度。该行程之后的5可以采用基本varint-SU格式来存储。
一些实施例可以包括附有可变长度描述符(RV)的行程的混合编码方法。此方法主要应用于拆分一进制格式(varint-SU),并且还可以与组一进制或封包一进制组合。
如上文论述,恒定值的行程可以由其长度来表示,在第一个字节中使用值零作为标记符2210,如图22中所见。这可能需要值零不占用输入(例如,这是收录列表中增量间隙的情况)。编码的表示中每个字节可以是varint-SU编码的整数中的初始字节,或对于RV格式可以是标记符的值零。如果该值是非零的,则此字节可以是普通SU编码的整数中的第一个字节。如果该值为零,则可以使用接下来1-4个字节2220来以varint-SU格式存储行程长度信息。存储行程的长度,而非这些值本身。再有,对于长度r>2的行程,可以将r-3的二进制值存储在编码的表示中。因为varint-SU可以将最多2Λ28-1个整数存储在四个字节中,所以这样允许长度从3至2Λ28+2的行程的编码。
确定是否使用RV格式的标准可以与RC格式相同:可以检查即将来到的值序列。如果至少接下来三个值是1,则1的整个行程(最多2Λ28+2个)可能是以压缩形式编码的。否则,下一个值可能是以SU格式存储的。。切换到RV格式所需的最小长度的阈值不一定是3;3是确保编码比varint-SU更紧密的最小阈值。
例如,假定序列中的下一个值是300个一,后接不同的数。因为此序列以至少三个1开始,所以整个序列可能是以RV格式编码的。这意味着在第一个字节中存储零,以及以varint-SU形式存储300减3的行程长度。图23示出以RV格式存储300个一的示例。最右边字节表示标记符字节2310,以及往左第2和第3个字节2320表示varint-SU格式的数量297。
正如上文论述的,多种实施例可以在范围广泛的操作环境中实施,在一些情况中这些操作环境可以包括能够用于操作任何数量的应用的一个或多个用户计算机、计算装置或处理装置。用户或客户端装置可以包括任何多个通用个人计算机(如运行标准操作系统的桌上型或膝上型计算机)以及运行移动软件且能够支持多个联网和消息传送协议的蜂窝、无线和手持设备。此类系统还可以包括运行任何多种商业渠道可获取的操作系统和以如开发和数据库管理为目的的其他公知应用的多个工作站。这些设备还可以包括其他电子设备,如伪终端、瘦客户端、游戏系统和能够通过网络通信的其他设备。
还可以将多个不同方面作为至少一个服务或Web服务的一部分来实现,如可以是面向服务的体系结构的一部分。如Web服务的服务可以使用任何适合类型的消息传送,如使用可扩充标记语言(XML)格式且使用如SOAP(“简单对象访问协议”的简称)的适合协议交换的消息来通信。此类服务提供或执行的过程可以采用任何适合的语言,如Web服务描述语言(WSDL)来编写。使用如WSDL的语言能够实现如以多种SOAP框架自动化生成客户端代码的功能性。
大多数实施例利用本领域技术人员熟知的至少一个网络来支持使用多种商业渠道可获取的协议(如,TCP/IP、OSI、FTP、UPnP、NFS、CIFS和AppleTalk)的任何一种进行通信。该网络可以是例如,局域网、广域网、虚拟专用网络、因特网、内联网、外联网(extranet)、公众交换电话网,红外线网络、无线网络及其任何组合。
在利用Web服务器的实施例中,Web服务器可以运行多种服务器或中间层次应用的任何一种,包括HTTP服务器、FTP服务器、CGI服务器、数据服务器、Java服务器和商业应用服务器。服务器还可以能够响应来自用户设备的请求执行程序或脚本,如执行可以作为以任何编程语言(如C、C#或C++)或任何脚本语言(如Perl、Python或TCL)及其组合编写的一个或多个脚本或程序来实现的一个或多个Web应用。服务器还可以包括数据库服务器,包括而不限于可从和以商业渠道可获取的那些数据库服务器。
该环境可以包括多种数据存储和其他存储器和存储介质,正如上文论述的。它们可以驻留在多个不同位置中,如在这些计算机的其中一个或多个本地(和/或驻留在其中)的存储介质或在网络上对于任何一个或全部计算机为远程的存储介质。在一组特定实施例中,信息可以驻留在本领域技术人员熟知的存储区域网络(“SAN”)中。相似地,可以在适合的情况下,将用于执行归因于这些计算机、服务器或其他网络设备的功能的任何必需文件存储在本地和/或存储在远程位置。在系统包括计算机化设备的情况中,每个此类设备可以包括经由总线电耦合的硬件元件,这些元件包括例如至少一个中央处理单元(CPU)、至少一个输入设备(例如,鼠标、键盘、控制器、触摸屏或小键盘)和至少一个输出设备(例如,显示设备、打印机或扬声器)。此类系统还可以包括一个或多个存储设备,如硬盘驱动器、光存储设备和固态存储设备(如随机存取存储器(“RAM”)或只读存储器(“ROM”),以及移动介质设备、存储卡、闪存卡等。
此类设备还可以包括计算机可读存储介质读取器、通信设备(例如,调制解调器、网络卡(无线或有线)、红外线通信设备等)和如上所述的工作存储器。该计算机可读存储介质读取器可以与计算机可读存储介质连接或配置成接纳计算机可读存储介质,该计算机可读存储介质代表用于临时性地和/或永久性地包含、存储、传送和检索计算机可读信息的远程、本地、固定和/或移动存储设备以及存储介质。该系统和多种设备通常还将包括位于至少一个工作存储器设备内的多个软件应用、模块、服务或其他元件,包括操作系统和应用程序(如客户端应用或Web浏览器)。应该认识到,备选实施例可以具有源自上文所描述的多种变化。例如,还可以使用定制的硬件和/或可以采用硬件、软件(包括便携式软件,如applet)或二者兼有来实施特定元件。再者,可以采用至其他计算设备(如网络输入/输出设备)的连接。
用于包含代码或代码的一部分的存储介质和计算机可读介质可以包括本领域中众所周知或使用的任何适合的介质,包括存储介质和通信介质,如但不限于以用于存储和/或传输如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术实施的易失性和非易失性、移动和不可移动介质,包括RAM、ROM、EEPROM、闪存或其他存储技术、CD-ROM、数字多功能光盘(DVD)或其他光存储装置、磁带盒、磁带、磁盘存储装置或其他磁存储设备或能够用于存储期望的信息且能够被系统设备访问的任何其他介质。基于本文提供的发明公开和教导,本领域技术人员能够认识到用于实施这些多种实施例的其他方式和/或方法。
因此,本说明书和附图应视为说明性意义的而非限制性意义的。但是,将显见的是在不背离权利要求中提出的本发明的更宽精神和范围的前提下可以对其进行多种修改和更改。
条款:
条款1.一种计算机实施的方法,其用于将搜索引擎收录列表中编码的文档标识号差解码,所述方法包括:
在以可执行指令配置的一个或多个计算机系统的控制下,
读取一个或多个描述符,每个描述符包括有关一组编码的标识号差的多个尺寸信息的信息;
读取表示与所述一个或多个描述符链接的所述一组编码的文档标识号差的多个数据;
从查询表标识所述与一个或多个描述符链接的一个或多个整理序列;
使用所标识的整理序列对表示所述一组编码的文档标识号差的所述多个数据执行一个或多个并行整理操作,其中所述一个或多个并行整理操作包括将一个或多个零序列插入到所述多个数据中;
从表示所述一组编码的文档标识号差的所述整理的多个数据中确定多个解码的文档标识号差。
条款2.如条款1所述的计算机实施的方法,其用于将搜索引擎收录列表中编码的文档标识号解码,其中所述编码的文档标识号差是以组一进制格式编码的。
条款3.一种用于将可变长度数据解码的计算机实施的方法,其包括:
在以可执行指令配置的一个或多个计算机系统的控制下,
读取一个或多个数据块,每个数据块包括多个编码的可变长度数据;
读取与所述一个或多个数据块链接的一个或多个描述符;
从查询表标识所述与一个或多个描述符链接的一个或多个整理序列;
使用所标识的整理序列对所述一个或多个数据块执行一个或多个整理操作;以及
从所述整理的一个或多个数据块确定多个解码的可变长度数据。
条款4.如条款3所述的用于将可变长度数据解码的计算机实施的方法,其中执行所述一个或多个整理操作还包括,将一个或多个零序列插入到所述整理的一个或多个数据块以标准格式来表示所述一个或多个数据块的一个或多个部分。
条款5.如条款3所述的用于将可变长度数据解码的计算机实施的方法,其中所述一个或多个数据块表示多个可变长度整数。
条款6.如条款3所述的用于将可变长度数据解码的计算机实施的方法,其中从所述整理的一个或多个数据块确定所述多个解码的可变长度数据还包括:
从所述整理的一个或多个数据块确定部分结果,其中从另一个数据块确定与所述部分结果关联的剩余部分。
条款7.如条款3所述的用于将可变长度数据解码的计算机实施的方法,其中所述一个或多个整理操作包括来自单指令多数据(SIMD)处理器指令集的一个或多个并行整理指令。
条款8.如条款3所述的用于将可变长度数据解码的计算机实施的方法,其还包括:
标识与所述一个或多个描述符链接的一个或多个偏移量。
条款9.如条款8所述的用于将可变长度数据解码的计算机实施的方法,其中与所述一个或多个描述符链接的一个或多个偏移量包括具有固定尺寸的输入偏移量和可变尺寸的输出偏移量。
条款10.如条款8所述的用于将可变长度数据解码的计算机实施的方法,其中与所述一个或多个描述符链接的所述一个或多个偏移量包括具有可变尺寸的输入偏移量。
条款11.一种用于将可变长度数据解码的系统,其包括:
处理器;以及
存储装置,所述存储装置包括在被所述处理器执行时使所述系统执行如下操作的指令:
读取一个或多个数据块,每个数据块包括多个编码的可变长度数据;
读取与所述一个或多个数据块链接的一个或多个描述符;
从查询表标识所述与一个或多个描述符链接的一个或多个整理序列;
使用所标识的整理序列对所述一个或多个数据块执行一个或多个整理操作;以及
从所述整理的一个或多个数据块确定多个解码的可变长度数据。
条款12.如条款11所述的用于将可变长度数据解码的系统,其中执行所述一个或多个整理操作还包括,将一个或多个零序列插入到所述整理的一个或多个数据块以标准格式来表示所述一个或多个数据块的一个或多个部分。
条款13.如条款11所述的用于将可变长度数据解码的系统,其中所述一个或多个数据块表示多个可变长度整数。
条款14.如条款11所述的用于将可变长度数据解码的系统,其中从所述整理的一个或多个数据块确定多个解码的可变长度数据还包括:
从所述整理的一个或多个数据块确定部分结果,其中从另一个数据块确定与所述部分结果关联的剩余部分。
条款15.如条款11所述的用于将可变长度数据解码的系统,其中所述一个或多个整理操作包括来自单指令多数据(SIMD)处理器指令集的一个或多个并行整理指令。
条款16.如条款11所述的用于将可变长度数据解码的系统,其还包括:
标识与所述一个或多个描述符链接的一个或多个偏移量。
条款17.如条款16所述的用于将可变长度数据解码的系统,其中与所述一个或多个描述符链接的一个或多个偏移量包括具有固定尺寸的输入偏移量和可变尺寸的输出偏移量。
条款18.如条款16所述的用于将可变长度数据解码的系统,其中与所述一个或多个数据块链接的所述一个或多个偏移量包括具有可变尺寸的输入偏移量。
条款19.一种存储用于将可变长度数据解码的指令的非临时性计算机可读存储介质,其包括在被处理器执行时使得所述处理器执行如下操作的指令:
读取一个或多个数据块,每个数据块包括多个编码的可变长度数据;
读取与所述一个或多个数据块链接的一个或多个描述符;
从查询表标识所述与一个或多个描述符链接的一个或多个整理序列;
使用所标识的整理序列对所述一个或多个数据块执行一个或多个整理操作;以及
从所述整理的一个或多个数据块确定多个解码的可变长度数据。
条款20.如条款19所述的非临时性计算机可读存储介质,其中执行所述一个或多个整理操作还包括,将一个或多个零序列插入到所述整理的一个或多个数据块以标准格式来表示所述一个或多个数据块的一个或多个部分。
条款21.如条款19所述的非临时性计算机可读存储介质,其中所述一个或多个数据块表示多个可变长度整数。
条款22.如条款19所述的非临时性计算机可读存储介质,其中从所述整理的一个或多个数据块确定多个解码的可变长度数据还包括:
从所述整理的一个或多个数据块确定部分结果,其中从另一个数据块确定与所述部分结果关联的剩余部分。
条款23.如条款19所述的非临时性计算机可读存储介质,其中所述一个或多个整理操作包括来自单指令多数据(SIMD)处理器指令集的一个或多个并行整理指令。
条款24.如条款19所述的非临时性计算机可读存储介质,其还包括:
标识与所述一个或多个描述符链接的一个或多个偏移量,其中与所述一个或多个描述符链接的一个或多个偏移量包括具有固定尺寸的输入偏移量和可变尺寸的输出偏移量。
条款25.如条款19所述的非临时性计算机可读存储介质,其还包括:
标识与所述一个或多个描述符链接的一个或多个偏移量,其中与所述一个或多个描述符链接的所述一个或多个偏移量包括具有可变尺寸的输入偏移量。
条款26.一种计算机实施的方法,其用于将搜索引擎收录列表中的文档标识号编码,所述方法包括:
在以可执行指令配置的一个或多个计算机系统的控制下,
为进行数据存储确定块尺寸;
接收所述搜索引擎收录列表的多个文档标识号;
确定相邻文档标识号之间的差;
确定每个文档标识号差的编码表达,其中所述文档标识号差的编码表达使用可变长度表达;
标识所述文档标识号差的所述多个编码表达的连续子集,其中所述连续子集的每个文档标识号差的编码表达的相应尺寸之和小于或等于所述为进行数据存储确定的块尺寸;
生成一个或多个描述符,所述描述符提供有关所述子集的文档标识号差的编码表达中文档标识号差的编码表达的数量以及所述连续子集中相应文档标识号差的每个相应编码表达的尺寸的信息;以及
存储所述一个或多个描述符和所述文档标识号差的编码表达的所述子集,其中将文档标识号差的编码表达的所述连续子集作为组来存储,并且将所述一个或多个描述符与所述一组文档标识号差的编码表达连续地来存储。
条款27.如条款26所述的计算机实施的方法,其用于将搜索引擎收录列表中的文档标识号编码,其中所述一个或多个描述符采用每个相应尺寸的一进制表示来表示所述连续子集的相应文档标识号差的每个相应编码表达的尺寸。
条款28.一种计算机实施的方法,其用于使用可变长度表达来将数据编码,所述方法包括:
在以可执行指令配置的一个或多个计算机系统的控制下,
为进行数据存储确定块尺寸;
标识多个数据项;
确定每个数据项的编码表达,其中所述数据项的编码表达使用可变长度表达;
标识所述数据项的所述多个编码表达的第一子集,其中来自所述数据项的多个编码表达的所述第一子集中的数据项的编码表达的相应尺寸之和小于或等于所述所确定的用于数据存储的块的尺寸;
生成第一描述符,所述第一描述符表示所述数据项的所述多个编码表达的所述第一子集中的数据项的编码表达的相应尺寸;
将所述数据项的所述多个编码表达的所述第一子集中的数据项的编码表达作为第一存储组来存储;以及
存储所述第一描述符。
条款29.如条款28所述的使用可变长度表达将数据编码的计算机实施的方法,其中存储所述第一描述符包括,将所述第一描述符与所述第一存储组连续地来存储。
条款30.如条款28所述的使用可变长度表达将数据编码的计算机实施的方法,其中存储所述第一描述符包括,将所述第一描述符与所述第一存储组不连续地来存储。
条款31.如条款28所述的使用可变长度表达将数据编码的计算机实施的方法,其中生成所述第一描述符包括以一进制格式表示每个数据项的每个相应编码表达的尺寸。
条款32.如条款31所述的使用可变长度表达将数据编码的计算机实施的方法,其中以一进制格式表示每个数据项的每个相应编码表达的尺寸包括,生成所述一进制格式,所述一进制格式将每个数据项的每个编码表达的相应尺寸表示为一进制尺寸减去一,并且通过零将每个相应尺寸的表示分隔。
条款34.如条款31所述的使用可变长度表达将数据编码的计算机实施的方法,其中生成所述第一描述符包括将填充信息插入到所述第一描述符中,表示所述第一子集与所述数据块尺寸之间的尺寸之差。
条款34.如条款28所述的使用可变长度表达将数据编码的计算机实施的方法,其还包括:
从所述数据项的所述多个编码表达中标识相应数据项的附加编码表达;
将所述相应数据项的附加编码表达的至少第一部分作为所述第一存储组的部分来存储;以及
将所述相应数据项的附加编码表达的至少第二部分作为第二存储组的部分来存储。
条款35.如条款34所述的使用可变长度表达将数据编码的计算机实施的方法,其还包括
生成第二描述符,所述第二描述符将所述相应数据项的所述附加编码表达的至少第二部分的长度部分地作为所述第二存储组的部分来存储。
条款36.如条款28所述的使用可变长度表达将数据编码的计算机实施的方法,其中所述数据项是增量间隙(delta-gap)。
条款37.一种用于使用可变长度表达来将数据编码的系统,其包括:
处理器;以及
存储装置,所述存储装置包括在被所述处理器执行时使所述系统执行如下操作的指令:
为进行数据存储确定块尺寸;
标识多个数据项;
确定每个数据项的编码表达,其中所述数据项的编码表达使用可变长度表达;
标识所述数据项的所述多个编码表达的第一子集,其中来自所述数据项的多个编码表达的所述第一子集中的数据项的编码表达的相应尺寸之和小于或等于所述所确定的用于数据存储的块的尺寸;
生成第一描述符,所述第一描述符表示所述数据项的所述多个编码表达的所述第一子集中的数据项的编码表达的相应尺寸;
将所述数据项的所述多个编码表达的所述第一子集中的数据项的编码表达作为第一存储组来存储;以及
存储所述第一描述符。
条款38.如条款37所述的使用可变长度表达将数据编码的系统,其中存储所述第一描述符包括,将所述第一描述符与所述第一存储组连续地来存储。
条款39.如条款37所述的使用可变长度表达将数据编码的系统,其中存储所述第一描述符包括,将所述第一描述符与所述第一存储组不连续地来存储。
条款40.如条款37所述的使用可变长度表达将数据编码的系统,其中生成所述第一描述符包括以一进制格式表示每个数据项的每个相应编码表达的尺寸。
条款41.如条款40所述的使用可变长度表达将数据编码的系统,其中以一进制格式表示每个数据项的每个相应编码表达的尺寸包括,生成所述一进制格式,所述一进制格式将相应数据项的每个编码表达的相应尺寸表示为一进制尺寸减去一,并且通过零将每个相应尺寸的表示分隔。
条款42.如条款37所述的使用可变长度表达将数据编码的系统,其中生成所述第一描述符包括将填充信息插入到所述第一描述符中,表示所述第一子集与所述数据块尺寸之间的尺寸之差。
条款43.如条款37所述的使用可变长度表达将数据编码的系统,其还包括:
从所述数据项的所述多个编码表达中标识相应数据项的附加编码表达;
将所述相应数据项的附加编码表达的至少第一部分作为所述第一存储组的部分来存储;以及
将所述相应数据项的附加编码表达的至少第二部分作为第二存储组的部分来存储。
条款44.如条款43所述的使用可变长度表达将数据编码的系统,其还包括:
生成第二描述符,所述第二描述符将所述相应数据项的所述附加编码表达的至少第二部分的长度部分地作为所述第二存储组的部分来存储。
条款45.一种存储使用可变长度表达将数据编码的指令的非临时性计算机可读存储介质,所述指令在被处理器执行时,使所述处理器执行如下操作:
为进行数据存储确定块尺寸;
标识多个可变长度数据;
确定每个数据项的编码表达,其中所述数据项的编码表达使用可变长度表达;
标识所述数据项的所述多个编码表达的第一子集,其中来自所述数据项的多个编码表达的所述第一子集中的数据项的编码表达的相应尺寸之和小于或等于所述所确定的用于数据存储的块的尺寸;
生成第一描述符,所述第一描述符表示所述数据项的所述多个编码表达的所述第一子集中的数据项的编码表达的相应尺寸;
将所述数据项的所述多个编码表达的所述第一子集中的数据项的编码表达作为第一存储组来存储;以及
存储所述第一描述符。
条款46.如条款45所述的非临时性计算机可读存储介质,其中存储所述第一描述符包括,将所述第一描述符与所述第一存储组连续地来存储。
条款47.如条款45所述的非临时性计算机可读存储介质,其中存储所述第一描述符包括,将所述第一描述符与所述第一存储组不连续地来存储。
条款48.如条款45所述的非临时性计算机可读存储介质,其中生成所述第一描述符包括以一进制格式表示每个数据项的每个相应编码表达的尺寸。
条款49.如条款48所述的非临时性计算机可读存储介质,其中以一进制格式表示每个数据项的每个相应编码表达的尺寸包括,生成所述一进制格式,所述一进制格式将每个数据项的每个编码表达的相应尺寸表示为一进制尺寸减去一,并且通过零将每个相应长度的表示分隔。
条款50.如条款45所述的非临时性计算机可读存储介质,其还包括:
从所述数据项的所述多个编码表达中标识相应数据项的附加编码表达;
将所述相应数据项的附加编码表达的至少第一部分作为所述第一存储组的部分来存储;以及
将所述相应数据项的附加编码表达的至少第二部分作为第二存储组的部分来存储。
条款51.如条款50所述的非临时性计算机可读存储介质,其还包括:
生成第二描述符,所述第二描述符将所述相应数据项的所述附加编码表达的至少第二部分的长度部分地作为所述第二存储组的部分来存储。
Claims (14)
1.一种用于将可变长度数据解码的系统,其包括:
处理器;以及
存储器装置,所述存储器装置包括在被所述处理器执行时使所述系统执行如下操作的指令:
读取一个或多个数据块,每个数据块包括多个编码的可变长度数据,所述多个编码的可变长度数据中的每一个表示文档标识号之间的差,并且以封包一进制或组一进制格式中的至少一个编码;
读取与所述一个或多个数据块链接的一个或多个描述符,每个描述符包括所述一个或多个数据块的尺寸信息;
从查询表标识与所述一个或多个描述符链接的一个或多个整理序列;
通过使用所述一个或多个整理序列对所述一个或多个数据块并行执行一个或多个整理操作生成整理的数据;
将一个或多个零序列插入所述整理的数据以标准格式表示所述一个或多个数据块的一个或多个部分;以及
由所述整理的一个或多个数据块确定多个解码的可变长度数据。
2.如权利要求1所述的用于将可变长度数据解码的系统,其中通过并行执行一个或多个整理操作生成整理的数据还包括,将一个或多个零序列插入到所述整理的一个或多个数据块以按标准格式来表示所述一个或多个数据块的一个或多个部分。
3.如权利要求1所述的用于将可变长度数据解码的系统,其中所述一个或多个数据块表示多个可变长度整数。
4.如权利要求1所述的用于将可变长度数据解码的系统,其中由所述整理的一个或多个数据块确定多个解码的可变长度数据还包括:
由所述整理的一个或多个数据块确定部分结果,其中由另一个数据块确定与所述部分结果关联的剩余部分。
5.如权利要求1所述的用于将可变长度数据解码的系统,其中所述一个或多个整理操作包括来自单指令多数据(SIMD)处理器指令集的一个或多个并行整理指令。
6.如权利要求1所述的用于将可变长度数据解码的系统,其还包括:
标识与所述一个或多个描述符链接的一个或多个偏移量。
7.如权利要求6所述的用于将可变长度数据解码的系统,其中与所述一个或多个描述符链接的所述一个或多个偏移量包括具有固定大小的输入偏移量和可变大小的输出偏移量。
8.如权利要求6所述的用于将可变长度数据解码的系统,其中与所述一个或多个数据块链接的所述一个或多个偏移量包括具有可变大小的输入偏移量。
9.一种计算机实现的方法,其用于使用可变长度表示来将数据编码,所述方法包括:
在以可执行指令配置的一个或多个计算机系统的控制下,
为进行数据存储确定块大小;
标识多个数据项;
为所述多个数据项确定多个编码表示,其中所述多个编码表示的每一个编码表示是可变长度表示;
标识所述多个编码表示的子集,其中在所述子集中的每个编码表示的相应大小之和小于或等于为进行数据存储所确定的块大小;
为所述子集生成第一描述符,所述第一描述符以封包一进制或组一进制格式中的至少一个表示所述子集中的每个编码表示的相应大小;
将所述子集中的所述编码表示作为第一存储的组来存储;以及
存储所述第一描述符。
10.如权利要求9所述的使用可变长度表示将数据编码的计算机实现的方法,其中存储所述第一描述符包括,将所述第一描述符与所述第一存储的组连续地来存储。
11.如权利要求9所述的使用可变长度表示将数据编码的计算机实现的方法,其中存储所述第一描述符包括,将所述第一描述符与所述第一存储的组不连续地来存储。
12.如权利要求9所述的使用可变长度表示将数据编码的计算机实现的方法,其中以封包一进制或组一进制格式中的至少一个表示所述子集中的每个编码表示的相应大小包括,生成所述封包一进制或组一进制格式中的至少一个,并且通过零将每个编码表示的相应大小分隔,所述封包一进制或组一进制格式中的至少一个用于将每个编码表示的相应大小描述为一进制大小减去一。
13.如权利要求9所述的使用可变长度表示将数据编码的计算机实现的方法,其中生成所述第一描述符包括,将填充信息插入到所述第一描述符中,所述第一描述符表示所述子集与所述块大小二者之间的大小之差。
14.如权利要求9所述的使用可变长度表示将数据编码的计算机实现的方法,其还包括:
从所述数据项的所述多个编码表示中标识相应数据项的附加编码表示;
将所述相应数据项的所述附加编码表示的至少第一部分作为所述第一存储的分组的部分来存储;以及
将所述相应数据项的所述附加编码表示的至少第二部分作为第二存储的分组的部分来存储。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201161446364P | 2011-02-24 | 2011-02-24 | |
US61/446,364 | 2011-02-24 | ||
US13/077,417 | 2011-03-31 | ||
US13/077,479 US9336225B2 (en) | 2011-02-24 | 2011-03-31 | Encoding of variable-length data with unary formats |
US13/077,417 US9195675B2 (en) | 2011-02-24 | 2011-03-31 | Decoding of variable-length data with group formats |
US13/077,479 | 2011-03-31 | ||
PCT/US2012/026152 WO2012116086A1 (en) | 2011-02-24 | 2012-02-22 | Improved encoding and decoding of variable-length data with group formats |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103582883A CN103582883A (zh) | 2014-02-12 |
CN103582883B true CN103582883B (zh) | 2017-05-17 |
Family
ID=46719704
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201280014197.3A Active CN103582883B (zh) | 2011-02-24 | 2012-02-22 | 具有组格式的可变长度数据的改进型编码和解码 |
Country Status (5)
Country | Link |
---|---|
US (2) | US9336225B2 (zh) |
EP (1) | EP2678787A4 (zh) |
JP (1) | JP5770316B2 (zh) |
CN (1) | CN103582883B (zh) |
WO (1) | WO2012116086A1 (zh) |
Families Citing this family (57)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9959572B2 (en) | 2009-12-10 | 2018-05-01 | Royal Bank Of Canada | Coordinated processing of data by networked computing resources |
US8572031B2 (en) | 2010-12-23 | 2013-10-29 | Mongodb, Inc. | Method and apparatus for maintaining replica sets |
US10713280B2 (en) | 2010-12-23 | 2020-07-14 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US11544288B2 (en) | 2010-12-23 | 2023-01-03 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US10997211B2 (en) | 2010-12-23 | 2021-05-04 | Mongodb, Inc. | Systems and methods for database zone sharding and API integration |
US11615115B2 (en) | 2010-12-23 | 2023-03-28 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US10262050B2 (en) | 2015-09-25 | 2019-04-16 | Mongodb, Inc. | Distributed database systems and methods with pluggable storage engines |
US10366100B2 (en) | 2012-07-26 | 2019-07-30 | Mongodb, Inc. | Aggregation framework system architecture and method |
US9881034B2 (en) | 2015-12-15 | 2018-01-30 | Mongodb, Inc. | Systems and methods for automating management of distributed databases |
US10614098B2 (en) | 2010-12-23 | 2020-04-07 | Mongodb, Inc. | System and method for determining consensus within a distributed database |
US10977277B2 (en) | 2010-12-23 | 2021-04-13 | Mongodb, Inc. | Systems and methods for database zone sharding and API integration |
US8996463B2 (en) | 2012-07-26 | 2015-03-31 | Mongodb, Inc. | Aggregation framework system architecture and method |
US10740353B2 (en) | 2010-12-23 | 2020-08-11 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US9805108B2 (en) | 2010-12-23 | 2017-10-31 | Mongodb, Inc. | Large distributed database clustering systems and methods |
US9740762B2 (en) | 2011-04-01 | 2017-08-22 | Mongodb, Inc. | System and method for optimizing data migration in a partitioned database |
US10346430B2 (en) | 2010-12-23 | 2019-07-09 | Mongodb, Inc. | System and method for determining consensus within a distributed database |
US9336225B2 (en) | 2011-02-24 | 2016-05-10 | A9.Com, Inc. | Encoding of variable-length data with unary formats |
JP5691752B2 (ja) * | 2011-04-01 | 2015-04-01 | セイコーエプソン株式会社 | データの書き換え方法、データ書き換え装置及び書き換えプログラム |
US8914706B2 (en) | 2011-12-30 | 2014-12-16 | Streamscale, Inc. | Using parity data for concurrent data authentication, correction, compression, and encryption |
US8683296B2 (en) | 2011-12-30 | 2014-03-25 | Streamscale, Inc. | Accelerated erasure coding system and method |
US11403317B2 (en) | 2012-07-26 | 2022-08-02 | Mongodb, Inc. | Aggregation framework system architecture and method |
US10872095B2 (en) | 2012-07-26 | 2020-12-22 | Mongodb, Inc. | Aggregation framework system architecture and method |
US11544284B2 (en) | 2012-07-26 | 2023-01-03 | Mongodb, Inc. | Aggregation framework system architecture and method |
JP6048251B2 (ja) * | 2013-03-21 | 2016-12-21 | 富士通株式会社 | データ圧縮装置、データ圧縮方法、およびデータ圧縮プログラム、並びにデータ復元装置、データ復元方法、およびデータ復元プログラム |
US9626184B2 (en) | 2013-06-28 | 2017-04-18 | Intel Corporation | Processors, methods, systems, and instructions to transcode variable length code points of unicode characters |
EP2979207A4 (en) | 2013-10-10 | 2016-11-09 | Yandex Europe Ag | METHODS AND SYSTEMS FOR INDEXING SOURCE DATA FOR DATABASE DOCUMENTS AND FOR DOCUMENT LOCATION IN THE DATABASE |
US10242071B2 (en) | 2015-06-23 | 2019-03-26 | Microsoft Technology Licensing, Llc | Preliminary ranker for scoring matching documents |
US11281639B2 (en) | 2015-06-23 | 2022-03-22 | Microsoft Technology Licensing, Llc | Match fix-up to remove matching documents |
US10467215B2 (en) * | 2015-06-23 | 2019-11-05 | Microsoft Technology Licensing, Llc | Matching documents using a bit vector search index |
US11392568B2 (en) | 2015-06-23 | 2022-07-19 | Microsoft Technology Licensing, Llc | Reducing matching documents for a search query |
US10496669B2 (en) | 2015-07-02 | 2019-12-03 | Mongodb, Inc. | System and method for augmenting consensus election in a distributed database |
US10318516B1 (en) * | 2015-09-22 | 2019-06-11 | Amazon Technologies, Inc. | System for optimizing serialization of values |
US10394822B2 (en) | 2015-09-25 | 2019-08-27 | Mongodb, Inc. | Systems and methods for data conversion and comparison |
US10423626B2 (en) * | 2015-09-25 | 2019-09-24 | Mongodb, Inc. | Systems and methods for data conversion and comparison |
US10846411B2 (en) | 2015-09-25 | 2020-11-24 | Mongodb, Inc. | Distributed database systems and methods with encrypted storage engines |
US10673623B2 (en) | 2015-09-25 | 2020-06-02 | Mongodb, Inc. | Systems and methods for hierarchical key management in encrypted distributed databases |
US10671496B2 (en) | 2016-05-31 | 2020-06-02 | Mongodb, Inc. | Method and apparatus for reading and writing committed data |
US10776220B2 (en) | 2016-06-27 | 2020-09-15 | Mongodb, Inc. | Systems and methods for monitoring distributed database deployments |
EP3497960A1 (en) * | 2016-08-19 | 2019-06-19 | Huawei Technologies Co., Ltd. | Network nodes, and methods thereof |
US20180095760A1 (en) * | 2016-09-30 | 2018-04-05 | James D. Guilford | Instruction set for variable length integer coding |
US20180101312A1 (en) | 2016-10-06 | 2018-04-12 | Netflix, Inc. | Techniques for generating and operating on in-memory datasets |
JP6729299B2 (ja) | 2016-10-28 | 2020-07-22 | 富士通株式会社 | ピッチ抽出装置及びピッチ抽出方法 |
CN108989800B (zh) * | 2017-06-03 | 2024-01-09 | 上海天荷电子信息有限公司 | 以字节为单元产生压缩数据字节流的数据压缩方法和装置 |
US10866868B2 (en) | 2017-06-20 | 2020-12-15 | Mongodb, Inc. | Systems and methods for optimization of database operations |
TWI645698B (zh) | 2017-07-17 | 2018-12-21 | 財團法人工業技術研究院 | 資料發送裝置、資料接收裝置及其方法 |
US11061880B2 (en) | 2018-01-25 | 2021-07-13 | Hewlett-Packard Development Company, L.P. | Data structure with identifiers |
US10404276B1 (en) * | 2018-04-27 | 2019-09-03 | Nicira, Inc. | Stable variable-length order-preserving encoding scheme |
CN109412600A (zh) * | 2018-09-03 | 2019-03-01 | 何祥果 | 一种基于磁性特征的标识号编码方法 |
US10983975B2 (en) | 2019-06-13 | 2021-04-20 | Ant Financial (Hang Zhou) Network Technology Co., Ltd. | Data block storage method and apparatus, and electronic device |
CN112631595B (zh) * | 2019-10-09 | 2024-03-01 | 安徽寒武纪信息科技有限公司 | 混洗方法、装置、计算机设备及可读存储介质 |
CN111600610B (zh) * | 2020-05-26 | 2023-04-28 | 北京思特奇信息技术股份有限公司 | 一种变长整数的通用编码方法、系统及电子设备 |
CN111968361B (zh) * | 2020-08-31 | 2022-04-19 | 成都埃克思智创科技有限公司 | 一种红外重复码学习方法及应用于物联网的红外遥控系统 |
US11619497B2 (en) | 2020-10-30 | 2023-04-04 | Pony Ai Inc. | Autonomous vehicle navigation using with coalescing constraints for static map data |
CN113847939A (zh) * | 2021-09-30 | 2021-12-28 | 东风越野车有限公司 | 一种应用于车辆仪表的离线故障诊断系统和方法 |
US11818191B1 (en) * | 2021-11-11 | 2023-11-14 | Two Six Labs, LLC | Stateless lossless compression |
US11947512B2 (en) | 2022-02-22 | 2024-04-02 | Microsoft Technology Licensing, Llc | Feedback-based inverted index compression |
CN116708845B (zh) * | 2023-08-04 | 2023-10-31 | 佳木斯大学 | 基于5g技术的肠胃医疗图像通讯传输方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101849258A (zh) * | 2007-11-04 | 2010-09-29 | 高通股份有限公司 | 在可缩放语音和音频编解码器中的用于经量化的mdct频谱的码簿索引的编码/解码的技术 |
Family Cites Families (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
NL9100218A (nl) * | 1991-02-07 | 1992-09-01 | Philips Nv | Encodeer/decodeer-schakeling, alsmede digitaal video-systeem voorzien van de schakeling. |
US5926644A (en) | 1991-10-24 | 1999-07-20 | Intel Corporation | Instruction formats/instruction encoding |
JPH05216738A (ja) * | 1992-01-14 | 1993-08-27 | Nec Corp | 固定長ファイルの可変長レコード登録参照方式 |
JP2746103B2 (ja) * | 1994-02-28 | 1998-04-28 | 日本電気株式会社 | データレコード圧縮方法およびデータレコード伸張方法 |
US5646618A (en) * | 1995-11-13 | 1997-07-08 | Intel Corporation | Decoding one or more variable-length encoded signals using a single table lookup |
US5724033A (en) * | 1996-08-09 | 1998-03-03 | Digital Equipment Corporation | Method for encoding delta values |
EP0933939A4 (en) | 1997-07-18 | 1999-12-22 | Sony Corp | METHOD AND SYSTEM FOR MULTIPLEXING AN IMAGE SIGNAL, METHOD AND SYSTEM FOR DEMULTIPLEXING AN IMAGE SIGNAL, AND TRANSMISSION MEDIUM |
SG116400A1 (en) * | 1997-10-24 | 2005-11-28 | Matsushita Electric Ind Co Ltd | A method for computational graceful degradation inan audiovisual compression system. |
US6012142A (en) * | 1997-11-14 | 2000-01-04 | Cirrus Logic, Inc. | Methods for booting a multiprocessor system |
JP2001357048A (ja) | 2000-06-13 | 2001-12-26 | Hitachi Ltd | ブロックソート圧縮データの検索方法、および検索に適したブロックソート圧縮法の符号化方法 |
JP2002064385A (ja) | 2000-08-18 | 2002-02-28 | Sony Corp | 復号装置及び復号方法 |
WO2002069073A2 (en) | 2000-11-13 | 2002-09-06 | Starguide Digital Networks, Inc. | Ethernet digital storage (eds) card and satellite transmission system including faxing capability |
WO2003107222A1 (en) | 2002-06-13 | 2003-12-24 | Cerisent Corporation | Parent-child query indexing for xml databases |
US8081323B2 (en) | 2003-01-31 | 2011-12-20 | Canon Kabushiki Kaisha | Apparatus and method for transferring data to remote printer |
JP2004320114A (ja) | 2003-04-11 | 2004-11-11 | Matsushita Electric Ind Co Ltd | デジタル放送受信機 |
US7319994B1 (en) * | 2003-05-23 | 2008-01-15 | Google, Inc. | Document compression scheme that supports searching and partial decompression |
JP4462944B2 (ja) | 2004-01-30 | 2010-05-12 | Fdkエナジー株式会社 | アルカリ乾電池 |
US7363225B2 (en) | 2005-06-23 | 2008-04-22 | Microsoft Corporation | Compressing language models with Golomb coding |
US20070005911A1 (en) * | 2005-07-01 | 2007-01-04 | Nec Laboratories America, Inc. | Operating System-Based Memory Compression for Embedded Systems |
US7765459B2 (en) | 2005-09-28 | 2010-07-27 | Samsung Electronics Co., Ltd. | Viterbi decoder and viterbi decoding method |
US7761766B2 (en) * | 2005-11-15 | 2010-07-20 | I365 Inc. | Methods and apparatus for modifying a backup data stream including logical partitions of data blocks to be provided to a fixed position delta reduction backup application |
JP2007239771A (ja) | 2006-03-06 | 2007-09-20 | Nisshinbo Ind Inc | 真空断熱材とそれを用いた断熱箱体 |
US7554468B2 (en) * | 2006-08-25 | 2009-06-30 | Sony Computer Entertainment Inc, | Entropy decoding methods and apparatus using most probable and least probable signal cases |
US20080082554A1 (en) | 2006-10-03 | 2008-04-03 | Paul Pedersen | Systems and methods for providing a dynamic document index |
US8291150B2 (en) | 2007-01-19 | 2012-10-16 | Mitsubishi Electric Corporation | Table device, variable length coding apparatus, variable length decoding apparatus, and variable length coding and decoding apparatus |
WO2009097162A1 (en) * | 2008-02-01 | 2009-08-06 | The Oliver Group | A method for searching and indexing data and a system for implementing same |
US8166041B2 (en) | 2008-06-13 | 2012-04-24 | Microsoft Corporation | Search index format optimizations |
US8032495B2 (en) * | 2008-06-20 | 2011-10-04 | Perfect Search Corporation | Index compression |
JP2010045598A (ja) * | 2008-08-12 | 2010-02-25 | Fujitsu Ltd | 可変長復号装置、及び、符号化装置 |
US20100125614A1 (en) * | 2008-11-14 | 2010-05-20 | D Urso Christopher Andrew | Systems and processes for functionally interpolated increasing sequence encoding |
US8004431B2 (en) | 2008-12-09 | 2011-08-23 | Qualcomm Incorporated | Fast parsing of variable-to-fixed-length codes |
US9298722B2 (en) * | 2009-07-16 | 2016-03-29 | Novell, Inc. | Optimal sequential (de)compression of digital data |
JP5588720B2 (ja) | 2010-04-20 | 2014-09-10 | 株式会社アマダ | 板材加工機に対するワーク搬入方法及び同方法に使用する棚装置 |
US9336225B2 (en) | 2011-02-24 | 2016-05-10 | A9.Com, Inc. | Encoding of variable-length data with unary formats |
-
2011
- 2011-03-31 US US13/077,479 patent/US9336225B2/en not_active Expired - Fee Related
- 2011-03-31 US US13/077,417 patent/US9195675B2/en not_active Expired - Fee Related
-
2012
- 2012-02-22 EP EP12749564.6A patent/EP2678787A4/en not_active Ceased
- 2012-02-22 JP JP2013555526A patent/JP5770316B2/ja active Active
- 2012-02-22 WO PCT/US2012/026152 patent/WO2012116086A1/en active Application Filing
- 2012-02-22 CN CN201280014197.3A patent/CN103582883B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101849258A (zh) * | 2007-11-04 | 2010-09-29 | 高通股份有限公司 | 在可缩放语音和音频编解码器中的用于经量化的mdct频谱的码簿索引的编码/解码的技术 |
Also Published As
Publication number | Publication date |
---|---|
US9336225B2 (en) | 2016-05-10 |
US9195675B2 (en) | 2015-11-24 |
EP2678787A1 (en) | 2014-01-01 |
WO2012116086A1 (en) | 2012-08-30 |
EP2678787A4 (en) | 2014-09-03 |
JP2014507732A (ja) | 2014-03-27 |
JP5770316B2 (ja) | 2015-08-26 |
US20120221540A1 (en) | 2012-08-30 |
US20120221539A1 (en) | 2012-08-30 |
CN103582883A (zh) | 2014-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103582883B (zh) | 具有组格式的可变长度数据的改进型编码和解码 | |
Stepanov et al. | SIMD-based decoding of posting lists | |
Brin | The algebra of strand splitting. I. A braided version of Thompson's group V | |
US8077061B2 (en) | System for text acquisition, transformation and/or database load | |
CN102750268A (zh) | 一种对象序列化方法、对象反序列化方法、装置及系统 | |
CN110121577A (zh) | 使用参考序列表示和处理生物信息数据的方法和系统 | |
CN107111623A (zh) | 用于基于词典的压缩的并行历史搜索和编码 | |
CN105247472A (zh) | 用于对统一码字符的可变长度代码点转码的处理器、方法、系统和指令 | |
CN106407201A (zh) | 一种数据处理方法及装置 | |
CN105528347B (zh) | 数据块储存方法、数据查询方法和数据修改方法 | |
Aharony et al. | Stringy instantons and cascading quivers | |
Edwards et al. | Parallel algorithms for Burrows–Wheeler compression and decompression | |
CN106649217A (zh) | 数据的匹配方法及装置 | |
CN110088839A (zh) | 用于生物信息学信息表示的有效数据结构 | |
US6883087B1 (en) | Processing of binary data for compression | |
JP2012124679A (ja) | 符号化データを復号する装置及び方法 | |
Rotbart | New ideas on labeling schemes | |
Klein | Basic concepts in data structures | |
CN113887201A (zh) | 文本定长纠错方法、装置、设备及存储介质 | |
Wiltshire-Gordon et al. | Specht polytopes and Specht matroids | |
Chen | New variable-length data compression scheme for solution representation of meta-heuristics | |
Ota et al. | On the construction of an antidictionary with linear complexity using the suffix tree | |
Bonchiş et al. | The language (and series) of Hammersley-type processes | |
Ozsoy | An efficient parallelization of longest prefix match and application on data compression | |
Ban et al. | On mixing properties of Markov tree-shifts |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |