1.本技术涉及数据压缩技术领域,具体涉及一种时序数据压缩的方法及装置。
背景技术:
2.时序数据是指按时间顺序排列的一系列数据,通常用于记录和分析与时间相关的事件、指标和状态等信息,例如传感器数据、系统指标、网络流量等。
3.时序数据通常由3部分组成:时间戳、值数据及标签;对于时序数据的压缩,gorilla压缩算法是目前最流行的压缩算法,是一种针对时间序列数据设计的无损压缩算法,广泛应用于开源监控系统和时序数据库等工具中。gorilla压缩算法在对时间戳进行压缩时,采用了delta-of-delta(dod)的压缩技术;dod压缩的基本思想是将原始的时间戳序列转换为其相对时间和时间戳差值的形式,以减小时间戳信息的存储空间;gorilla压缩算法在对值数据进行压缩时,采用了xor(异或)的压缩技术;xor压缩的基本思想是将原始的数值与前一个数值进行异或运算,以减小数据范围和存储空间。若采集到的时序数据的值是变化不大的连续数值,那么xor计算后的值通常很小,存储xor运算后的值可以极大的减小存储空间。在查询数据时,gorilla压缩算法将解压缩后的xor值与前一个数值进行异或运算,从而得到原始的数值序列。
4.但在上述方案中,gorilla压缩算法对所有的值数据均统一采用xor压缩,没有考虑到不同值数据的分布特点,进行针对性的进行压缩,比如固定值、等差数列值、gauge值(测量值)、counter值(计数值)等,导致压缩效率不高。
技术实现要素:
5.有鉴于此,本技术实施例提供了一种时序数据压缩的方法及装置,以解决gorilla压缩算法对所有的值数据均统一采用xor压缩,没有考虑到不同值数据的分布特点,压缩效率不高的问题。
6.第一方面,本技术实施例提供了一种时序数据压缩的方法,所述方法包括:
7.获取目标时序数据,并对所述目标时序数据进行分块处理,以获取各个时序数据块;
8.获取所述各个时序数据块中的值数据的分布类型;
9.根据所述值数据的分布类型,对所述各个时序数据块中的值数据分别进行压缩处理。
10.根据上述技术手段,针对时序数据的不同类型,采用不同的压缩算法,在不损失精度的前提下,极大的提升了压缩效率。
11.结合第一方面,在一种实施方式中,根据指标名称及时间顺序,对所述目标时序数据进行分块处理,以获取各个时序数据块。
12.结合第一方面对应的实施方式,获取所述各个时序数据块内的值数据的分布特点;
13.根据所述值数据的分布特点,获取所述各个时序数据块中的值数据的分布类型;所述值数据的分布类型包括固定值类型、等差数据类型、gauge类型及counter类型。
14.根据上述技术手段,针对时序数据的不同类型,采用不同的压缩算法,在不损失精度的前提下,极大的提升了压缩效率。
15.结合第一方面对应的实施方式,通过第一字节量对所述值数据的分布类型进行类型标识;
16.根据所述值数据的分布类型,分别对所述各个时序数据块中的值数据的数据内容进行压缩处理。
17.结合第一方面对应的实施方式,当所述值数据的分布类型为固定值类型时,通过第二字节量对所述值数据的第一个值进行保存;
18.当所述值数据的分布类型为等差数据类型时,通过第二字节量对所述值数据的第一个值进行保存,通过第三字节量对所述值数据的等差数值进行保存;
19.当所述值数据的分布类型为gauge类型时,基于xor异或逻辑运算对所述值数据的数据内容进行压缩处理;
20.当所述值数据的分布类型为counter类型时,基于delta运算及xor异或逻辑运算对所述值数据的数据内容进行压缩处理。
21.根据上述技术手段,针对时序数据的不同类型,采用不同的压缩算法,固定值类型的值数据只需要对第一个值进行保存;等差数据类型的值数据只需要对第一个值及等差数值进行保存;gauge类型的值数据,基于xor异或逻辑运算进行压缩;counter类型的值数据,基于delta运算及xor异或逻辑运算进行压缩;本技术在不损失精度的前提下,极大的提升了压缩效率,且压缩算法简单、易用,仅使用通用的无损压缩算法,比如delta运算及xor异或逻辑运算。
22.结合第一方面对应的实施方式,当所述值数据的分布类型为gauge类型时,通过第二字节量对所述值数据的第一个值进行保存,并通过第四字节量对所述值数据中各个相邻值的异或运算结果进行保存。
23.根据上述技术手段,xor异或逻辑运算为通用的无损压缩算法,压缩算法简单、易用。
24.结合第一方面对应的实施方式,当所述值数据的分布类型为counter类型时,通过第二字节量对所述值数据的第一个值进行保存;
25.获取所述值数据中各个相邻值的差值;
26.对所述值数据中各个相邻值的差值进行异或运算,并通过第五字节量对所述值数据对应的所有异或运算结果进行保存。
27.根据上述技术手段,delta运算及xor异或逻辑运算为通用的无损压缩算法,压缩算法简单、易用。
28.结合第一方面对应的实施方式,根据所述值数据的分布类型,对所述各个时序数据块中压缩处理后的值数据分别执行读取操作。
29.结合第一方面对应的实施方式,针对所述时序数据块中的时间戳数据,对所述时间戳数据的第一个值进行保存;
30.获取所述时间戳数据中各个相邻值的差值;
31.对所述时间戳数据中各个相邻值的差值进行二次作差计算,并将所述时间戳数据对应的所有二次作差计算结果进行保存,以对所述时序数据块中的时间戳数据进行压缩。
32.根据上述技术手段,基于现有的dod压缩运算的计算逻辑对时序数据块中的时间戳数据进行压缩,dod压缩运算为通用的无损压缩算法,压缩算法简单、易用,不会影响压缩效率。
33.第二方面,本技术实施例提供了一种时序数据压缩的装置,所述装置包括:
34.时序数据块获取模块,用于获取目标时序数据,并对所述目标时序数据进行分块处理,以获取各个时序数据块;
35.分布类型获取模块,用于获取所述各个时序数据块中的值数据的分布类型;
36.压缩处理模块,用于根据所述值数据的分布类型,对所述各个时序数据块中的值数据分别进行压缩处理。
37.第三方面,本技术实施例提供了一种计算机设备,所述计算机设备包括处理器和存储器,所述存储器中存储有至少一条指令,所述至少一条指令由所述处理器加载并执行以实现上述的一种时序数据压缩的方法。
38.第四方面,本技术实施例提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令,所述至少一条指令由处理器加载并执行以实现上述的一种时序数据压缩的方法。
附图说明
39.为了更清楚地说明本技术具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
40.图1是根据一示例性实施例示出的时序数据压缩的方法的方法流程图。
41.图2是根据一示例性实施例示出的时序数据压缩的方法的方法流程图。
42.图3是根据一示例性实施例示出的对各个时序数据块中的值数据的数据内容进行压缩处理的流程图。
43.图4是根据一示例性实施例示出的一种时序数据压缩的方法的方法流程图。
44.图5是根据一示例性实施例示出的一种时序数据压缩的装置的结构方框图。
45.图6示出了本技术一示例性实施例示出的计算机设备的结构框图。
具体实施方式
46.下面将结合附图对本技术的技术方案进行清楚、完整地描述,显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
47.当前主流的时序数据库系统,比如prometheus时序数据库系统和influxdb时序数据库系统都采用了gorilla压缩算法;gorilla压缩算法在对时间戳进行压缩时,采用了delta-of-delta(dod)的压缩技术;gorilla压缩算法对时间戳进行dod压缩的过程如下:
48.首先,将第一个时间戳设为t1,存储原始值;
49.然后,将第二个时间戳设为t2,计算delta1=t2-t1的值,存储delta的值;
50.接着,将第三个时间戳设为t3,计算delta2=t3-t2的值,再计算dod=(delta2-delta1)的值,存储dod的值。
51.后续的时间戳计算与存储与t3类似。
52.由于采集时序数据的间隔通常是固定的,比如15s,所以采集的时间通常是恒定增长的值,比如12:00:00,12:00:15,12:00:30等,计算得知其dod通常很小,比如0,所以对dod进行压缩,可以极大的减少存储空间。
53.在查询数据时,gorilla压缩算法将解压缩后的时间戳和相对时间重新计算,可以得到原始的时间戳序列。
54.而gorilla压缩算法在对值数据进行压缩时,采用了xor的压缩算法;gorilla压缩算法对值数据进行xor压缩的过程如下:
55.首先,将第一个值数据设为v1,存储原始值,通常是8字节的浮点数;
56.然后,将第二个值数据设为v2,计算v2异或v1的值,存储该值;
57.后续的其他值数据,与v2类似;
58.若采集到的时序数据的值是变化不大的连续数值,那么xor计算后的值通常很小,存储xor运算后的值可以极大的减小存储空间。
59.在查询数据时,gorilla算法将解压缩后的xor值与前一个数值进行异或运算,得到原始的数值序列。
60.由此可见,gorilla压缩算法对所有的值数据统一采用xor压缩,没有考虑到不同值数据的分布特点,进行针对性的进行压缩,导致压缩效率不高;针对固定的值数据,比如描述类指标其值通常为1,xor压缩时,会先保存第一个值,然后计算后续的xor值(均为0),故后续的值均保存为1个比特(值=0)。若原始数据有8k(8192)个指标点,那么保存第一个值用8字节,后续的值用8191比特(约1024字节)。实际上,对于这类比较典型的固定值类型,更好的压缩策略是,使用8个字节保存第一个值,再用1个字节标识它是固定值类型即可;针对counter类型,它的值通常是不断递增的;当数值较大时,相邻两个数值进行xor计算后的值依然很大,导致压缩比不高。实际上,对于这类数据,先对其进行delta运算,即当前值减去前一个值,得到更小的数值,再进行xor压缩,将获得更好的压缩效果;基于此,本技术提出了一种时序数据压缩的方法及装置,本技术对值数据的压缩进行优化,时间戳的压缩仍然采用gorilla压缩算法,针对值数据的分布特点,采用不同的压缩算法,力图在不损失精度的前提下,达到更高的压缩效率。
61.图1是根据一示例性实施例示出的一种时序数据压缩的方法的方法流程图。如图1所示,该方法可以包括如下步骤:
62.步骤s101、获取目标时序数据,并对该目标时序数据进行分块处理,以获取各个时序数据块。
63.在一种可能的实施方式中,在对目标时序数据进行压缩时,先需要对目标时序数据进行分块处理,以保证分出来的每个时序数据块仅存储一个指标的数据,从而可以使得每个时序数据块的分布类型唯一。
64.步骤s102、获取该各个时序数据块中的值数据的分布类型。
65.在一种可能的实施方式中,由于分出来的每个时序数据块仅存储一个指标的数
据,因此每个时序数据块的分布类型唯一,此时可根据每个时序数据块的分布类型,分别进行不同的压缩处理。
66.步骤s103、根据该值数据的分布类型,对该各个时序数据块中的值数据分别进行压缩处理。
67.在一种可能的实施方式中,根据值数据的分布类型,对相应的时序数据块进行压缩处理,也就是说,本实施例针对时序数据的不同类型,采用不同的压缩算法,从而在不损失精度的前提下,极大的提升了压缩效率。
68.综上所述,获取目标时序数据,并对该目标时序数据进行分块处理,以获取各个时序数据块;获取该各个时序数据块中的值数据的分布类型;根据该值数据的分布类型,对该各个时序数据块中的值数据分别进行压缩处理。上述方案针对时序数据的不同类型,采用不同的压缩算法,在不损失精度的前提下,极大的提升了压缩效率。
69.图2是根据一示例性实施例示出的一种时序数据压缩的方法的方法流程图。如图2所示,该方法可以包括如下步骤:
70.步骤s201、获取目标时序数据,并根据指标名称及时间顺序,对该目标时序数据进行分块处理,以获取各个时序数据块。
71.进一步的,将目标时序数据的时间戳和值数据,按照时间顺序和指标名称进行分块,比如一个块保存8k(8192)个时序点,保证一个块内仅存储一个指标的数据;然后,在各个时序数据块内进行数据压缩,该数据压缩分为时间戳的压缩及值数据的压缩。
72.步骤s202、获取该各个时序数据块中的值数据的分布类型。
73.在一种可能的实施方式中,该步骤s202包括:
74.获取该各个时序数据块内的值数据的分布特点;
75.根据该值数据的分布特点,获取该各个时序数据块中的值数据的分布类型;该值数据的分布类型包括固定值类型、等差数据类型、gauge类型及counter类型。
76.步骤s203、通过第一字节量对该值数据的分布类型进行类型标识。
77.进一步的,该第一字节量用于对各个类型的值数据的类型标识进行保存,示例性的,该第一字节量为八个字节;也就是说,分别用八个字节对固定值类型、等差数据类型、gauge类型及counter类型的类型标识进行保存。
78.步骤s204、根据该值数据的分布类型,分别对该各个时序数据块中的值数据的数据内容进行压缩处理。
79.在一种可能的实施方式中,请参照图3示出的对各个时序数据块中的值数据的数据内容进行压缩处理的流程图,该步骤s204包括:
80.步骤s2041、当该值数据的分布类型为固定值类型时,通过第二字节量对该值数据的第一个值进行保存。
81.进一步的,该第二字节量用于对该值数据的第一个值进行保存,示例性的,该第二字节量等于该第一字节量,为八个字节;在对等差数据类型、gauge类型及counter类型进行压缩时,也是分别通过第二字节量对其第一个值进行保存,也就是说,分别通过八个字节对固定值类型、等差数据类型、gauge类型及counter类型的第一个值进行保存。
82.步骤s2042、当该值数据的分布类型为等差数据类型时,通过第二字节量对该值数据的第一个值进行保存,通过第三字节量对该值数据的等差数值进行保存。
83.进一步的,该第三字节量用于对类型为等差数据类型的值数据的等差数值进行保存,示例性的,该第三字节量为与该第二字节量及该第一字节量相等,为八个字节,即通过八个字节对等差数据类型的等差数值进行保存。
84.步骤s2043、当该值数据的分布类型为gauge类型时,基于xor异或逻辑运算对该值数据的数据内容进行压缩处理。
85.步骤s2044、当该值数据的分布类型为counter类型时,基于delta运算及xor异或逻辑运算对该值数据的数据内容进行压缩处理。
86.在一种可能的实施方式中,该步骤s2043包括:
87.当该值数据的分布类型为gauge类型时,通过第二字节量对该值数据的第一个值进行保存,并通过第四字节量对该值数据中各个相邻值的异或运算结果进行保存。
88.进一步的,通过第四字节量对gauge类型的值数据中各个相邻值的异或运算结果进行保存,示例性的,该第四字节量可根据实际情况进行设置,若每个异或运算结果可用两个字节进行保存,则该四字节量可以为异或运算结果的数量乘以两个字节。
89.在一种可能的实施方式中,该步骤s2044包括:
90.当该值数据的分布类型为counter类型时,通过第二字节量对该值数据的第一个值进行保存;
91.获取该值数据中各个相邻值的差值;
92.对该值数据中各个相邻值的差值进行异或运算,并通过第五字节量对该值数据对应的所有异或运算结果进行保存。
93.进一步的,通过第五字节量对counter类型的值数据对应的所有异或运算结果进行保存,示例性的,该第五字节量可根据实际情况进行设置,若每个异或运算结果可用两个字节进行保存,则该五字节量可以为异或运算结果的数量乘以两个字节。
94.进一步的,针对值数据的压缩处理,本实施例对值数据的压缩,首先分析当前块内的值数据的分布特点,然后针对不同的分布类型,采用不同的压缩算法。值数据的分布类型,分为以下几种:固定值类型、等差数据类型、gauge类型及counter类型。各个类型的压缩处理及读取操作如下所示:
95.针对固定值类型:
96.一般情况下,描述类的指标或状态类的指标通常是固定值类型,比如:当前机器的cpu个数,其值固定等于4,一般不随时间发生变化;又比如当前机器的风扇状态,其值通常等于1(正常),一般不发生变化;因此,对该固定值类型的时序数据块内的值数据进行压缩处理,可以先用1个字节标识它是固定值类型,再用8个字节保存第一个值即可。该1个字节标识该块是固定值类型;该8个字节保存第一个值,仅需9个字节即可压缩存储该块内的值数据。
97.针对该时序数据块内值数据的读取,先读取其1字节的类型,得到其类型是固定值类型,然后再读取第一个值即可。
98.针对等差数据类型:
99.一般情况下,规律运行的指标通常是等差数据类型,比如:当前电机的运转次数:在频率固定的情况下,当前运转次数=时间
×
频率,是随时间增大的等差数列;因此,该时序数据块内的值数据压缩,可以先用1个字节标识它是等差数据类型,再保存第一个值和等
差数值即可。也就是说,通过1个字节标识该块是等差数据类型,通过8个字节保存第一个值,通过8个字节保存等差数值;这样,仅需8 8 1=17个字节,即可存储该等差数据类型的时序数据块内的值数据。
100.针对该时序数据块内值数据的读取,先读取第1个字节的类型,得到其类型是等差数据类型,然后读取第一个值和等差值,最后根据等差公式,可以计算得到整个时序数据块内的所有的值数据。
101.针对gauge类型:
102.一般情况下,gauge类型用来标识其值可以增加,也可以减小的指标类型,比如:当前温度或当前节点的cpu使用率;由于该类指标的值通常在一个范围内变化,对时序数据块内的值数据压缩,因此本实施例采用xor的压缩方法:首先,使用1个字节标识该块是gauge类型;然后,保存第一个值v1;再后,对于第二个值v2,保存v2xor v1的值(xor指异或运算);后面的值数据以此类推。对于gauge类型,相邻两个值的变化通常不大,通过xor压缩可以得到较大的压缩效果。
103.针对该时序数据块内数据的读取,先读取其1个字节的类型,得到其类型是gauge类型,然后:读取第一个值v1和xor值;对v1和xor值做xor运算,得到v2的值;后面的值以此类推。
104.针对counter类型:
105.一般情况下,counter类型用来标识其值不断递增的指标类型,比如:http的请求次数或用户态cpu的时钟数;由于该类指标的值随着时间不断的递增,对块内的值数据压缩,可采用delta运算和xor结合的压缩方法:先通过delta运算,可以将其值变小,在理想情况下,可以将其变成gauge类型;再对delta运算的结果,进行xor压缩;其具体压缩过程为:首先,使用1个字节标识该块是counter类型;然后,保存第一个值v1;再后,对于第二个值v2,计算delta1=v2-v1的值,保存起来;再后,对于第三个值v3,计算delta2=v3-v2的值,再计算delta1异或delta2的值,保存起来;后面的值数据以此类推。
106.针对该时序数据块内数据的读取,先读取其1个字节的类型,得到其类型是counter类型,然后读取第一个值v1,再读取delta1,计算得到v2=v1 delta1,再读取xor值,计算delta2=delta1异或xor值,再计算v3=v2 delta2;后面的值以此类推。
107.综上,请参照图4示出的一种时序数据压缩的方法的方法流程图,本实施例对于要写入的时序数据,首先按照时间顺序和指标名称将其划分为若干个块,每个块保存固定大小的时序点,比如8k个,划分时保证一个块内只有一个指标的值;然后对块内的数据进行压缩。块内的时间戳,与gorilla压缩算法一致,使用dod压缩算法;而块内的值数据,根据块内的数据分布类型,采用不同的压缩算法,对于某一个指标,块内数据仅属于一个类型,即块内仅使用一种压缩算法:若是固定值类型,则保存第一个值即可;若是等差数值类型,则保存第一个值和等差值;若是gauge类型,则使用xor压缩算法;若是counter类型,则使用delta xor压缩算法;若都不是上述类型,则出错。
108.步骤s205、根据该值数据的分布类型,对该各个时序数据块中压缩处理后的值数据分别执行读取操作。
109.在一种可能的实施方式中,该步骤s205包括:
110.针对该时序数据块中的时间戳数据,对该时间戳数据的第一个值进行保存;
111.获取该时间戳数据中各个相邻值的差值;
112.对该时间戳数据中各个相邻值的差值进行二次作差计算,并将该时间戳数据对应的所有二次作差计算结果进行保存,以对该时序数据块中的时间戳数据进行压缩。
113.进一步的,对时间戳的压缩,与gorilla压缩算法保持一致,采用dod的压缩算法,对时间戳的读取,也与gorilla压缩算法保存一致。
114.以下通过简单示例对上述实施例公开的内容进行解释,若一个时序数据块内数据保存8个数据点;
115.场景一:固定值类型的压缩和读取:
116.设定要写入的指标以(time,value)表示,采集间隔为10s,其固定值类型的时序数据块内的数据内容如表1所示:
117.表1
[0118][0119][0120]
(1)针对时间戳的压缩:采用dod压缩算法,具体为:
[0121]
第1个时间戳1682906400,保存原始值;
[0122]
第2个时间戳与第1个时间戳的差值delta1=10-0=10,保存起来;
[0123]
第3个时间戳与第2个时间戳的差值delta2=30-20=10,计算delta2-delta1=0,保存起来;
[0124]
后面的时间戳以此类推,最终,压缩保存的时间戳=[1682906400,10,0,0,0,0,0,0];
[0125]
(2)针对时间戳的读取:采用dod压缩算法,具体为:
[0126]
读取第一个值,即第一个时间戳=1682906400;
[0127]
读取第二个值,即delta1=10,计算得到第二个时间=第一个时间戳 delta1=10;
[0128]
读取第三个值,即delta2-delta1=0,得到deta2=10,计算得到第三个时间戳=第二个时间戳 delta2=10 10=20;
[0129]
后面的时间戳以此类推,最终,读取得到原始的时间戳[1682906400,1682906410,1682906420,1682906430,1682906440,1682906450,1682906460,1682906470]。
[0130]
(3)针对值数据的压缩:通过1个字节标识它是固定值类型,比如1;通过8个字节保存第一个值1;最终,压缩保存的值数据=[1,1]。
[0131]
(4)针对值数据的读取:读取第一个字节=1,表示它是固定值类型;读取第二个数值=1,表示块内的值均为1;由于块内保存8个时序点,最终,读取到原始的值数据=[1,1,1,1,1,1,1,1]。
[0132]
场景二:等差数值类型的压缩和读取:
[0133]
设定要写入的指标以(time,value)表示,采集间隔为10s,其等差数值类型的时序数据块内的数据内容如表2所示:
[0134]
表2
[0135][0136][0137]
等差数值类型的时间戳的压缩和读取同固定值类型。
[0138]
(1)针对值数据的压缩:通过1个字节标识它是等差数据类型,比如2;通过8个字节保存第一个值1;通过8个字节保存等差值2;最终,压缩保存的值数据=[2,1,2]。
[0139]
(2)值数据的读取:读取第一个字节=2,表示它是等差数值类型;读取第二个值=1,表示初始值=1;读取第三个值=2,表示等差=2;由于块内保存8个时序点,根据等差公
式,可以得到其原始数据=[1,3,5,7,9,11,13,15]。
[0140]
场景三:gauge类型的压缩和读取:
[0141]
设定要写入的指标以(time,value)表示,采集间隔为10s,其gauge类型的时序数据块内的数据内容如表3所示:
[0142]
表3
[0143][0144][0145]
gauge类型的时间戳的压缩和读取同固定值类型。
[0146]
(1)值数据的压缩:通过1个字节标识它是gauge类型,比如3;通过8个字节保存第一个值332;保存第二个值与第二个值的异或值=332异或295=39;保存第三个值与第二个值的异或值=295异或306=25;后面的值以此类推;最终,压缩保存的值数据=[332,39,25,89,56,27,23,40]。
[0147]
(2)值数据的读取:读取第一个字节=3,表示它是gauge类型;读取第二个值=332,表示初始值=332;读取第三个值=39,计算39xor 332=295;后面的数值以此类推;由于块内保存8个时序点,最终,得到其原始数据=[332,295,306,259,287,310,321,293]。
[0148]
场景四:counter类型的压缩和读取:
[0149]
设定要写入的指标以(time,value)表示,采集间隔为10s,其counter类型的时序数据块内的数据内容如表4所示:
[0150][0151][0152]
counter类型的时间戳的压缩和读取同固定值类型。
[0153]
(1)值数据的压缩:通过1个字节标识它是counter类型,比如4;保存第一个值=405,计算相邻两数的差值=[405,207,181,212,208,185,209,210];保存第一个值=405和第二个值delta1=207,计算相邻两数的xor=[405,207,94,103,12,121,120,3];最终,压缩保存的值数据=[405,207,94,103,12,121,120,3]。
[0154]
(2)值数据的读取:读取第一个字节=4,表示它是counter类型;读取初始值=405,delta1=207;根据[405,207,94,103,12,121,120,3],除去前两个值,计算相邻两数的异或值,得到的是相邻两数的差值[405,207,181,212,208,185,209,210];初始值=406,根据相邻两数的差值,计算得到原始数据=[405,612,793,1005,1213,1398,1607,1817]。
[0155]
此时,假设每个块存储8k,即8192个时序点,比较在不同的值数据类型下,相关技术的gorilla压缩算法与本技术的分类压缩算法的压缩效率(b表示字节,bit表示比特,1字节=8比特):
[0156]
(1)固定值类型:
[0157]
gorilla压缩算法:通过8字节保存第一个值;后面异或值=0,故每个值仅需1bit保存;共压缩=8b 1bit*8191=1032b;
[0158]
本技术的分类压缩算法:通过1个字节保存类型;通过8个字节保存第一个值;共压缩=8b 1b=9b。
[0159]
(2)等差数值类型:
[0160]
gorilla压缩算法:通过8字节保存第一个值;使用2b保存xor后的值,故后面的值=2b*8191=16382b;共压缩=8b 16382b=16390b;
[0161]
本技术的分类压缩算法:通过1个字节保存类型;通过8个字节保存第一个值,通过8个字节保存等差值;共压缩=1b 8b 8b=17b。
[0162]
(3)gauge类型:
[0163]
gorilla压缩算法:通过8个字节保存第一个值;使用2b保存相邻两数的xor值,故后面的值=2b*8191=16382b;共压缩=8b 16382b=16390b。
[0164]
本技术的分类压缩算法:通过1个字节保存类型;其余同gorilla压缩算法;因此,共压缩=1b 16390b=16391b。
[0165]
(4)counter类型:
[0166]
gorilla压缩算法:通过8个字节保存第一个值;使用2.5b保存相邻两数的xor值,故后面的值=2.5b*8191=20478b;共压缩8b 20478b=20486b。
[0167]
本技术的分类压缩算法:通过1个字节保存类型;通过8个字节保存第一个值;使用2b保存delta-xor后的值,故后面的值=2b*8191=16382b;共压缩1b 8b 16382b=16391b。
[0168]
综上,gorilla压缩算法与本技术的分类压缩算法的压缩效率如表5所示:
[0169]
表5
[0170][0171][0172]
可见,在gauge类型下,由于都使用xor压缩算法,gorilla压缩算法与本技术的分类压缩算法的压缩效率差不多,只是本技术的分类压缩算法多了1个字节表示类型,在大规模数据场景下可忽略不计。
[0173]
在其它数据类型下,本技术的分类压缩算法都优于gorilla压缩算法,总体上看,若各种数值类型平均分布,本技术的分类压缩算法的压缩效率较gorilla压缩算法提升39.5%。
[0174]
综上所述,针对时序数据的不同类型,采用不同的压缩算法,固定值类型的值数据只需要对第一个值进行保存;等差数据类型的值数据只需要对第一个值及等差数值进行保存;gauge类型的值数据,基于xor异或逻辑运算进行压缩;counter类型的值数据,基于delta运算及xor异或逻辑运算进行压缩;本技术在不损失精度的前提下,极大的提升了压缩效率,且压缩算法简单、易用,仅使用通用的无损压缩算法,比如delta运算及xor异或逻辑运算。
[0175]
图5是根据一示例性实施例示出的一种时序数据压缩的装置的结构方框图。该装置包括:
[0176]
时序数据块获取模块501,用于获取目标时序数据,并对该目标时序数据进行分块处理,以获取各个时序数据块;
[0177]
分布类型获取模块502,用于获取该各个时序数据块中的值数据的分布类型;
[0178]
压缩处理模块503,用于根据该值数据的分布类型,对该各个时序数据块中的值数据分别进行压缩处理。
[0179]
在一种可能的实施方式中,该时序数据块获取模块501,还用于:
[0180]
根据指标名称及时间顺序,对该目标时序数据进行分块处理,以获取各个时序数据块。
[0181]
在一种可能的实施方式中,该分布类型获取模块502,还用于:
[0182]
获取该各个时序数据块内的值数据的分布特点;
[0183]
根据该值数据的分布特点,获取该各个时序数据块中的值数据的分布类型;该值数据的分布类型包括固定值类型、等差数据类型、gauge类型及counter类型。
[0184]
在一种可能的实施方式中,该压缩处理模块503,还用于:
[0185]
通过第一字节量对该值数据的分布类型进行类型标识;
[0186]
根据该值数据的分布类型,分别对该各个时序数据块中的值数据的数据内容进行压缩处理。
[0187]
在一种可能的实施方式中,该压缩处理模块503,还用于:
[0188]
当该值数据的分布类型为固定值类型时,通过第二字节量对该值数据的第一个值进行保存;
[0189]
当该值数据的分布类型为等差数据类型时,通过第二字节量对该值数据的第一个值进行保存,通过第三字节量对该值数据的等差数值进行保存;
[0190]
当该值数据的分布类型为gauge类型时,基于xor异或逻辑运算对该值数据的数据内容进行压缩处理;
[0191]
当该值数据的分布类型为counter类型时,基于delta运算及xor异或逻辑运算对该值数据的数据内容进行压缩处理。
[0192]
在一种可能的实施方式中,该压缩处理模块503,还用于:
[0193]
当该值数据的分布类型为gauge类型时,通过第二字节量对该值数据的第一个值进行保存,并通过第四字节量对该值数据中各个相邻值的异或运算结果进行保存。
[0194]
在一种可能的实施方式中,该压缩处理模块503,还用于:
[0195]
当该值数据的分布类型为counter类型时,通过第二字节量对该值数据的第一个值进行保存;
[0196]
获取该值数据中各个相邻值的差值;
[0197]
对该值数据中各个相邻值的差值进行异或运算,并通过第五字节量对该值数据对应的所有异或运算结果进行保存。
[0198]
在一种可能的实施方式中,该装置,还用于:
[0199]
根据该值数据的分布类型,对该各个时序数据块中压缩处理后的值数据分别执行读取操作。
[0200]
在一种可能的实施方式中,该装置,还用于:
[0201]
针对该时序数据块中的时间戳数据,对该时间戳数据的第一个值进行保存;
[0202]
获取该时间戳数据中各个相邻值的差值;
[0203]
对该时间戳数据中各个相邻值的差值进行二次作差计算,并将该时间戳数据对应的所有二次作差计算结果进行保存,以对该时序数据块中的时间戳数据进行压缩。
[0204]
综上所述,针对时序数据的不同类型,采用不同的压缩算法,固定值类型的值数据只需要对第一个值进行保存;等差数据类型的值数据只需要对第一个值及等差数值进行保存;gauge类型的值数据,基于xor异或逻辑运算进行压缩;counter类型的值数据,基于delta运算及xor异或逻辑运算进行压缩;本技术在不损失精度的前提下,极大的提升了压缩效率,且压缩算法简单、易用,仅使用通用的无损压缩算法,比如delta运算及xor异或逻辑运算。
[0205]
请参阅图6,其是根据本技术一示例性实施例提供的一种计算机设备示意图,所述计算机设备包括存储器和处理器,所述存储器用于存储计算机程序,所述计算机程序被所述处理器执行时,实现上述的一种时序数据压缩的方法。
[0206]
其中,处理器可以为中央处理器(central processing unit,cpu)。处理器还可以为其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
[0207]
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本技术实施方式中的方法对应的程序指令/模块。处理器通过运行存储在存储器中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据处理,即实现上述方法实施方式中的方法。
[0208]
存储器可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储处理器所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0209]
在一示例性实施例中,还提供了一种计算机可读存储介质,用于存储有至少一条计算机程序,所述至少一条计算机程序由处理器加载并执行以实现上述方法中的全部或部分步骤。例如,该计算机可读存储介质可以是只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、只读光盘(compact disc read-only memory,cd-rom)、磁带、软盘和光数据存储设备等。
[0210]
本领域技术人员在考虑说明书及实践这里公开的申请后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由下面的权利要求指出。
[0211]
应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求来限制。