一种面向天文星表的压缩预处理编码器、应用

未命名 07-13 阅读:180 评论:0


1.本发明涉及一种面向天文星表的压缩预处理编码器、应用,属于通信领域。


背景技术:

2.天文星表数据是天文观测设备采集的原始观测数据经过一系列处理所生成的数据之一,用于保存星体的坐标(赤经和赤纬)、星等、光谱型、质量、年龄等一系列星体参数。随着天文观测设备的升级,目前天文观测设备所采集的数据无论是规模还是精准度都明显提高,相应的星表数据所记录的星体数目和属性参数也随之提高,盖亚卫星(global astrometric interferometer forastrophysics,gaia)最新发布的第三版星表数据gaia dr3的数据量已经达到18亿条。作为以数据驱动的学科,海量的天文数据为天文学家探究宇宙规律提供了有力支撑,但同时也对数据的存储管理提出了不小的挑战。利用数据压缩技术能够在不损失星表信息量的前提下对星表数据进行编码重组,从而优化天文星表的存储空间,提高天文星表的传输效率。
3.目前,在进行天文星表数据压缩时可以选择通用型的无损压缩算法,如lz4、zstd、snappy等,以snappy为例,其压缩流程如图2所示,包括:第1步,首先在匹配开始阶段初始化用于匹配的字典dict,字典内保存滑动窗口中每一个字节开始4个字节转换成uint32的偏移值,字典的下标为偏移值的hash值;第2步,从缓冲区内开始读取数据,计算从当前位置ptr_now开始的4字节转换成uint32后的hash值hashptr_now;第3步,将hashptr_now与ptr_ver对应在字典dict中的hash值进行匹配;第4步,若不相等,则输出未匹配数据同时ptr_now自增1并更新字典转至第2步;若相等,则继续匹配;第5步,记录最大匹配长度的匹配信息match_info(匹配长度len、偏移量offset、未匹配字节数litcount);第6步,输出压缩结果,检查是否压缩结束,否则转至第2步。在通用型压缩算法中snappy算法的压缩、解压效率更优并且在执行压缩时对cpu和内存的占用较低,但snappy压缩后的文件普遍较大,经过测试snappy压缩后文件的大小相对lz、zstd要大20%到50%。而压缩后文件的大小是衡量压缩算法性能最重要的因素之一,因此snappy在天文星表的存储领域虽有一定的应用前景,但并未被实际运用。


技术实现要素:

