浮点数流式数据压缩方法、装置、计算机设备及介质与流程

未命名 08-17 阅读:122 评论:0


1.本发明涉及数据处理技术领域,特别涉及一种浮点数流式数据压缩方法、装置、计算机设备及介质。


背景技术:

2.压缩方法能有效地降低数据的体积,减少空间占用,减少需要io的数据量从而提高数据处理的速度。随着数据处理技术的快速进步,数据流处理越来越普遍。传统的压缩方法,比如zstd(zstandard,无损压缩算法)是面向固定数据的压缩方法,即针对一个固定的文件或一个较大的数据块进行全局搜索而得到较好的压缩效果。流式数据则是不断产生、随时处理的,需要利用数据前后之间的关系进行编码压缩。
3.gorilla算法是facebook公司提出的方法,它利用数据之间二进制形式上相似性,将数据和之前的数据进行异或,然后去掉头尾的零进行编码存储。这种方法在真实的场景中效果并不好,原因是浮点数有特殊的内部表示,十进制的相似性并不意味着二进制也是相似的。
4.类似的,有些系统将浮点数存成字符串,从而得到比较重复的表示,借用一些通用的压缩方法也可以得到较好的压缩比。但这意味着每次数据读取和处理时都要把字符串转成浮点数,开销非常大。
5.victoriametrics公司提供了另一种思路,它对浮点数进行一定的精度舍弃,并转成整型数来存储。这种方法能有效地提高压缩比,但在很多场景中,丢失精度是用户所无法接受的。
6.chimp是另一种对gorilla算法的改进,它研究了大量的开放数据集,对 gorilla算法的位编码方案进行了优化,从而在绝大部分场合下进了比 gorilla算法表现要好。但它也继承了gorilla位编码所引入的较低的解码效率。
7.因此,现有的浮点数流式数据压缩存在着数据读取和处理时开销大、存储精度低以及解码效率低的问题。


技术实现要素:

