买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】一种压缩和解压缩有序整数数组的方法_北京字节跳动网络技术有限公司_201710786051.5 

申请/专利权人:北京字节跳动网络技术有限公司

申请日:2017-09-04

公开(公告)日:2021-04-27

公开(公告)号:CN110019184B

主分类号:G06F16/22(20190101)

分类号:G06F16/22(20190101)

优先权:

专利状态码:有效-授权

法律状态:2021.04.27#授权;2019.08.09#实质审查的生效;2019.07.16#公开

摘要:本申请公开了一种数据压缩和解压缩方法,该压缩方法包括:数据提取步骤,即提取预定个数据记为数组并计算数组中相邻两数的差值,以及形成与数组对应的索引和数据块;索引设置步骤,设置索引条目至少包括记录数据块与第一数据块的相对位置的偏移量和记录数组中最小数据的最小值;元数据设置步骤,根据差值设置数据块中的元数据部分,元数据至少包括下阈值和小位宽数据的位宽,以确定数据块的数据压缩规则;数据压缩步骤,即根据元数据压缩数组中各数据以生成压缩数值,并将压缩数值以小位宽数据和大位宽数据形式储存在数据块中数据部分的词中。解压缩方法对应于该压缩方法,以此提供一种存储效率高、访问速度快的压缩算法。

主权项:1.一种数据压缩方法,包括:数据提取步骤,用于从待压缩的有序数据中提取预定个数据记为一个数组array,并且计算所述数组中相邻两个数的差值diff作为数组差值,以及形成与所述数组对应的索引index和数据块block;索引设置步骤,用于设置所述索引的索引条目,所述索引条目至少包括:用于记录所述数据块与第一数据块的相对位置的偏移量offset,和用于记录所述数组中的最小数据的最小值minval;元数据设置步骤,用于根据所述差值设置所述数据块中的元数据部分,所述元数据至少包括:下阈值lowater和小位宽数据的位宽smallbits以用于确定所述数据块的数据压缩规则;以及数据压缩步骤,用于根据所述元数据来压缩所述数组中的各个数据以生成压缩数值,并将所述压缩数值以小位宽数据和大位宽数据的形式储存在所述数据块中的数据部分的词中,其中,如果diff[i]≥lowater且diff[i]≤hiwater,则将diff[i]-lowater或diff[i]-lowater+1作为小位宽数据,其中diff[i]表示所述数组差值中的第i个数据,lowater表示所述数据块的下阈值,hiwater表示所述数据块的上阈值;如果不满足diff[i]≥lowater且diff[i]≤hiwater,则将diff[i]作为大位宽数据。