4.本发明提供了一种面向天文星表的压缩预处理编码器、应用,以用于实现天文星表数据的压缩预处理,并进一步用于与传统通用型压缩算法结合进行数据压缩。
5.本发明的技术方案是:
6.根据本发明的一方面,提供了一种面向天文星表的压缩预处理编码器,包括:
7.判断模块,用于判断数据流类型,分为第一类型数据、第二类型数据;
8.预处理模块,用于将第二类型数据进行预处理;
9.分割重组模块,用于将预处理后的数据进行分割重组。
10.所述判断模块,包括:以星表数据的列数据作为一个数据流;对数据流类型进行判
断,分为第一类型数据、第二类型数据;第一类型数据包括文本、布尔型数据,第二类型数据为数值型数据,数值型数据包括整型数据和浮点型数据。
11.所述预处理模块,包括:
12.如果第二类型数据为整型数据,则采用增量编码处理,获得增量处理后的序列;
13.如果第二类型数据为浮点型数据,则选择浮点型数据的符号位和指数位进行异或比较后输出序列。
14.所述分割重组模块,包括:
15.将待处理数据流分割为2m字节大小的数据块,循环处理每一个数据块;其中,m≥6;
16.在数据块中提取n个数据构建n*n大小的矩阵;n表示当前数据流对应的数据类型的二进制位数;
17.将矩阵进行转置,获得转置矩阵,转置矩阵分割为:“空字节”和“有效字节”两部分;
18.将“空字节”和“有效字节”分别输出到相应的输出序列中,最后依次输出“空字节”序列长度、“空字节”序列以及“有效字节”序列。
19.根据本发明的另一方面,提供了一种面向天文星表的压缩预处理解码器,其特征在于,用于解码,包括:根据存储的“空字节”序列长度信息提取“空字节”序列,剩下的则为“有效字节”序列,其次分别从“空字节”序列和“有效字节”序列提取相应数量的字节组合成矩阵,最后依次输出矩阵中的数据完成解码。
20.根据本发明的另一方面,将上述中任意一项所述的面向天文星表的压缩预处理编码器用于snappy压缩算法。
21.本发明的有益效果是:本发明一方面用于天文星表数据的压缩预处理,另一方面,可以用于与snappy压缩算法结合,有效的提高snappy算法在压缩星表数据时的压缩质量,能够使snappy算法的综合性能优于lz4和zstd算法。
附图说明
22.图1是本发明流程图;
23.图2是snappy压缩过程图;
24.图3是fpc压缩流程图;
25.图4是分割重组流程示意图;
26.图5是数据段压缩对比图;
27.图6是预处理编码器类图。
具体实施方式
28.下面结合附图和实施例,对发明做进一步的说明,但本发明的内容并不限于所述范围。
29.实施例1:如图1-6所示,根据本发明实施例的一方面,提供了一种面向天文星表的压缩预处理编码器,包括:判断模块,用于判断数据流类型,分为第一类型数据、第二类型数据;预处理模块,用于将第二类型数据进行预处理;分割重组模块,用于将预处理后的数据
进行分割重组。
30.进一步地,所述判断模块,包括:以星表数据的列数据作为一个数据流;对数据流类型进行判断,分为第一类型数据、第二类型数据;第一类型数据包括文本、布尔型数据,第二类型数据为数值型数据,数值型数据包括整型数据和浮点型数据。
31.进一步地,所述预处理模块,包括:如果第二类型数据为整型数据,则采用增量编码处理,获得增量处理后的序列;如果第二类型数据为浮点型数据,则选择浮点型数据的符号位和指数位进行异或比较后输出序列。
32.进一步地,所述分割重组模块,包括:将待处理数据流分割为2m字节大小的数据块,循环处理每一个数据块;其中,m≥6;在数据块中提取n个数据构建n*n大小的矩阵;n表示当前数据流对应的数据类型的二进制位数;将矩阵进行转置,获得转置矩阵,转置矩阵分割为:“空字节”和“有效字节”两部分;将“空字节”和“有效字节”分别输出到相应的输出序列中,最后依次输出“空字节”序列长度、“空字节”序列以及“有效字节”序列。
33.根据本发明实施例的另一方面,提供了一种面向天文星表的压缩预处理解码器,其特征在于,用于解码,包括:根据存储的“空字节”序列长度信息提取“空字节”序列,剩下的则为“有效字节”序列,其次分别从“空字节”序列和“有效字节”序列提取相应数量的字节组合成矩阵,最后依次输出矩阵中的数据完成解码。
34.根据本发明实施例的另一方面,将上述中任意一项所述的面向天文星表的压缩预处理编码器用于snappy压缩算法。
35.再进一步地,对本发明可选地一种实施方式进行如下说明:
36.本发明的数据编码流程如图1所示,在设计预处理编码器时本发明首先将星表数据分别文本、布尔型数据和数值型数据两部分;由于文本数据和布尔型数据在星表中占比较少故不做过多处理,主要针对整型数据和浮点型数据分别进行数据变换处理,最后进行基于snappy的分割重组处理,下面将进行详细阐述。
37.天文星表数据在存储时为了保证存储数据的精度不丢失,在设计数据表参数列字段时会根据参数列出现的最大精度值设置存储所需字节数。因此在存储整张数据表时,绝大部分数据二进制存储格式中高位是“空白”状态,造成了不必要的浪费。例如星表某一参数列中的数值普遍分布在0到100这个区间,但偶尔会出现300及以上的数值,为了保证所有的数值都能被完整的保存,在设计该参数列字段时就必须指定2个字节进行存储(取值范围为-32768~32767),而实际上该列绝大部分的数值只需要1个字节(取值范围为-128~127)就能完整的被保存下来,这就导致该参数列实际存储中会出现很多没有使用到的“空字节”(全是“0”的字节)并且这些“空字节”随机穿插出现在“有效字节”(实际存储信息的字节)中。由snappy压缩算法的原理可知,在匹配阶段需要至少匹配4个字节才算有效压缩,并且snappy压缩算法的“启发式”查找匹配机制使其在查找匹配阶段每32个字节没有查找成功则会增加扫描匹配的字节间隔,不再挨个字节的匹配计算,而是每隔3个字节匹配一次。出现在数据列中的“空字节”很难和前后的字节组成有效匹配序列,因此会干扰snappy算法查找匹配的过程。本文对星表数据的存储格式进行了变换处理,目的是分离“空字节”和“有效字节”从而避免“空字节”对星表数据压缩效果的影响。
38.编码原理如下:
39.首先分别对整型数据和浮点型数据进行基于比特位的变换处理,目的是对数据进
行整合处理,生成“空字节”。对于整型数据,可以直接选择增量编码,即使用当前值与先前值的差值替换当前值。通过增量编码处理过后的整型数据列理论上数值会比原先小很多,因此会产生更多的“空字节”。对于浮点型数据,本发明在fpc算法的基础上针对天文星表中的浮点型数据进行了改进,主要针对fpc算法进行了计算处理上的简化以兼顾预处理编码器的整体运行效率,具体修改部分如下:
40.一、比较范围,fpc算法进行异或比较的目的是希望尽可能的构造前导零,因此会比较浮点型数据的所有二进制位。考虑到计算开销和收益,本文采用了和fpc算法类似的异或比较方法,但只对浮点型数据的符号位和指数位进行处理而不涉及到小数位。其目的是尽可能的统一浮点数据二进制格式的高位,方便下一步预处理操作;
41.二、预测器:由于简化了比较范围并且天文星表中的连续的浮点型数据的符号位和指数位通常相同。因此本文省去了fpc算法的预测比较流程,直接进行异或比较并输出编码结果。
42.三、输出格式,fpc算法的输出数据流的开头由预测器代码,前导零数量组成共占用4个比特位,后面保存余下的二进制位。本文在数据的输出格式上做出了调整,直接输出比较之后的二进制位。经过处理以后,浮点型数据用于存储符号位和指数位的字节将最大可能变为“空字节”,便于进行下一步处理。
43.fpc原理如图3所示,具体原理在于:
44.第1步,首先读取浮点数据列,使用fcm和dfcm两个预测器对当前数据和先前数据进行异或比较,将相同的位转为“0”;
45.第2步,比较两个预测器的结果,选择结果最好的一个(异或比较结果的好坏通过前导零的数量判断,产生前导零的数量越多则代表预测的结果越好);
46.第3步,记录产生前导零的数量以及预测器的代码;
47.第4步,输出压缩数据流,其中第一个字节保存前导零的数量和预测器代码。
48.其次将经过变换后的数据流以字节为单位进行分割重组(以字节为单位是因为处理字节的计算消耗更少,通常是处理比特位资源消耗的1/4),以图4为参考,分割重组的具体流程如下:
49.第一,将待处理数据流分割为2m字节大小的数据块,循环处理每一个数据块;其中,m≥6;在本发明的实施例中,m取15,即分割为32768字节大小的数据据块;需要说明的是,待处理数据流分割分割至最后一个数据块时,字节大小小于32768,则以实际大小作为一个数据块;
50.第二,在数据块中提取n个数据构建n*n大小的矩阵;n表示当前数据流对应的数据类型的二进制位数;
51.第三,将矩阵进行转置,获得转置矩阵,分割为:“空字节”和“有效字节”两部分;其中,空字节表示当前行全部为0;
52.第四,将“空字节”和“有效字节”分别输出到相应的输出序列中,最后依次输出“空字节”序列长度、“空字节”序列以及“有效字节”序列;其中,“空字节”序列长度采用1个字节表示。
53.分割重组的主要作用就是将数据流中的“空字节”抽取出来,从而提高snappy算法查找匹配的效率。snappy算法的查找匹配阶段需要至少匹配4个字节,未进行预处理的情况
下需要计算“空字节”和“有效字节”组合的偏移哈希值,但实际上只有“有效字节”部分才算是有效匹配。“空字节”的存在会使“启发式”查找匹配不能精准的匹配“有效字节”,从而会导致进行一些无意义的匹配计算浪费计算资源,分离出“空字节”可以避免“启发式”查找匹配机制出现无意义的匹配。将“空字节”和“有效字节”分开进行查找匹配,可以使“有效字节”部分在查找匹配阶段中“启发式”查找匹配机制的效率更好,从而使匹配检索效率更优。并且连续集中在一起的“空字节”在snappy压缩算法下能也够被高效压缩。
54.解码原理如下:
55.解码的过程发生在snappy算法解压之后,首先根据存储的“空字节”序列长度信息提取“空字节”序列,剩下的则为“有效字节”序列,其次分别从“空字节”序列和“有效字节”序列提取相应数量的字节组合成矩阵,最后依次输出矩阵中的数据完成解码。
56.为了进一步说明本发明的有效性,给出如下实验数据:
57.一、数据集说明:
58.测试采用gaia ed3星表数据集片段,共9817821条星表数据,csv格式下共5.18g。
59.二、压缩性能分析:
60.表1压缩性能测试对比
61.方法压缩后星表大小(mb)压缩时间(秒)cpu平均占用率(%)snappy+预处理编码器22.624642.49snappy30.073832.15lz427.895143.44zstd23.615442.75
62.需要说明的是:测试星表数据集内存在大量的“0”值和null值,在实际存储星表时,会通过isnull函数检查参数值是否为null值,若是null值则进行替换处理并不会存储进磁盘中。通过表1对比可知:虽然使用本发明的预处理编码器后在一定程度上提高了snappy在压缩过程中的cpu负荷,但是结合预处理编码器后snappy算法压缩星表数据的大小从30.07mb减少到22.62mb,同等条件下比lz4和zstd压缩后的数据更低,同时压缩时间也短于另外2种算法,因此为snappy被实际应用提供支撑。
63.为了更具体的分析预处理算法对不同数据类型的作用,本发明在星表数据中随机抽样了10列(其中整型数据和浮点型数据各5列),对比了使用预处理编码器后对不同数据类型的压缩影响,对比结果如图5所示;图中数据列的数据类型依次是:int16、int8、int64、int16、int16、float32、float32、float64、float64、float64。通过实验可知:虽然对于int8类型的数据没有作用,但是对int16和float32类型的数据体现出了一定的提升效果,对int64和float64类型的数据的压缩呈现出更高的提升效果。
64.应用上述技术方案可知,由于数据经变换后得到的“空字节”数与数据存储所占用的字节数呈线性正相关,而鉴于星表数据是一种科学数据,其对精度要求高,数据所占字节多,在数据变换阶段越容易产生“空字节”,而分割重组主要就是针对“空字节”进行操作,因此本发明优势显著。
65.三、结论:
66.面向天文星表的预处理编码器是本发明针对snappy压缩天文星表时压缩质量较低而提出的一种优化方法。通过对预处理编码器的一系列性能测试可知,预处理编码器能
够有效的提高snappy算法在压缩星表数据时的压缩质量,能够使snappy算法的综合性能优于lz4和zstd算法。测试结果表明,使用预处理编码器以后snappy算法在压缩比、压缩时间等多个方面的性能都优于lz4、zstd算法。
67.本发明改善了snappy算法在压缩天文星表时压缩质量不高的问题,增强了snappy在压缩天文星表时的综合性能,提高了snappy算法的可用性。
68.进一步,本发明给出如下实现方法,如表2所示:
69.表2预处理实现方法
[0070][0071]
天文星表预处理编码器实现的主要类图如图6所示。天文星表预处理编码器实现的相关类为:inttrans、floatfpctrans、transforsnappy以及接口icompressioncodec,具体分析如下:
[0072]
inttrans是实现整型数据变换的类,其中关键方法是docompressdata()和dodecompressdata(),前者用于实现整型数据的增量替换操作,后者用于解码还原;
[0073]
floatfpctrans是实现浮点型数据变换的类,其中关键方法同样也是docompressdata()和dodecompressdata(),前者用于实现浮点型数据的异或比较操作操作,后者用于解码还原;
[0074]
transforsnappy用于实现基于snappy机制的数据变换操作,是整个预处理编码器的核心类,其中isnullbyte()用于检查是否是“空字节”,transpose()用于构造矩阵和进行矩阵转置处理,docompressdata()用于矩阵的分割处理,reversetranspose()用于重组还原矩阵,dodecompressdata()用于最后的解码操作,根据矩阵输出原始数据。
[0075]
上面结合附图对本发明的具体实施方式作了详细说明,但是本发明并不限于上述实施方式,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。