8.有鉴于此,本发明实施例提供了一种浮点数流式数据压缩方法,以解决了现有技术中浮点数流式数据压缩存在着数据读取和处理时开销大、存储精度低以及解码效率低的问题。该方法包括:建立索引表,所述索引表设有n个桶,每个桶有m个槽,n和m均为正整数;基于当前浮点数的二进制表示,确定作为索引的key值;根据所述key值利用哈希查找法在所述n个桶中寻找目标桶;利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置;
根据当前浮点数与所述基础值进行异或计算得到的第二值的零的位数情况以及所述基础值在当前窗口的位置对当前浮点数进行编码;将编码后的浮点数依据预设的存储格式进行压缩存储。
9.本发明实施例还提供了一种浮点数压缩装置,以解决了现有技术中浮点数流式数据压缩存在着数据读取和处理时开销大、存储精度低以及解码效率低的问题。该装置包括:索引表建立模块,用于建立索引表,所述索引表设有n个桶,每个桶有m个槽,n和m均为正整数;key值确定模块,用于基于当前浮点数的二进制表示,确定作为索引的key值;目标桶寻找模块,用于根据所述key值利用哈希查找法在所述n个桶中寻找目标桶;基础值寻找模块,用于利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置;编码模块,用于根据当前浮点数与所述基础值进行异或计算得到的第二值的零的位数情况以及所述基础值在当前窗口的位置对当前浮点数进行编码;存储模块,用于将编码后的浮点数依据预设的存储格式进行压缩存储。
10.本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的浮点数流式数据压缩方法,以解决了现有技术中浮点数流式数据压缩存在着数据读取和处理时开销大、存储精度低以及解码效率低的问题。
11.本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的浮点数流式数据压缩方法的计算机程序,以解决了现有技术中浮点数流式数据压缩存在着数据读取和处理时开销大、存储精度低以及解码效率低的问题。
12.与现有技术相比,本说明书实施例采用的上述至少一个技术方案能够达到的有益效果至少包括:建立索引表,索引表设有n个桶,每个桶有m个槽,n和m均为正整数;基于当前浮点数的二进制表示,确定作为索引的key值;根据key值利用哈希查找法在n个桶中寻找目标桶;利用线性查找法将当前浮点数分别与目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录基础值在当前窗口的位置;根据当前浮点数与基础值进行异或计算得到的第二值的零的位数情况以及基础值在当前窗口的位置对当前浮点数进行编码;将编码后的浮点数依据预设的存储格式进行压缩存储。本技术通过使用异或的方法实现数据的无损压缩,通过利用对历时窗口上的数据高效搜索提高了压缩率,并且采用了简化的数据表示,有利于提高解压速度。
附图说明
13.为了更清楚地说明本技术实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
14.图1是本发明实施例提供的一种浮点数流式数据压缩方法的流程图;
图2是本发明实施例提供的索引表的结构示意图;图3是本发明实施例提供的编码格式的结构示意图;图4是本发明实施例提供的预设的存储格式的结构示意图;图5是本发明实施例提供的一种计算机设备的结构框图;图6是本发明实施例提供的一种浮点数流式数据压缩装置的结构框图。
具体实施方式
15.下面结合附图对本技术实施例进行详细描述。
16.以下通过特定的具体实例说明本技术的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本技术的其他优点与功效。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。本技术还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本技术的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
17.在本发明实施例中,提供了一种浮点数流式数据压缩方法,如图1所示,该方法包括:步骤s1、建立索引表,所述索引表设有n个桶,每个桶有m个槽,n和m均为正整数;步骤s2、基于当前浮点数的二进制表示,确定作为索引的key值;步骤s3、根据所述key值利用哈希查找法在所述n个桶中寻找目标桶;步骤s4、利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置;步骤s5、根据当前浮点数与所述基础值进行异或计算得到的第二值的零的位数情况以及所述基础值在当前窗口的位置对当前浮点数进行编码;步骤s6、将编码后的浮点数依据预设的存储格式进行压缩存储。
18.由图1所示的流程可知,在本发明实施例中,通过步骤3和步骤5可以看出,本技术继承了gorilla的异或思想实现了数据的无损压缩,利用对历史窗口上的数据高效搜索来提高压缩率,并利用简化的数据表示来提高解压速度。
19.下面参照图2,具体描述如何基于当前浮点数的二进制表示,确定作为索引的key值,即如何通过精简索引来加速对历史窗口上的历史值进行有效查找。
20.如图2的上半部分所示,随着数据的不断到达,会形成一个窗口,先设定128个值作为滑动窗口。用当前浮点数和前面的值进行比较,以选取最优值,但每个值都要比较128次,这个操作非常繁琐。因此本技术采用紧凑的内存索引来在找到较优值的情况下,减少比较次数。
21.如图2的下半部分所示,先定义一个索引表,假定有n个桶,每个桶有m个槽(slot),其中,桶是通过对指定列进行哈希计算来实现的,通过哈希值将一个列名下的数据切分为一组桶,并使每个桶对应于该列名下的一个存储文件,槽是用于保存数据的一个单元。一般情况下,m=8就可以达到很好的效果,如图2所示,本实施例中m=8,整个hashmap在内存中是
完全连续的,仅通过计算即可得到每个桶的地址。基于这个基本结构,然后具体描述如何基于当前浮点数的二进制表示,确定作为索引的key值,并利用key值进行基础值查找到的,下面是查找基础值的三个变种查找方法。
22.在一个实施例中,是基于当前浮点数的二进制尾部索引的查找,具体包括以下步骤:基于当前浮点数的二进制的尾部若干位作为索引的第一key值;根据第一key值利用哈希查找法在所述n个桶中寻找目标桶;利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置。
23.在一个实施例中,是基于当前浮点数的二进制的双索引查找,类似尾部索引查找的索引表,本方法是另外建立一个头部索引查找,即包括尾部索引查找和头部索引查找的双索引查找,具体包括以下步骤:基于当前浮点数的二进制的尾部若干位作为索引的第一key值;再基于当前浮点数的二进制的头部若干位作为索引的第二key值,当浮点数为64位时,用符号位加上高第6位到高第12位作为索引的第二key值,当浮点数为32位时,用符号位加上高第6位到高第12位作为索引的第二key值。
24.具体实施时,双索引查找的过程为:首先基于当前浮点数的二进制的尾部若干位作为索引的第一key值;根据第一key值利用哈希查找法在所述n个桶中寻找目标桶;利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置;如果基于第一key值没有找到基础值,则基于当前浮点数的二进制的头部若干位作为索引的第二key值,当浮点数为64位时,用符号位加上高第6位到高第12位作为索引的第二key值,当浮点数为32位时,用符号位加上高第6位到高第12位作为索引的第二key值,选取这些位的原因是对于不同的浮点数而言,这些位的变动对异或结果影响较大;然后根据第二key值利用哈希查找法在所述n个桶中寻找目标桶;利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置;如果基于第一key值和第二key值都没有找到基础值,则采用当前浮点数的上一个浮点数作为基础值。
25.在一个实施例中,是基于当前浮点数的二进制的混合查找,由于双索引查找方案中的两个索引表的内存开销较大,查找的次数也更大,虽然效果可能会好,但混合查找的这个变种则是综合尾部索引查找和双索引查找的方法,找到速度更好,效果接近的方法,具体包括以下步骤:当浮点数为64位时,基于当前浮点数的二进制的符号位、高第7位和低6位作为索引的第三key值;当浮点数为32为时,基于当前浮点数的二进制的符号位、高第5位和低7位作为索引的第三key值;
然后根据第三key值利用哈希查找法在所述n个桶中寻找目标桶;利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置。
26.在一个实施例中,在步骤s4中,如果利用key值查找基础值时,没有找到最佳的基础值时,则采用当前浮点数的上一个浮点数作为基础值。
27.因此,本技术的实施例通过设置三种不同的对历史数据的查找方法,均采用了紧凑的内存索引来找到对浮点数编码用的基础值,减少了比较次数,提高了查找速度和解压速度。根据浮点数的数据情况选择合适的查找方法,可以有效的提高查找速度。
28.在一个实施例中,对如何根据当前浮点数与所述基础值进行异或计算得到的第二值的零的位数情况以及所述基础值在当前窗口的位置对当前浮点数进行编码,进行详细描述,具体包括以下步骤:所述基础值在当前窗口的位置表示为offset(偏移),offset取值为0~(2
m-1-1),当前浮点数与所述基础值进行异或计算得到的第二值表示为xorj= xj^xi,xj为当前浮点数,xi为基础值;当xorj的各位均为零时,则编码时只记录offset;当xorj至少有一位不为零时,计算xorj尾部的零长度l1和xorj头部的零长度l2,l1和l2均为按字节取整,则xorj首尾总的零长度l=l1+l2,其中,所述零长度为连续的零的位数;如果l大于等于1,则编码时记录offset,并将offset的第m位置成1,然后用4bit记录l1、用4bit记录l以及用至少一个字节记录xorj除去尾部的l1长度的零后剩下的部分;如果l小于1,则编码时将offset的前m-1位标记为全1,并将offset的第m位置成1,然后记录当前浮点数的原始值。
29.下面以m取8为例进行描述,参照图3的编码格式,设xi是找到的基础值,它是一个64位的浮点数,而xj是当前浮点数,xorj= xj^xi,分如下情况讨论,其中位置用offset表示,它是0~127的值。
30.如果xorj的各位均为零时(xorj==0),也就是和offset位置的数完全相等,则编码时只记录offset,流程退出,参照图3中的第一行;否则offset要加上128,即将第8位置成1,表示后续还有信息,具体参照下面的流程;当xorj至少有一位不为零时,计算xorj尾部的零长度l1和xorj头部的零长度l2,l1和l2均为按字节取整,则xorj首尾总的零长度l=l1+l2,其中,所述零长度为连续的零的位数;例如,xorj头部有10位连续的零,尾部有7位连续的零,因为8位为一个字节,则头部的10位按字节取整为1,尾部的7位按字节取整为0,则l1=1,l2=0,l=l1+l2=1;参照图3中的第二行,如果l大于等于1,则编码时记录offset,并将offset的第8位置成1,然后用4bit记录l1(尾零长度)、用4bit记录l(总零长度)以及用至少一个字节记录xorj除去尾部的l1长度的零后剩下的部分(图3第二行的非零部分);参照图3中的第三行,如果l小于1,则编码时将offset的前7位标记为全1的特殊的tag为127(图4中第三行的0x7f),并将offset的第8位置成1,然后记录当前浮点数的原始
值,由于本实施例中的浮点数为64位,即此时记录原始的8个字节值(图3第三行的非零部分)。
31.因此,基于上述实施例的编码方法,对于持续到达的一列浮点数(x1,x2,x3,...,xn),它的预设的存储格式如图4所示,头部包括:魔数、版本号、数据原始长度、数据压缩长度和编码压缩所用参数(图中的“参数”);所述头部之后依次记录第一个浮点数的原始值(图中的“第一个值”)和各个浮点数编码压缩后的值(图中的“xor值的编码表示”)。其中,魔数用于校验合法的压缩数据块,版本号用于检测未来版本的兼容性,数据原始长度用于解压缩的校验,数据压缩长度用于还原数据,编码压缩所用参数一般包括压缩的方法、数据宽度、采用的是哪种基础值查找方法、预处理的参数以及浮点数是否转整型等。头部之后记录的是第一个原始值,这是压缩的基础,后面记录的都是编码压缩后的值,它是基于和前面某个位置的值进行异或后,再对异或的结果值进行编码得到的。
32.通过上述实施例的对浮点数的编码方法,避免了昂贵的位编码操作,利用简化的数据表示来提高解压速度,是一种无损的、快速和高压缩率的流式浮点数压缩方法,减少了数据的体积,实现了高速的数据处理。
33.在一个实施例中,在所述利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置的步骤之后,还包括:如果所述基础值所在的槽是未填入数据的窗口或是查找所述基础值时滑过的窗口,则将当前浮点数填入该槽;如果所述基础值所在的槽中数据已经填满,则用当前浮点数替换最先存入该槽中的数据。
34.通过将当前浮点数填入到槽中或者替换槽中最老的数据,以更新槽中数据,可以使后续的浮点数数据与槽中的数据更为相近,可以提高浮点数据的查找速度和编码效率。
35.在一个实施例中,以最简单的按尾部索引的查找方法进行说明,为了说明方便,采用32位的浮点数。对于1.1~2.0的10个浮点数,其二进制表示如下:float: 1.1, binary:00111111100011001100110011001101float: 1.2, binary:00111111100110011001100110011010float: 1.3, binary:00111111101001100110011001100110float: 1.4, binary:00111111101100110011001100110011float: 1.5, binary:00111111110000000000000000000000float: 1.6, binary:00111111110011001100110011001101float: 1.7, binary:00111111110110011001100110011010float: 1.8, binary:00111111111001100110011001100110float: 1.9, binary:00111111111100110011001100110011float: 2.0, binary:01000000000000000000000000000000对于1.5,它的尾部8位是全0,因此索引号也是0,因此在第0号桶里,只有这一个值。
36.当处理到2.0 时,它也取低8位,索引号也是0,因此去0号桶里,找到了1.5这个值,里面记录它的编码号是5,而2.0与1.5异或之后的xorj值是01111111110000000000000000
000000,按字节计算,头部的零只有1位,因此头部的零长度l2是0,尾部的零有22位,因此尾部的零长度l1是2,则最终的编码表示参照图4的第二行,按图4示意的编码结构可以得到如下所示的表示:1:首位0000101:七位偏移位,表示它相对的基准窗口中的第5个值;0010:用四位表示尾部的零长度l1,此处表示尾部有2个字节长度的0;0010:用四位表示总的零长度l,此处总共也是2个字节长度的0;0111111111000000:xorj值去除尾部2个字节长度的零后,需要保留的数据位。
37.本技术的浮点数流式数据压缩方法,由于避免了昂贵的位编码操作,本技术给出的变种解压速度比 gorilla 方法要快数倍,比zstd方法要快 5~6倍。编码速度和zstd速度差不多,但压缩率比gorilla要高几倍,和zstd差不多。
38.在本实施例中,提供了一种计算机设备,如图5所示,包括存储器501、处理器502及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的浮点数流式数据压缩方法。
39.具体的,该计算机设备可以是计算机终端、服务器或者类似的运算装置。
40.在本实施例中,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的浮点数流式数据压缩方法的计算机程序。
41.具体的,计算机可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机可读存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读存储介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
42.基于同一发明构思,本发明实施例中还提供了一种浮点数流式数据压缩装置,如下面的实施例所述。由于浮点数流式数据压缩装置解决问题的原理与浮点数流式数据压缩方法相似,因此浮点数流式数据压缩装置的实施可以参见浮点数流式数据压缩方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
43.图6是本发明实施例的浮点数流式数据压缩装置的一种结构框图,如图3所示,包括:索引表建立模块601、key值确定模块602、目标桶寻找模块603、基础值寻找模块604、编码模块605和存储模块606,下面对该结构进行说明。
44.索引表建立模块601,用于建立索引表,所述索引表设有n个桶,每个桶有m个槽,n和m均为正整数;key值确定模块602,用于基于当前浮点数的二进制表示,确定作为索引的key值;目标桶寻找模块603,用于根据所述key值利用哈希查找法在所述n个桶中寻找目
标桶;基础值寻找模块604,用于利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置;编码模块605,用于根据当前浮点数与所述基础值进行异或计算得到的第二值的零的位数情况以及所述基础值在当前窗口的位置对当前浮点数进行编码;存储模块606,用于将编码后的浮点数依据预设的存储格式进行压缩存储。
45.在一个实施例中,key值确定模块602还用于:基于当前浮点数的二进制的尾部若干位作为索引的第一key值。
46.在一个实施例中,key值确定模块602还用于:基于当前浮点数的二进制的尾部若干位作为索引的第一key值;基于当前浮点数的二进制的头部若干位作为索引的第二key值,当浮点数为64位时,用符号位加上高第6位到高第12位作为索引的第二key值,当浮点数为32位时,用符号位加上高第6位到高第12位作为索引的第二key值。
47.在一个实施例中,key值确定模块602还用于:当浮点数为64位时,基于当前浮点数的二进制的符号位、高第7位和低6位作为索引的第三key值;当浮点数为32为时,基于当前浮点数的二进制的符号位、高第5位和低7位作为索引的第三key值。
48.在一个实施例中,编码模块605还用于:所述基础值在当前窗口的位置表示为offset,offset取值为0~(2
m-1-1),当前浮点数与所述基础值进行异或计算得到的第二值表示为xorj= xj^xi,xj为当前浮点数,xi为基础值;当xorj的各位均为零时,则编码时只记录offset;当xorj至少有一位不为零时,计算xorj尾部的零长度l1和xorj头部的零长度l2,l1和l2均为按字节取整,则xorj首尾总的零长度l=l1+l2,其中,所述零长度为连续的零的位数;如果l大于等于1,则编码时记录offset,并将offset的第m位置成1,然后用4bit记录l1、用4bit记录l以及用至少一个字节记录xorj除去尾部的l1长度的零后剩下的部分;如果l小于1,则编码时将offset的前m-1位标记为全1,并将offset的第m位置成1,然后记录当前浮点数的原始值。
49.在一个实施例中,所述装置还包括数据填入模块,用于如果所述基础值所在的槽是未填入数据的窗口或是查找所述基础值时滑过的窗口,则将当前浮点数填入该槽;如果所述基础值所在的槽中数据已经填满,则用当前浮点数替换最先存入该槽中的数据。
50.在一个实施例中,存储模块606中的预设的存储格式的头部包括:魔数、版本号、数据原始长度、数据压缩长度和编码压缩所用参数;所述头部之后依次记录第一个浮点数的原始值和各个浮点数编码压缩后的值。
51.本发明实施例实现了如下技术效果:建立索引表,索引表设有n个桶,每个桶有m个槽,n和m均为正整数;基于当前浮点数的二进制表示,确定作为索引的key值;根据key值利用哈希查找法在n个桶中寻找目标桶;利用线性查找法将当前浮点数分别与目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录基础值在当前窗口的位置;根据当前浮点数与基础
值进行异或计算得到的第二值的零的位数情况以及基础值在当前窗口的位置对当前浮点数进行编码;将编码后的浮点数依据预设的存储格式进行压缩存储。本技术通过使用异或的方法实现数据的无损压缩,通过利用对历时窗口上的数据高效搜索提高了压缩率,并且通过简化的数据表示提高了解压速度。
52.显然,本领域的技术人员应该明白,上述的本发明实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明实施例不限制于任何特定的硬件和软件结合。
53.以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术特征:
1.一种浮点数流式数据压缩方法,其特征在于,包括:建立索引表,所述索引表设有n个桶,每个桶有m个槽,n和m均为正整数;基于当前浮点数的二进制表示,确定作为索引的key值;根据所述key值利用哈希查找法在所述n个桶中寻找目标桶;利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置;根据当前浮点数与所述基础值进行异或计算得到的第二值的零的位数情况以及所述基础值在当前窗口的位置对当前浮点数进行编码;将编码后的浮点数依据预设的存储格式进行压缩存储。2.如权利要求1所述浮点数流式数据压缩方法,其特征在于,所述基于当前浮点数的二进制表示,确定作为索引的key值,包括:基于当前浮点数的二进制的尾部若干位作为索引的第一key值。3.如权利要求2所述浮点数流式数据压缩方法,其特征在于,所述基于当前浮点数的二进制表示,确定作为索引的key值,还包括:基于当前浮点数的二进制的头部若干位作为索引的第二key值,当浮点数为64位时,用符号位加上高第6位到高第12位作为索引的第二key值,当浮点数为32位时,用符号位加上高第6位到高第12位作为索引的第二key值。4.如权利要求1所述浮点数流式数据压缩方法,其特征在于,所述基于当前浮点数的二进制表示,确定作为索引的key值,包括:当浮点数为64位时,基于当前浮点数的二进制的符号位、高第7位和低6位作为索引的第三key值;当浮点数为32为时,基于当前浮点数的二进制的符号位、高第5位和低6位作为索引的第三key值。5.如权利要求1所述浮点数流式数据压缩方法,其特征在于,所述根据当前浮点数与所述基础值进行异或计算得到的第二值的零的位数情况以及所述基础值在当前窗口的位置对当前浮点数进行编码,包括:所述基础值在当前窗口的位置表示为offset,offset取值为0~(2
m-1-1),当前浮点数与所述基础值进行异或计算得到的第二值表示为xorj= xj^xi,xj为当前浮点数,xi为基础值;当xorj的各位均为零时,则编码时只记录offset;当xorj至少有一位不为零时,计算xorj尾部的零长度l1和xorj头部的零长度l2,l1和l2均为按字节取整,则xorj首尾总的零长度l=l1+l2,其中,所述零长度为连续的零的位数;如果l大于等于1,则编码时记录offset,并将offset的第m位置成1,然后用4bit记录l1、用4bit记录l以及用至少一个字节记录xorj除去尾部的l1长度的零后剩下的部分;如果l小于1,则编码时将offset的前m-1位标记为全1,并将offset的第m位置成1,然后记录当前浮点数的原始值。6.如权利要求1-5任一项所述浮点数流式数据压缩方法,其特征在于,在所述利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个
第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置的步骤之后,还包括:如果所述基础值所在的槽是未填入数据的窗口或是查找所述基础值时滑过的窗口,则将当前浮点数填入该槽;如果所述基础值所在的槽中数据已经填满,则用当前浮点数替换最先存入该槽中的数据。7.如权利要求1-5任一项所述浮点数流式数据压缩方法,其特征在于,所述预设的存储格式的头部包括:魔数、版本号、数据原始长度、数据压缩长度和编码压缩所用参数;所述头部之后依次记录第一个浮点数的原始值和各个浮点数编码压缩后的值。8.一种浮点数流式数据压缩装置,其特征在于,包括:索引表建立模块,用于建立索引表,所述索引表设有n个桶,每个桶有m个槽,n和m均为正整数;key值确定模块,用于基于当前浮点数的二进制表示,确定作为索引的key值;目标桶寻找模块,用于根据所述key值利用哈希查找法在所述n个桶中寻找目标桶;基础值寻找模块,用于利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置;编码模块,用于根据当前浮点数与所述基础值进行异或计算得到的第二值的零的位数情况以及所述基础值在当前窗口的位置对当前浮点数进行编码;存储模块,用于将编码后的浮点数依据预设的存储格式进行压缩存储。9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的浮点数流式数据压缩方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至7中任一项所述的浮点数流式数据压缩方法的计算机程序。

技术总结
本发明实施例提供了一种浮点数流式数据压缩方法、装置、计算机设备及介质,涉及数据处理技术领域,该方法包括:建立索引表,索引表设有N个桶,每个桶有M个槽;基于当前浮点数的二进制表示,确定key值;根据key值在N个桶中寻找目标桶;利用线性查找法将当前浮点数分别与目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为基础值,并记录基础值在当前窗口的位置;根据当前浮点数与基础值进行异或计算得到的第二值的零的位数情况及基础值在当前窗口的位置进行编码;依据预设的存储格式进行压缩存储。通过该方案,实现了无损压缩,提高了压缩率和解压速度。缩率和解压速度。缩率和解压速度。


技术研发人员:王勇 杨谕黔 于宁 唐鹏洲 王昊 姚延栋 翁岩青
受保护的技术使用者:北京四维纵横数据技术有限公司
技术研发日:2023.07.17
技术公布日:2023/8/16
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