全文数据:一种压缩和解压缩有序整数数组的方法发明领域本申请涉及计算机机技术领域,尤其涉及数据压缩技术领域。背景技术在数据库等应用中,常常需要存储一些整数数组的索引数据。如果直接将这些索引数据存储在数据库中,不仅会占用较多的磁盘空间,而且在读取数据时会占用更多内存,使得读取时间更长,无法满足性能要求。针对此场景下存储整数数组减少存储空间和提高读取效率的性能要求,目前已开发出多种数据压缩算法。其中,PForDelta算法是目前解压缩速度较快的一种倒排文件索引压缩算法。PForDelta算法的基础思想是:对于待编码的连续k个数值如128个,找出其中10%比例的较大数,对剩下90%的数值采取一个设定的比特宽度,而10%的大数当做异常数据单独存储。但是这种方法也有缺点:对两个异常数据的间隔有限制,如果间隔过大,则需要加入更多的空间来存储间隔,降低了数据压缩率和访问速度。因此,需要一种存储效率更高、随机访问速度更快的压缩算法。发明内容本申请针对数据压缩率和随机访问的需求,开发了一种存储效率更高、随机访问速度更快的有序整数数组的压缩算法。本申请的目的在于,提供一种支持高速随机访问的压缩有序整数数组的方案。根据该方案,可以在不损失信息的前提下对数据进行压缩无损压缩,并且可以直接在压缩的数据上进行高速随机访问。该方案有效提高了存储设备的利用率和随机读取数据的速度。具体地,根据本申请的一方面,提供一种为使本申请的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。附图说明为了更清楚地说明本申请的实施例的技术方案,下面将对实施例中使用的附图进行简要说明。应理解,仅以示例的方式示出以下附图,并且以下附图不应认为是对本申请范围的限定。附图中:图1示出了根据本申请的压缩数据的结构图;图2示出了根据本申请的元数据部分的结构图;图3示出了根据本申请的数据部分的结构图;图4示出了根据本申请的一个实施例的数据压缩流程;图5示出了根据本申请的数据部分存储示例,其中小位宽数据的位宽为10比特;图6示出了根据本申请的一个实施例的数据解压缩流程;图7示出了根据本申请的位并行技术的具体示例;图8示出了根据本申请的数据压缩的结构示意图。具体实施方式下面将结合附图,对本申请的技术方案进行清楚、完整的描述。应理解,在本申请中,待压缩的数据是从小到大的有序整数数组,其中数组元素可以有重复。数据压缩原理首先,对本申请的数据压缩的原理进行说明。图1示出了根据本申请的压缩数据的结构图。如图1所示,在本申请中,在每次压缩中,从数组中提取n一般是64或128个数据进行压缩,记为数据块block。针对当前数据块建立索引index,每个索引包含两个数值:偏移量offset和当前n个数据的最小值minval。数据块包含两部分:元数据metadata部分和数据data部分。元数据部分图2示出了根据本申请的元数据部分的结构图。如图2所示,元数据部分存储当前数据块的元信息。因为在“数据”部分中存储的是小位宽数据和大位宽数据,因此需要在元数据中存储下阈值lowater和小位宽数据的位宽smallwidth。即,在元数据中设置两个值:下阈值和小位宽数据的位宽。数据部分图3示出了根据本申请的数据部分的结构图。数据部分存储数据块中的相邻数组元素之间的差值,记为数组diff,其包括n-1个整数。为提高压缩率,在本申请中,将动态选择两个阈值:下阈值lowater和上阈值hiwater。具体地,如果diff[i]≥lowater并且diff[i]≤hiwater其中,diff[i]是数组diff中的值,i是对应下标,则将diff[i]-lowater或diff[i]-lowater+1作为小位宽数据存储在“数据”部分的前部,否则直接将diff[i]作为大位宽数据存储在“数据”部分的后半部分。如图3所示,压缩后的数据由两部分组成:小位宽数据灰色和大位宽数据白色,以大位宽数据的位宽largewidth为分隔。实施例1:数据压缩方法基于上文所述的压缩原理,本申请提供一种数据压缩方法。图4示出了根据本申请的一个实施例的数据压缩流程。如图4所示,在步骤410中,从需要压缩的数据中提取n个数据记为数组阵列array,并计算数组阵列中相邻数据的差值记为数组diff,其包括n-1个整数。在步骤420中,为当前数组阵列在索引中建立索引条目,即设置偏移量bias和最小值minval。在步骤430中,对元数据metadata进行设置,即设置下阈值lowater和小位宽数据的位宽smallwidth。具体地,对元数据的设置考虑如下几种情况:a数组diff中所有值相等如果diff中所有值相等,则在元数据中,lowater=diff中的值,smallwidth=0。bmaxdiff-mindiff等于1如果数组diff中的最小值在下文中,称mindiff和最大值在下文中,称为maxdiff的差值为1,则lowater=mindiff,smallwidth=1。cmaxdiff-mindiff等于2或3如果maxdiff-mindiff等于2或3,则lowater=mindiff,smallwidth=2。dmaxdiff-mindiff大于3如果maxdiff-mindiff大于3,则需要动态选择下阈值lowater、上阈值hiwater和对应的小位宽数据的位宽smallwidth。具体地,在本实施例中,对lowater、hiwater的动态选择规则如下:从数组diff中选择两个数a和b,计算以a、b为lowater和hiwater时存储数组diff中所有整数需要的总比特数在下文中,称为totalbits。当总比特数最小时,a、b为最终的lowater和hiwater,对应的小数据位宽为smallwidth。其中,对于任意的a和b,总比特数的计算方式如下:首先,计算小位宽数据的位宽smallwidth和大位宽数据的位宽在下文中,称为largewidth。具体地,对于小位宽数据的位宽,计算用于表示b-a+1需要的最少二进制比特数,记为smallwidth。对于大位宽数据的位宽,计算用于表示maxdiff需要的最少二进制比特数,记为largewidth。然后,计算总比特数totalbits。总比特数为存储数组diff中所有大位宽数据所需要的比特数largebits与存储数组diff中所有小位宽数据所需要的比特数smallbits的和,即:totalbits=smallbits+largebits在步骤440中,对数据进行压缩。继续参照图3,如上文所述,压缩后的数据data由两部分组成:小位宽数据灰色和大位宽数据白色,并且小位宽数据和大位宽数据用大位宽数据的位宽largewidth分隔。在本实施例中,对应于上文不同的位宽,存在如下四种数据压缩情况:a数组diff中所有值相等当数组diff中所有的差值相等时,位宽为0,不需要数据,可以继续执行步骤410。bmaxdiff-mindiff等于1当maxdiff-mindiff为1时,位宽为1,在每个词word中使用1个比特表示一个压缩数值。cmaxdiff-mindiff等于2或3当maxdiff-mindiff为2或3时,位宽为2,在每个词中使用2个比特表示一个压缩数值。dmaxdiff-mindiff大于3当maxdiff-mindiff大于3时,根据如上文所述动态选择的下阈值lowater和上阈值hiwater,将待压缩数据分为小位宽数据和大位宽数据。首先,对小位宽数据进行压缩。依次在词每个词为64比特中从低位到高位选择对应于小位宽数据的位宽的比特数进行压缩存储。然后,在储存完小位宽数据后,判断有无大位宽数据。如果没有大位宽数据,则直接执行步骤410。如果有大位宽数据,则首先在图3所示的largewidth处存储大位宽数据的位宽值,然后依次使用对应于大位宽数据的位宽的比特数来存储大位宽数据。应注意,图3所示的largewidth也属于数据块的元数据,其保存在小位宽数据和大位宽数据之间。这样做的优点在于,如果所有的数据都是小位宽数据,则没有大位宽数据,亦不需要largewidth。由此可见,对于上述第a、b、c三种情况,每个数值仅使用0到2个比特保存,从而极大提高了数据压缩率,其中每个数值是diff[i]-lowater。而在情况d中,对于小位宽数据和大位宽数据,存在不同的压缩规则。具体地,小位宽数据压缩规则为:如果diff[i]≥lowater并且diff[i]≤hiwater,则压缩后数据是diff[i]-lowater+1,否则置为0。这种压缩规则的目的在于:1用0表示此处差值存储为大位宽数据;2进行随机访问时,0不会对小位宽数据的累加和产生影响;30有助于计算大位宽数据的个数。大位宽数据的压缩规则为:依次使用对应于大位宽数据的位宽的比特数来存储diff[i]。图5示出了根据本申请的数据部分存储示例,其中小位宽数据的位宽为10比特。对于64比特的词,在情况d下存储小位宽数据时,如果64除以小位宽数据的位宽的余数extra不为零,则此时压缩后每个词将会浪费与余数相对应的比特数。为了提高压缩率,本申请提供一种利于这些剩余比特的方法。具体地,如图5所示,当小位宽数据的位宽为10比特时,每个词每个词为64比特可以存储6个值,每个词会浪费4个比特。因此,对于提取的64个数据,存储其对应的63个diff值,共需要11个词。根据本申请,对于提取的64个数据即,对应的63个diff值,可以首先使用10个词来储存60个diff值。对于剩余的3个diff值共30比特,可以使用每个词中未利用的4个比特进行储存。即,将最后对应于3个diff值的30比特依次存储在前7个词中的剩余的4个比特中。因此,只需要10个词即可存储63个diff值,从而节约了储存空间。实施例2:数据解压缩方法基于上文所述的压缩原理,本申请还提供一种数据访问也称为数据解压缩方法。随机访问数据是数据压缩的逆过程,图6示出了根据本申请的一个实施例的数据访问流程。如图6所示,在步骤610中,计算当前要访问的值所在的数据块block和词word;在步骤620中,根据索引,计算当前数据块的最小值minval和对应的下阈值lowater和小位宽数据的位宽smallwidth。在步骤630中,计算当前要提取的值与当前数据块中最小值的差dmj,则当前要提取值为minval+dmj,其中j表示要访问的值在数据块中的位置下标。在步骤630中,计算当前要提取的值与数据块中最小值的差dmj时,需要累加用到的所有差值,这些差值可能存在于多个词中,还可能是大位宽数据。然而,依次串行累加速度较慢。因此,本申请还提出一种使用位并行技术提高计算速度的方法。在本申请中,对小位宽数据的单个词执行位并行技术。位并行技术包含位加法和位乘法,其原理是:在使用位乘法不会溢出时,优先采用位乘法将当前词所表示的值乘以一个乘数multiplicator,从而直接计算词中数值的累加和。否则,将词中所有的数据根据下标分为两组即,偶数组和奇数组,然后使用位加法同时进行相邻数值累加操作。这里,优先使用位乘法的原因在于现代CPU的乘法运算速度快于多次移位累加运算。具体地,根据本申请的位并行技术包括:预处理步骤、和位加法或位乘法步骤。首先,在预处理步骤中,当词中有偶数个数值时,将词中所有的数据直接分组后执行位加法或位乘法;当词中有奇数个数值时,将词中最高位的值加到较低位的一个分组中例如最低位的那个分组,然后执行位加法或位乘法。然后,在位加法或位乘法步骤中,首先判断使用位乘法是否溢出,根据该判断结果选择使用位加法或位乘法。这里,判断是否溢出规则如下:计算词中所有数值累加和的理论最大值,并计算存储该值需要最少的比特数在下文中,称为minbits。如果minbits小于当前每个数值的比特数在下文中,称为curwidth,则表明不会溢出。图7示出了根据本申请的位并行技术的具体示例。如图7所示,假设在本示例中,小位宽数据的位宽为3比特,则每个词每个词为64比特可以存储21个值。图7中深灰色处表示未使用的最高位比特。在该示例中,在进行当前词中的21个数值如图中a的累加时使用位并行运算。第一步:预处理如上文所述,此时该词中共有21个数值。首先,将最高位数值图中a最左边白色的3比特加到奇数组最低位数值处如图中c。然后,将剩下的20个记为curnums数值分为两组,下标为偶数的为一组图中b的白色比特处,下标为奇数的分一组图中c的灰色比特处。其中,偶数组提取方法为:将图中b灰色处的比特置0;奇数组的提取方法为:使用位运算将图中b右移对应于curwidth的比特数后得到c,并将白色处比特置0。接着,计算存储所有数值累加和的理论最大值需要的最少比特数minbits。具体地,在本示例中,存储所有数值累加和的理论最大值为21*7=147这是因为在本示例中,位宽为3比特,存储数值147最少占用8个比特,将该结果记为minbits。第二部:位加法或位乘法此时,minbits8比特大于curwidth3比特,使用位加法。将偶数组、奇数组的值相加,得到位宽为curwidth*26比特的10个记为curnums数值如图中e,接下来依次类推对d执行第二步。此时,minbits8比特大于curwidth6比特,继续使用位加法,从而得到位宽为curwidth*212bit的5个记为curnums数值如图中f,依次类推对f执行第二步。此时,minbits8比特小于curwidth12比特,因此可以使用位乘法。具体地,使用一个64位数值的乘数其初始值为0,在乘数中对应当前数组图中f中每个数值的最低比特位置处置1,得到以二进制表达的乘数为:0b0000000000000001000000000001000000000001000000000001000000000001。将图中f所表示的数值乘以乘数得到相应结果在下文中,称为multival。然后,将multival右移curwidth*curnums-1个比特后取最低minbits个比特位,得到词中所有值的累加和。应注意,对应于实施例1,在a、b、c情况下,词中存储的是diff[i]-lowater,而在情况d下,小位宽数值在词中存储的是diff[i]-lowater+1。因此,在计算dmj时,应将词中对应的值转换为diff[i]。接下来,为使本领域技术人员更好地理解本申请,将结合压缩和解压缩的两个具体示例,对上述两个实施例进行说明。示例1:数据压缩示例在该示例中,使用根据本申请的数据压缩方法对一个包含1000个有序整数的数组进行压缩,其具体压缩流程如下:首先,参照步骤410,每次从该数组中提取64或128个数字,记为arrayi。计算相邻两个数的差值,记为diffi,并形成索引index和数据块block。图8示出了根据本申请的数据压缩的结构示意图。如8所示,每64个数据压缩后都有一个索引和数据块与之对应。然后,参照步骤420,将arrayi对应的数据块中元数据metadata位置与第一个数据块中元数据的相对位置字节数设置为索引中的偏移量offset。然后,将arrayi的最小值设置为索引中的minval。接着,参照步骤430,动态选择元数据的下阈值lowater和小位宽数据的位宽smallwidth,并存储在元数据中。最后,参照步骤440,对每个阵列array进行数据压缩存储操作。然后,将压缩后的数据存入对应数据块的“数据”部分内。具体地,在压缩时,以词word为单位,将diff值依次存入词中,“数据”部分由多个词组成。示例2:数据解压缩示例在该示例中,使用根据本申请的数据解压缩方法随机访问1000个数据中的第500个数据,其具体解压缩流程如下:首先,参照步骤610,计算第500个数据所在的数据块和在对应数据块的位置。根据压缩流程,每个数据块存储有64个值。首先,用500-1除以64取整,得出第500个数据所在的数据块编号为7其中,数据块的编号从0开始。然后,用500-1除以64取余,得出该数据在当前数据块中的位置编号为51其中,位置编号从0开始。然后,参照步骤620,根据上一步的结果,定位到需要读取数据的数据块并读取当前数据块的元信息,即下阈值lowater和小位宽数据的位宽smallwidth,并且获取当前数据块的数据压缩规则。接着,参照步骤630,计算第500个数据的具体数值。这里,使用索引中当前数据块的最小值minval加上当前值与minval的差值dm。其中,dm的计算方法为:小位宽数据存储的差值加上大位宽数据存储的差值如果存在大位宽数据。此外,在累加小位宽数据存储的差值时,可以参照图7使用位并行技术,以提高效率。本申请的应用领域本申请的压缩解压缩方法可以应用于有序整数数组的压缩存储与读取领域,例如,数据库存储引擎领域。更具体地,本申请可以应用于数据库存储引擎的索引压缩子系统。当然,该压缩解压缩方法还可以应用于其他领域,本申请不对其进行限制。本申请的有益效果利用本申请的方法,可以动态选择数据存储的位宽,从而提高数据压缩率。此外,通过采用本申请的位并行技术,可以支持高速的随机访问。应理解,上文示例仅为本申请的具体实施方式,而不旨在限制本申请的保护范围,本申请的保护范围应以权利要求的保护范围为准。