技术特征:
1.一种面向天文星表的压缩预处理编码器,其特征在于,包括:判断模块,用于判断数据流类型,分为第一类型数据、第二类型数据;预处理模块,用于将第二类型数据进行预处理;分割重组模块,用于将预处理后的数据进行分割重组。2.根据权利要求1所述的面向天文星表的压缩预处理编码器,其特征在于,所述判断模块,包括:以星表数据的列数据作为一个数据流;对数据流类型进行判断,分为第一类型数据、第二类型数据;第一类型数据包括文本、布尔型数据,第二类型数据为数值型数据,数值型数据包括整型数据和浮点型数据。3.根据权利要求1所述的面向天文星表的压缩预处理编码器,其特征在于,所述预处理模块,包括:如果第二类型数据为整型数据,则采用增量编码处理,获得增量处理后的序列;如果第二类型数据为浮点型数据,则选择浮点型数据的符号位和指数位进行异或比较后输出序列。4.根据权利要求1所述的面向天文星表的压缩预处理编码器,其特征在于,所述分割重组模块,包括:将待处理数据流分割为2
m
字节大小的数据块,循环处理每一个数据块;其中,m≥6;在数据块中提取n个数据构建n*n大小的矩阵;n表示当前数据流对应的数据类型的二进制位数;将矩阵进行转置,获得转置矩阵,转置矩阵分割为:“空字节”和“有效字节”两部分;将“空字节”和“有效字节”分别输出到相应的输出序列中,最后依次输出“空字节”序列长度、“空字节”序列以及“有效字节”序列。5.一种面向天文星表的压缩预处理解码器,其特征在于,包括:根据存储的“空字节”序列长度信息提取“空字节”序列,剩下的则为“有效字节”序列,其次分别从“空字节”序列和“有效字节”序列提取相应数量的字节组合成矩阵,最后依次输出矩阵中的数据完成解码。6.将权利要求1-4中任意一项所述的面向天文星表的压缩预处理编码器用于snappy压缩算法。

技术总结
本发明公开了一种面向天文星表的压缩预处理编码器、应用,编码器包括:判断模块,用于判断数据流类型,分为第一类型数据、第二类型数据;预处理模块,用于将第二类型数据进行预处理;分割重组模块,用于将预处理后的数据进行分割重组。本发明一方面用于天文星表数据的压缩预处理,另一方面,可以用于与Snappy压缩算法结合,有效的提高Snappy算法在压缩星表数据时的压缩质量,能够使Snappy算法的综合性能优于LZ4和ZSTD算法。优于LZ4和ZSTD算法。优于LZ4和ZSTD算法。


技术研发人员:梁波 丁锐恒
受保护的技术使用者:昆明理工大学
技术研发日:2023.03.28
技术公布日:2023/7/12
版权声明

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

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

分享:

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

相关推荐