CN110019184A - 一种压缩和解压缩有序整数数组的方法 - Google Patents
一种压缩和解压缩有序整数数组的方法 Download PDFInfo
- Publication number
- CN110019184A CN110019184A CN201710786051.5A CN201710786051A CN110019184A CN 110019184 A CN110019184 A CN 110019184A CN 201710786051 A CN201710786051 A CN 201710786051A CN 110019184 A CN110019184 A CN 110019184A
- Authority
- CN
- China
- Prior art keywords
- data
- bit wide
- value
- compression
- array
- 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.)
- Granted
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2272—Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (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)
Abstract
本申请公开了一种数据压缩和解压缩方法,该压缩方法包括:数据提取步骤,即提取预定个数据记为数组并计算数组中相邻两数的差值,以及形成与数组对应的索引和数据块;索引设置步骤,设置索引条目至少包括记录数据块与第一数据块的相对位置的偏移量和记录数组中最小数据的最小值;元数据设置步骤,根据差值设置数据块中的元数据部分,元数据至少包括下阈值和小位宽数据的位宽,以确定数据块的数据压缩规则;数据压缩步骤,即根据元数据压缩数组中各数据以生成压缩数值,并将压缩数值以小位宽数据和大位宽数据形式储存在数据块中数据部分的词中。解压缩方法对应于该压缩方法,以此提供一种存储效率高、访问速度快的压缩算法。
Description
发明领域
本申请涉及计算机机技术领域,尤其涉及数据压缩技术领域。
背景技术
在数据库等应用中,常常需要存储一些整数数组的索引数据。如果直接将这些索引数据存储在数据库中,不仅会占用较多的磁盘空间,而且在读取数据时会占用更多内存,使得读取时间更长,无法满足性能要求。
针对此场景下存储整数数组减少存储空间和提高读取效率的性能要求,目前已开发出多种数据压缩算法。其中,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。
b)(maxdiff-mindiff)等于1
如果数组diff中的最小值(在下文中,称mindiff)和最大值(在下文中,称为maxdiff)的差值为1,则lowater=mindiff,smallwidth=1。
c)(maxdiff-mindiff)等于2或3
如果(maxdiff-mindiff)等于2或3,则lowater=mindiff,smallwidth=2。
d)(maxdiff-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。
b)(maxdiff-mindiff)等于1
当(maxdiff-mindiff)为1时,位宽为1,在每个词(word)中使用1个比特表示一个压缩数值。
c)(maxdiff-mindiff)等于2或3
当(maxdiff-mindiff)为2或3时,位宽为2,在每个词中使用2个比特表示一个压缩数值。
d)(maxdiff-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不会对小位宽数据的累加和产生影响;3)0有助于计算大位宽数据的个数。
大位宽数据的压缩规则为:依次使用对应于大位宽数据的位宽的比特数来存储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。
第二部:位加法或位乘法
此时,minbits(8比特)大于curwidth(3比特),使用位加法。将偶数组、奇数组的值相加,得到位宽为curwidth*2(6比特)的10个(记为curnums)数值(如图中e),接下来依次类推对d执行第二步。
此时,minbits(8比特)大于curwidth(6比特),继续使用位加法,从而得到位宽为curwidth*2(12bit)的5个(记为curnums)数值(如图中f),依次类推对f执行第二步。
此时,minbits(8比特)小于curwidth(12比特),因此可以使用位乘法。
具体地,使用一个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)个数字,记为array i。计算相邻两个数的差值,记为diff i,并形成索引(index)和数据块(block)。
图8示出了根据本申请的数据压缩的结构示意图。如8所示,每64个数据压缩后都有一个索引和数据块与之对应。
然后,参照步骤420,将array i对应的数据块中元数据(metadata)位置与第一个数据块中元数据的相对位置(字节数)设置为索引中的偏移量(offset)。然后,将array i的最小值设置为索引中的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使用位并行技术,以提高效率。
本申请的应用领域
本申请的压缩/解压缩方法可以应用于有序整数数组的压缩存储与读取领域,例如,数据库存储引擎领域。更具体地,本申请可以应用于数据库存储引擎的索引压缩子系统。
当然,该压缩/解压缩方法还可以应用于其他领域,本申请不对其进行限制。
本申请的有益效果
利用本申请的方法,可以动态选择数据存储的位宽,从而提高数据压缩率。此外,通过采用本申请的位并行技术,可以支持高速的随机访问。
应理解,上文示例仅为本申请的具体实施方式,而不旨在限制本申请的保护范围,本申请的保护范围应以权利要求的保护范围为准。
Claims (21)
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)以用于确定所述数据块的数据压缩规则;以及
数据压缩步骤,用于根据所述元数据来压缩所述数组中的各个数据以生成压缩数值,并将所述压缩数值以小位宽数据和大位宽数据的形式储存在所述数据块中的数据部分的词中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710786051.5A CN110019184B (zh) | 2017-09-04 | 2017-09-04 | 一种压缩和解压缩有序整数数组的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710786051.5A CN110019184B (zh) | 2017-09-04 | 2017-09-04 | 一种压缩和解压缩有序整数数组的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110019184A true CN110019184A (zh) | 2019-07-16 |
CN110019184B CN110019184B (zh) | 2021-04-27 |
Family
ID=67186198
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710786051.5A Active CN110019184B (zh) | 2017-09-04 | 2017-09-04 | 一种压缩和解压缩有序整数数组的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110019184B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110808738A (zh) * | 2019-09-16 | 2020-02-18 | 平安科技(深圳)有限公司 | 数据压缩方法、装置、设备及计算机可读存储介质 |
CN111680095A (zh) * | 2020-06-10 | 2020-09-18 | 上海城市地理信息系统发展有限公司 | 一种处理点云数据的方法、装置和电子设备 |
CN112152634A (zh) * | 2020-06-01 | 2020-12-29 | 南京大学 | 分块压缩编码方法、装置、计算机设备及可读存储介质 |
CN112988673A (zh) * | 2021-02-22 | 2021-06-18 | 山东英信计算机技术有限公司 | 一种处理解压缩过程中数据溢出的方法和设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102210105A (zh) * | 2008-11-10 | 2011-10-05 | 苹果公司 | 用于压缩整数值数据流的系统和方法 |
CN103312336A (zh) * | 2013-06-28 | 2013-09-18 | 京信通信系统(中国)有限公司 | 一种数据压缩的方法及装置 |
CN104281616A (zh) * | 2013-07-10 | 2015-01-14 | 北京旋极信息技术股份有限公司 | 数据处理方法 |
CN104679776A (zh) * | 2013-11-29 | 2015-06-03 | 腾讯科技(深圳)有限公司 | 倒排索引的压缩方法及装置 |
CN105763287A (zh) * | 2014-12-16 | 2016-07-13 | 中兴通讯股份有限公司 | 数据传输方法及装置 |
US20170052974A1 (en) * | 2015-08-21 | 2017-02-23 | Waziki Corporation | Systems, media and methods for virtualized data compression |
CN106685429A (zh) * | 2016-12-29 | 2017-05-17 | 广州华多网络科技有限公司 | 整数压缩方法及装置 |
-
2017
- 2017-09-04 CN CN201710786051.5A patent/CN110019184B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102210105A (zh) * | 2008-11-10 | 2011-10-05 | 苹果公司 | 用于压缩整数值数据流的系统和方法 |
CN103312336A (zh) * | 2013-06-28 | 2013-09-18 | 京信通信系统(中国)有限公司 | 一种数据压缩的方法及装置 |
CN104281616A (zh) * | 2013-07-10 | 2015-01-14 | 北京旋极信息技术股份有限公司 | 数据处理方法 |
CN104679776A (zh) * | 2013-11-29 | 2015-06-03 | 腾讯科技(深圳)有限公司 | 倒排索引的压缩方法及装置 |
CN105763287A (zh) * | 2014-12-16 | 2016-07-13 | 中兴通讯股份有限公司 | 数据传输方法及装置 |
US20170052974A1 (en) * | 2015-08-21 | 2017-02-23 | Waziki Corporation | Systems, media and methods for virtualized data compression |
CN106685429A (zh) * | 2016-12-29 | 2017-05-17 | 广州华多网络科技有限公司 | 整数压缩方法及装置 |
Non-Patent Citations (1)
Title |
---|
BONELEE: "倒排索引PForDelta压缩算法——基本假设和霍夫曼压缩同", 《HTTPS://WWW.CNBLOGS.COM/BONELEE/P/6882088.HTML》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110808738A (zh) * | 2019-09-16 | 2020-02-18 | 平安科技(深圳)有限公司 | 数据压缩方法、装置、设备及计算机可读存储介质 |
CN110808738B (zh) * | 2019-09-16 | 2023-10-20 | 平安科技(深圳)有限公司 | 数据压缩方法、装置、设备及计算机可读存储介质 |
CN112152634A (zh) * | 2020-06-01 | 2020-12-29 | 南京大学 | 分块压缩编码方法、装置、计算机设备及可读存储介质 |
CN112152634B (zh) * | 2020-06-01 | 2024-04-30 | 南京大学 | 分块压缩编码方法、装置、计算机设备及可读存储介质 |
CN111680095A (zh) * | 2020-06-10 | 2020-09-18 | 上海城市地理信息系统发展有限公司 | 一种处理点云数据的方法、装置和电子设备 |
CN111680095B (zh) * | 2020-06-10 | 2021-01-12 | 上海城市地理信息系统发展有限公司 | 一种处理点云数据的方法、装置和电子设备 |
CN112988673A (zh) * | 2021-02-22 | 2021-06-18 | 山东英信计算机技术有限公司 | 一种处理解压缩过程中数据溢出的方法和设备 |
CN112988673B (zh) * | 2021-02-22 | 2023-02-28 | 山东英信计算机技术有限公司 | 一种处理解压缩过程中数据溢出的方法和设备 |
US11809807B1 (en) | 2021-02-22 | 2023-11-07 | Shandong Yingxin Computer Technologies Co., Ltd. | Method and device for processing data overflow in decompression process |
Also Published As
Publication number | Publication date |
---|---|
CN110019184B (zh) | 2021-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106875011B (zh) | 二值权重卷积神经网络加速器的硬件架构及其计算流程 | |
CN110019184A (zh) | 一种压缩和解压缩有序整数数组的方法 | |
CN111898733B (zh) | 一种深度可分离卷积神经网络加速器架构 | |
CN109993293B (zh) | 一种适用于堆叠式沙漏网络的深度学习加速器 | |
CN109948774A (zh) | 基于网络层捆绑运算的神经网络加速器及其实现方法 | |
CN112668708B (zh) | 一种提高数据利用率的卷积运算装置 | |
CN109977347B (zh) | 一种支持多模式配置的可重构fft处理器 | |
CN112464296B (zh) | 一种用于同态加密技术的大整数乘法器硬件电路 | |
CN109840585B (zh) | 一种面向稀疏二维卷积的运算方法和系统 | |
CN113254391B (zh) | 一种神经网络加速器卷积计算和数据载入并行方法及装置 | |
CN109240644B (zh) | 一种用于伊辛芯片的局部搜索方法及电路 | |
CN114268323B (zh) | 支持行存的数据压缩编码方法、装置及时序数据库 | |
CN113222129A (zh) | 一种基于多级缓存循环利用的卷积运算处理单元及系统 | |
CN110990299B (zh) | 非规整组相联cache组地址映射方法 | |
CN117633418A (zh) | 基于矩阵运算的多维快速傅立叶变换加速方法 | |
CN116842542A (zh) | 无线传感网络敏感数据的分层加密存储方法及装置 | |
CN110580675A (zh) | 一种适用于gpu硬件的矩阵存储与计算方法 | |
CN113448624B (zh) | 数据存取方法及装置、系统、ai加速器 | |
CN115238879A (zh) | 深度神经网络的架构搜索方法及硬件加速器 | |
CN110807479A (zh) | 一种基于Kmeans算法的神经网络卷积计算加速方法 | |
CN106557430A (zh) | 一种缓存数据刷盘方法及装置 | |
CN113505825B (zh) | 一种图计算装置 | |
CN110728367B (zh) | 用于神经网络的数据存储方法及装置 | |
CN118171710B (zh) | 一种稀疏矩阵乘法的npu加速方法 | |
CN116151340B (zh) | 并行随机计算神经网络系统及其硬件压缩方法、系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | 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 |