权利要求:1.一种数据压缩方法,包括:数据提取步骤,用于从待压缩的有序数据中提取预定个数据记为一个数组array,并且计算所述数组中相邻两个数的差值diff,以及形成与所述数组对应的索引index和数据块block;索引设置步骤,用于设置所述索引的索引条目,所述索引条目至少包括:用于记录所述数据块与第一数据块的相对位置的偏移量offset,和用于记录所述数组中的最小数据的最小值minval;元数据设置步骤,用于根据所述差值设置所述数据块中的元数据部分,所述元数据至少包括:下阈值lowater和小位宽数据的位宽smallbits以用于确定所述数据块的数据压缩规则;以及数据压缩步骤,用于根据所述元数据来压缩所述数组中的各个数据以生成压缩数值,并将所述压缩数值以小位宽数据和大位宽数据的形式储存在所述数据块中的数据部分的词中。2.根据权利要求1所述的数据压缩方法,其中,所述元数据设置步骤进一步包括:在所述差值中的所有值均相等时,将下阈值设置为所述差值,并将所述小位宽数据的位宽设置为零。3.根据权利要求2所述的数据压缩方法,其中,所述数据压缩步骤进一步包括:不在所述数据部分中储存压缩数值,继续执行所述数据提取步骤。4.根据权利要求1所述的数据压缩方法,其中,所述元数据设置步骤进一步包括:在所述差值中的最大值和最小值相差为1时,将下阈值设置为所述差值中的最小值,并将所述小位宽数据的位宽设置为1比特。5.根据权利要求4所述的数据压缩方法,其中,所述数据压缩步骤进一步包括:在所述数据部分的词中使用1比特表示一个压缩数值。6.根据权利要求1所述的数据压缩方法,其中,所述元数据设置步骤进一步包括:在所述差值中的最大值和最小值相差为2或3时,将下阈值设置为所述差值中的最小值,并将所述小位宽数据的位宽设置为2比特。7.根据权利要求6所述的数据压缩方法,其中,所述数据压缩步骤进一步包括:在所述数据部分的词中使用2比特表示一个压缩数值。8.根据权利要求3、5、7中任一项所述的数据压缩方法,其中,所述数据压缩步骤包括:在所述数据部分的词中用diff[i]-lowater表示每个压缩数值,其中diff[i]表示第i个数据对应的差值,lowater表示所述数据块的下阈值。9.根据权利要求1所述的数据压缩方法,其中,所述元数据设置步骤进一步包括:在所述差值中的最大值和最小值相差大于3时,动态地选择所述下阈值和小位宽数据的位宽。10.根据权利要求9所述的数据压缩方法,其中,所述动态选择步骤进一步包括:选择步骤,用于从所述差值中任选两个数值,计算步骤,用于以所述被选中的两个数值为下阈值和上阈值,计算存储所述差值中所有整数需要的总比特数;以及比较步骤,用于重复上述选择步骤和计算步骤,并且比较各个计算步骤的计算结果,其中最小的总比特数对应的两个数值作为最终的下阈值和上阈值,并记录对应的最终的小位宽数据的位宽。11.根据权利要求9所述的数据压缩方法,其中,所述数据压缩步骤进一步包括:依次在所述数据中的词中,从低位到高位选择与所述小位宽数据的位宽对应的比特数,用于压缩并存储小位宽数据;判断是否存在大位宽数据,如果没有大位宽数据,则继续执行所述数据提取步骤,如果存在大位宽数据,则首先存储大位宽数据的位宽的数值,然后依次选择与所述大位宽数据的位宽对应的比特数,用于压缩并存储大位宽数据。12.根据权利要求11所述的数据压缩方法,其中,所述存储小位宽数据的步骤包括:如果diff[i]≥lowater且diff[i]≤hiwater,则在所述数据部分的词中用diff[i]-lowater+1表示相应压缩数值,其中diff[i]表示第i个数据对应的差值,lowater表示所述数据块的下阈值,hiwater表示所述数据块的上阈值;如果不满足diff[i]≥lowarer且diff[i]≤hiwater,则在所述数据部分的词中将相应压缩数值置零。13.根据权利要求11所述的数据压缩方法,其中,所述存储大位宽数据的步骤包括:使用对应于大位宽数据的位宽的比特数储存diff[i],其中diff[i]表示第i个数据对应的差值。14.根据权利要求11所述的数据压缩方法,其中,所述储存小位宽数据进一步包括:在所述数据中的词除以所述小位宽数据的位宽的余数不为零时,利用所述数据中的词的剩余比特储存所述差值中的数值。15.根据权利要求1所述的数据压缩方法,还包括:重复执行所述数据提取步骤、索引设置步骤、元数据设置步骤、数据压缩步骤,直到所述待压缩的数据被全部被压缩。16.一种数据解压缩方法,用于对多个压缩数据中的待提取数据进行解压缩,包括:待提取数据位置确定步骤,用于计算所述待提取数据所在的数据块的位置以及在所述数据块的相应词中的位置,并在所述数据块的数据部分中获取相应的压缩数值;索引条目获取步骤,用于基于所述数据块获取相应的索引条目,其中所述索引条目至少包括:用于记录所述数据块与第一数据块的相对位置的偏移量,和用于记录所述数据块对应的数组中的最小数据的最小值;元数据获取步骤,用于获取所述数据块的元数据部分记录的下阈值和小位宽数据的位宽,以确定所述数据块对应的数据压缩规则;待提取数据恢复步骤,用于基于所述数据块的数据压缩规则、所述偏移量和所述最小值,计算所述压缩数值对应的待提取数据的实际数值。17.根据权利要求16所述的数据解压缩方法,其中,所述数据恢复步骤包括:所述待提取数据的实际数值被确定为minval+dmj,其中,minval为所述最小值,其中diff[i]表示第i个数据对应的差值,j表示待提取数据在所数据块的相应词中的位置。18.根据权利要求17所述的数据解压缩方法,其中,所述数据恢复步骤进一步包括:通过位并行技术进行所述累加计算,其中,所述位并行技术包括:预处理步骤,用于将所述待提取数据所在的词的压缩数值分为奇数组和偶数组,其中当所述词中有偶数个压缩数值时,将所述压缩数值直接分为两组,当所述词中有奇数个压缩数值时,将所述词中最高位的压缩数值加到较低位的分组中;和位加法或位乘法步骤,用于通过溢出判断来判断是否溢出,如果不会溢出,则选择位乘法进行计算,如果溢出,则选择位加法进行计算。19.根据权利要求18所述的数据解压缩方法,其中,所述溢出判断步骤包括:计算所述词中所有压缩数值累加和的理论最大值,计算存储所述理论最大值需要的最少比特数,如果所述最少比特数小于当前每个压缩数值的比特数,则判断结果为不溢出。20.一种数据压缩装置,包括:数据提取装置,用于从待压缩的有序数据中提取预定个数据记为一个数组array,并且计算所述数组中相邻两个数的差值diff,以及形成与所述数组对应的索引index和数据块block;索引设置装置,用于设置所述索引的索引条目,所述索引条目至少包括:用于记录所述数据块与第一数据块的相对位置的偏移量offset,和用于记录所述数组中的最小数据的最小值minval;元数据设置装置,用于根据所述差值设置所述数据块中的元数据部分,所述元数据至少包括:下阈值lowater和小位宽数据的位宽smallbits以用于确定所述数据块的数据压缩规则;以及数据压缩装置,用于根据所述元数据来压缩所述数组中的各个数据以生成压缩数值,并将所述压缩数值以小位宽数据和大位宽数据的形式储存在所述数据块中的数据部分的词中。21.一种数据压缩设备,包括:存储器,用于存储待压缩的多个数据,所述数据有序排列;处理器,用于存储执行如下步骤的指令:数据提取步骤,用于从所述待压缩的多个数据中提取预定个数据记为一个数组array,并且计算所述数组中相邻两个数的差值diff,以及形成与所述数组对应的索引index和数据块block;索引设置步骤,用于设置所述索引的索引条目,所述索引条目至少包括:用于记录所述数据块与第一数据块的相对位置的偏移量offset,和用于记录所述数组中的最小数据的最小值minval;元数据设置步骤,用于根据所述差值设置所述数据块中的元数据部分,所述元数据至少包括:下阈值lowater和小位宽数据的位宽smallbits以用于确定所述数据块的数据压缩规则;以及数据压缩步骤,用于根据所述元数据来压缩所述数组中的各个数据以生成压缩数值,并将所述压缩数值以小位宽数据和大位宽数据的形式储存在所述数据块中的数据部分的词中。

百度查询: 北京字节跳动网络技术有限公司 一种压缩和解压缩有序整数数组的方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。