浮点数流式数据压缩方法、装置、计算机设备及介质制造方法及图纸

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

【技术实现步骤摘要】
浮点数流式数据压缩方法、装置、计算机设备及介质


[0001]本专利技术涉及数据处理
,特别涉及一种浮点数流式数据压缩方法、装置、计算机设备及介质。

技术介绍

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

技术实现思路

[0008]有鉴于此,本专利技术实施例提供了一种浮点数流式数据压缩方法,以解决了现有技术中浮点数流式数据压缩存在着数据读取和处理时开销大、存储精度低以及解码效率低的问题。该方法包括:建立索引表,所述索引表设有N个桶,每个桶有M个槽,N和M均为正整数;基于当前浮点数的二进制表示,确定作为索引的key值;根据所述key值利用哈希查找法在所述N个桶中寻找目标桶;利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置;
根据当前浮点数与所述基础值进行异或计算得到的第二值的零的位数情况以及所述基础值在当前窗口的位置对当前浮点数进行编码;将编码后的浮点数依据预设的存储格式进行压缩存储。
[0009]本专利技术实施例还提供了一种浮点数压缩装置,以解决了现有技术中浮点数流式数据压缩存在着数据读取和处理时开销大、存储精度低以及解码效率低的问题。该装置包括:索引表建立模块,用于建立索引表,所述索引表设有N个桶,每个桶有M个槽,N和M均为正整数;key值确定模块,用于基于当前浮点数的二进制表示,确定作为索引的key值;目标桶寻找模块,用于根据所述key值利用哈希查找法在所述N个桶中寻找目标桶;基础值寻找模块,用于利用线性查找法将当前浮点数分别与所述目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录所述基础值在当前窗口的位置;编码模块,用于根据当前浮点数与所述基础值进行异或计算得到的第二值的零的位数情况以及所述基础值在当前窗口的位置对当前浮点数进行编码;存储模块,用于将编码后的浮点数依据预设的存储格式进行压缩存储。
[0010]本专利技术实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的浮点数流式数据压缩方法,以解决了现有技术中浮点数流式数据压缩存在着数据读取和处理时开销大、存储精度低以及解码效率低的问题。
[0011]本专利技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的浮点数流式数据压缩方法的计算机程序,以解决了现有技术中浮点数流式数据压缩存在着数据读取和处理时开销大、存储精度低以及解码效率低的问题。
[0012]与现有技术相比,本说明书实施例采用的上述至少一个技术方案能够达到的有益效果至少包括:建立索引表,索引表设有N个桶,每个桶有M个槽,N和M均为正整数;基于当前浮点数的二进制表示,确定作为索引的key值;根据key值利用哈希查找法在N个桶中寻找目标桶;利用线性查找法将当前浮点数分别与目标桶内的各个槽中的数据依次进行异或计算得到多个第一值,将零的位数最多的第一值所对应的数据作为当前浮点数编码的基础值,并记录基础值在当前窗口的位置;根据当前浮点数与基础值进行异或计算得到的第二值的零的位数情况以及基础值在当前窗口的位置对当前浮点数进行编码;将编码后的浮点数依据预设的存储格式进行压缩存储。本申请通过使用异或的方法实现数据的无损压缩,通过利用对历时窗口上的数据高效搜索提高了压缩率,并且采用了简化的数据表示,有利于提高解压速度。
附图说明
[0013]为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0014]图1是本专利技术实施例提供的一种浮点数流式数据压缩方法的流程图;
图2是本专利技术实施例提供的索引表的结构示意图;图3是本专利技术实施例提供的编码格式的结构示意图;图4是本专利技术实施例提供的预设的存储格式的结构示意图;图5是本专利技术实施例提供的一种计算机设备的结构框图;图6是本专利技术实施例提供的一种浮点数流式数据压缩装置的结构框图。
具体实施方式
[0015]下面结合附图对本申请实施例进行详细描述。
[0016]以下通过特定的具体实例说明本申请的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本申请的其他优点与功效。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。本申请还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本申请的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0017]在本专利技术实施例中,提供了一种浮点数流式数据压缩方法,如图1所示,该方法包括:步骤S1、建立索引表,所述索引表设有N个桶,每个桶有M个槽,N和M均为正整数;步骤S2、基于当前浮点数的二进制表示,确定作为索引的key值;步骤S3、根据所述key值利用哈希查找法在所述N个桶中寻找目标桶;步骤S4、利用本文档来自技高网
...

【技术保护点】

【技术特征摘要】
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,则编码时记...

【专利技术属性】
技术研发人员:王勇杨谕黔于宁唐鹏洲王昊姚延栋翁岩青
申请(专利权)人:北京四维纵横数据技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1