1.本发明涉及大数据技术领域,尤其涉及一种基于时间序列的大数据编解码方法及装置。
背景技术:2.随着大数据技术在各个领域和行业中的深入应用,对海量数据的处理、传输、存储、查询、分析等业务面临着不断升级的挑战。这些挑战不仅包括各种信息系统、终端设备和应用、网络设备等无时无刻不在产生着的各种格式和结构的数据,导致数据增速呈级数式地增高;还包括用于存储、传输和处理这些海量数据的硬件和网络资源总是处于一个临界不足的状态,因为对于很对企业和机构来说,资金、基础设施、电力和环境的消耗在短时间内造成的损失和成本投入还无法通过大数据的资产价值收回效益。也就是说,即便是在计算、存储和网络等基础设施的单位成本不断降低的今天,还是无法有效满足大数据对资源需求的“贪婪”增长。因此,通过创新的技术手段不断提升海量数据的处理、传输、存储和使用的效率是具有长期显著价值的。
3.时间序列数据(简称时序数据)则是大数据中的一种具体形式,代表一系列时间点上的观测值按等时间间隔获取所得的数据集合,例如pm2.5的实时测量浓度、股票的实时价格、生产车间的温度传感器测量值、气象学中某城市的年降水量、月平均气温等等,即时序数据描述了被测量主体在某一时间范围内的每个时间点上的测量值。从某种角度讲,几乎所有的数据都是具有时间维度的,特别是数据生成和状态变迁的时候确定的数据时间戳往往是具有持续有效价值的。各行各业都是离不开时间序列数据的,各种大数据的场景都会包含时间序列数据。特别是近年来,伴随着物联网、大数据和人工智能技术的发展,时序数据的规模呈现一个爆发式的增长态势,以百度无人车为例,其每辆车每天采集到的数据规模便可达8tb。
4.在具体的大数据技术场景中,基础层面的技术领域无外乎就是数据编码、压缩、存储、传输、查询和检索。一个好的数据系统一定是在这些基础层面的性能足够优秀,才能更好地为高层次的技术领域服务,比如海量数据的汇总统计、分布式计算和挖掘、知识图谱、机器学习等等。现有的大数据技术往往只是聚焦在一个领域点上,很难形成一个系统化的解决方案,也就很难形成最具性价比的解决方案和系统。比如在很多数据系统里面都会使用的无损压缩技术snappy、zlib和lz系列算法都没有充分考虑数据的独特特性(比如时间序列数据的时序性),因此压缩效率不会很理想。再比如一些跨编程语言(或称为编程语言无关)的数据序列化/反序列化技术,比如xml、json、avro、protobuf等,在处理具有一定数据模式schema的数据编码方面具有广泛的应用,但是这些技术本身并没有充分考虑数据的压缩,一般情况下需要和通用压缩算法配合使用,也没有考虑数据在传输和网络交换过程中的吞吐能力、可靠性和一致性等问题,更加没有考虑数据存储的效率,所以往往都需要在数据持久化到存储系统之前进行很大的结构变换。
5.另外一些分布式数据存储系统,比如目前最为流行的hadoop系列中的各种数据存
储系统,比如hdfs、hbase、hive、opentsdb等,都具备极佳的海量数据存储和检索能力,但是在数据编码和压缩方面都不够深入,导致有效数据单位的存储成本不低,而且系统的吞吐能力也存在瓶颈。另外,针对这些系统业界都会有流行的数据迁移工具辅助各种大数据场景的实现,比如flume、sqoop、logstash等。这些工具在功能性上已经足够丰富,但是在并没有充分考虑数据迁移的源端和目标端的编码和压缩技术,以及数据在迁移管道上的可靠性和一致性等问题。
6.除了以上这些通用技术以外,目前有一些比较新的专利技术方案,比如:数据压缩方法及装置(申请号:201811061747.2,已授权)、一种面向流式实时数据的数据压缩方法(申请号:201910112962.9,已公开尚未授权)等,都是以时间序列数据作为研究对象,但是将研究的视角局限在了数据压缩,也就是利用时序信息提高压缩率,这是一类好的方法,但是都没有充分考虑数据被压缩之后在传输分发、存储、查询和检索等方面应用的时候会遇到的核心的挑战和问题。
技术实现要素:7.本发明的目的在于提供一种基于时间序列的大数据编解码方法及装置,能够高效的针对时间序列的大数据进行编解码。
8.为了实现上述目的,本发明的第一方面提供一种基于时间序列的大数据编解码方法,包括:
9.获取基于时间序列的原数据,采用预设的数据模式对所述原数据进行编码形成数据帧;
10.将新产生的数据帧与同一数据模式下的参考数据帧做差分运算,并以差分值更新所述数据帧中的属性值;
11.将所述数据帧切分成多个数据传输片段,通过对所述传输片段压缩后封装成数据传输单元并由编码段发送至解码端;
12.利用解码端对所述数据传输单元解压缩后复原所述传输片段,组装得到所述数据帧存储于数据系统中。
13.优选地,针对结构化和/或半结构化的原数据采用二进制编码结合重复字符步长编码的方式定义数据模式;
14.所述数据模式中将字节的8比特位拆分成两部分,第一部分表示字符的比特编码,第二部分表示字符的连续重复次数;
15.所述数据模式中包括字符与比特编码的对应关系。
16.较佳地,第一部分的比特编码通过前6位比特编码表示,第二部分的比特编码通过后2位比特编码表示。
17.优选地,采用预设的数据模式对所述原数据进行编码形成数据帧的方法包括:
18.识别原数据中的属性部和属性值部,并分别构建属性部的第一编码结构和属性值部的第二编码结构;
19.将属性部中数据模式名称的字节数n1存入第一编码结构的第1字节位,接着将数据模式名称的n1个字节依次存入后续的n1个字节位,再接着将其中属性的个数n2存入后续的1个字节位中,紧接着在后续的n2个字节位中依次存储每个属性的字节长度,最后接入n2
个字节段,每个字节段中包含了所对应属性的类型编码、取值范围和属性名称的全部字节内容,完成对属性部中数据模式段的编码;
20.解析原数据中数据模式的字节码,得到属性名称的有序列表,依序对有序列表中的属性值进行二进制编码,并将编码后的属性值顺序组装成至少一个数据段依序存入第二编码结构,完成对属性值部中数据段的编码;
21.根据数据帧序列号生成器生成的序列号、数据模式段长度、数据段数量、数据生成时间戳和采集时间戳编码数据帧头的字节码数据;
22.按照数据帧头、数据模式段和数据段的顺序组装形成所述数据帧。
23.较佳地,将新产生的数据帧与同一数据模式下的参考数据帧做差分运算,并以差分值更新所述数据帧中的属性值的方法包括:
24.指定一个数据帧为参考数据帧,通过解析参考数据帧中的数据模式段长度和数据段数量,定位起始数据段的偏移量;
25.解析参考数据帧中的数据模式段得到每个属性值的字节数,通过汇总每个属性值的字节数得到每个数据段的长度;
26.根据起始数据段的偏移量、每个数据段的长度以及数据模式段长度和数据段数量得到每个数据段的偏移量;
27.基于上述逻辑识别出同一数据模式下新产生数据帧中各数据段的属性值,通过比较新产生数据帧与参考数据帧中属性值的差值,并将新产生数据帧中的属性值更新为差值,同时更新数据模式段中属性的类型编码。
28.进一步地,在步骤将所述数据帧切分成多个数据传输片段,通过对所述传输片段压缩后封装成数据传输单元并由编码段发送至解码端之前还包括:
29.预设数据传输片段的数据结构,所述数据传输片段包括头部和数据体;
30.所述头部的信息包括数据传输片段的唯一序号编码、数据传输片段的长度、标志位、数据帧标识和数据帧长度,所述数据帧标识包括数据模式序号和数据帧序号;
31.所述数据体包括数据段的属性值。
32.优选地,将所述数据帧切分成多个数据传输片段的方法包括:
33.参考预设的数据传输片段的数据结构,将所述数据帧中的多个数据段切分成多个数据传输片段。
34.优选地,利用解码端对所述数据传输单元解压缩后复原所述传输片段,组装得到所述数据帧的方法包括:
35.解码端对接收到的多个所述数据传输单元的数据传输片段的长度进行校验;
36.校验通过后将多个所述数据传输单元按照数据模式分组,并对同一分组中的多个所述数据传输单元按照唯一序号编码排序复原所述数据帧;
37.利用所述数据传输单元中标志位提供的压缩算法对各所述数据帧进行解压缩;
38.根据复原的数据帧及对应的参考数据帧,基于差分的逆运算还原数据帧中的属性值,同时更新数据帧中属性的类型编码。
39.与现有技术相比,本发明提供的基于时间序列的大数据编解码方法具有以下有益效果:
40.本发明提供的基于时间序列的大数据编解码方法,从数据源中采集基于时间序列
的原数据,并采用预设的数据模式对原数据进行编码形成数据帧,然后指定一个数据帧为参考数据帧,该参考数据帧一般为初始原数据形成的初始数据帧,后续在接收到新产生的数据帧后,将新产生数据帧与属于同一数据模式下的参考数据帧做差分运算,并根据差分值更新新产生数据帧中的属性值,由于差分值相比较于属性值占据了更小的数据空间,故通过差分值表示的数据帧得到了进一步压缩,紧接着为了便于数据帧的传输,还需将初步压缩的数据帧切分成多个数据传输片段,通过对各传输片段压缩后封装成数据传输单元并由编码段发送至解码端,最终由解码端对数据传输单元解压缩后复原传输片段,组装后还原数据帧存储于数据系统中。
41.可见,本发明通过预设数据模式的构建原数据对应的数据帧,实现对原数据的初步压缩,然后采用差分运算的方式对同一数据模式新产生数据帧的属性值进行更新,实现对数据帧的进一步压缩,最终通过将数据帧切分成多个数据传输片段再次压缩后发送至解码端,再由解码端对数据传输单元解压缩复原数据帧存储于数据系统中,从而实现针对时间序列大数据的高效编解码。
42.本发明的第二方面提供一种基于时间序列的大数据编解码及存储装置,应用有上述技术方案所述的基于时间序列的大数据编解码及存储方法,所述装置包括:
43.编码单元,用于获取基于时间序列的原数据,采用预设的数据模式对所述原数据进行编码形成数据帧;
44.更新单元,用于将新产生的数据帧与同一数据模式下的参考数据帧做差分运算,并以差分值更新所述数据帧中的属性值;
45.切分单元,用于将所述数据帧切分成多个数据传输片段,通过对所述传输片段压缩后封装成数据传输单元并由编码段发送至解码端;
46.解密单元,用于利用解码端对所述数据传输单元解压缩后复原所述传输片段,组装得到所述数据帧存储于数据系统中。
47.与现有技术相比,本发明提供的基于时间序列的大数据编解码装置的有益效果与上述技术方案提供的基于时间序列的大数据编解码方法的有益效果相同,在此不做赘述。
48.本发明的第三方面提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行上述基于时间序列的大数据编解码方法的步骤。
49.与现有技术相比,本发明提供的计算机可读存储介质的有益效果与上述技术方案提供的基于时间序列的大数据编解码方法的有益效果相同,在此不做赘述。
附图说明
50.此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
51.图1为本发明实施例中基于时间序列的大数据编解码方法的流程图;
52.图2为本发明实施例中大数据编解码整体架构(编码端)示意图;
53.图3为本发明实施例中大数据编解码整体架构(解码端)示意图;
54.图4为本发明实施例中数据模式的编码示例图;
55.图5为本发明实施例中数据帧的字节码结构示例图;
56.图6为本发明实施例中数据传输单元dtu的字节码结构示例图。
具体实施方式
57.为使本发明的上述目的、特征和优点能够更加明显易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其它实施例,均属于本发明保护的范围。
58.实施例一
59.请参阅图1,本实施例提供一种基于时间序列的大数据编解码方法,包括:
60.获取基于时间序列的原数据,采用预设的数据模式对原数据进行编码形成数据帧;将新产生的数据帧与同一数据模式下的参考数据帧做差分运算,并以差分值更新数据帧中的属性值;将数据帧切分成多个数据传输片段,通过对传输片段压缩后封装成数据传输单元并由编码段发送至解码端;利用解码端对数据传输单元解压缩后复原传输片段,组装得到数据帧存储于数据系统中。
61.本实施例提供的基于时间序列的大数据编解码方法,从数据源中采集基于时间序列的原数据,并采用预设的数据模式对原数据进行编码形成数据帧,然后指定一个数据帧为参考数据帧,该参考数据帧一般为初始原数据形成的初始数据帧,后续在接收到新产生的数据帧后,将新产生数据帧与属于同一数据模式下的参考数据帧做差分运算,并根据差分值更新新产生数据帧中的属性值,由于差分值相比较于属性值占据了更小的数据空间,故通过差分值表示的数据帧得到了进一步压缩,紧接着为了便于数据帧的传输,还需将初步压缩的数据帧切分成多个数据传输片段,通过对各传输片段压缩后封装成数据传输单元并由编码段发送至解码端,最终由解码端对数据传输单元解压缩后复原传输片段,组装后还原数据帧存储于数据系统中。
62.可见,本实施例通过预设数据模式的构建原数据对应的数据帧,实现对原数据的初步压缩,然后采用差分运算的方式对同一数据模式新产生数据帧的属性值进行更新,实现对数据帧的进一步压缩,最终通过将数据帧切分成多个数据传输片段再次压缩后发送至解码端,再由解码端对数据传输单元解压缩复原数据帧存储于数据系统中,从而实现针对时间序列大数据的高效编解码。
63.上述实施例中,针对结构化和/或半结构化的原数据采用二进制编码结合重复字符步长编码的方式定义数据模式;
64.数据模式中将字节的8比特位拆分成两部分,第一部分表示字符的比特编码,第二部分表示字符的连续重复次数;数据模式中包括字符与比特编码的对应关系。其中,第一部分的比特编码通过前6位比特编码表示,第二部分的比特编码通过后2位比特编码表示。
65.具体实施时,数据模式即数据结构的定义,包括属性名称、属性类型和其他可能的约束,通常来讲任何结构化或半结构化的数据都具有数据模式,时间序列数据一般情况下都是结构化或半结构化的数据,因此也具有数据模式。大数据编码的第一步就是构建数据模式,也就是识别数据源中被采集原数据的结构。
66.本实施例通过重新定义二进制编码结合重复字符步长编码的方法来定义数据模
式,以实现对原数据的初始压缩。这里设计的方法是将原数据中的字符限制在[0
‑
9]、[a
‑
z]、[a
‑
z]和连接符
“‑”
以及短下划线“_”一共64个字符的前提下,把一个字节的8比特拆分为两部分,一部分是6个比特位用于表示这64个字符,另一部分是2个比特位用于表示该字符连续出现的次数,取值为[1
‑
4],也就意味着重复字符步长不超过4。当然,如果相同字符连续出现次数大于4次,那么就需要重新开一个字节来表。
[0067]
字符的6比特编码定义如下所示:
[0068]
□0‑
9:从0b000000到0b001001;
[0069]
□
a
‑
z:从0b001010到0b100011;
[0070]
□
a
‑
z:从0b100100到0b111101;
[0071]
□
连接符
“‑”
:0b111110;
[0072]
□
短下划线“_”:0b111111;
[0073]
字符重复次数的编码为:
[0074]
□
1:0b00;
[0075]
□
2:0b01;
[0076]
□
3:0b10;
[0077]
□
4:0b11。
[0078]
其中,0b表示编码起始位,接下来就是对属性的数据类型和取值范围进行编码,如下表所示。其中日期时间使用时间戳值表示,所以只有字符串是变长的数据类型。
[0079][0080][0081]
属性数据类型和取值范围编码
[0082]
上述实施例中,采用预设的数据模式对原数据进行编码形成数据帧的方法包括:
[0083]
识别原数据中的属性部和属性值部,并分别构建属性部的第一编码结构和属性值部的第二编码结构;
[0084]
将属性部中数据模式名称的字节数n1存入第一编码结构的第1字节位,接着将数
据模式名称的n1个字节依次存入后续的n1个字节位,再接着将其中属性的个数n2存入后续的1个字节位中,紧接着在后续的n2个字节位中依次存储每个属性的字节长度,最后接入n2个字节段,每个字节段中包含了所对应属性的类型编码、取值范围和属性名称的全部字节内容,完成对属性部中数据模式段的编码;
[0085]
解析原数据中数据模式的字节码,得到属性名称的有序列表,依序对有序列表中的属性值进行二进制编码,并将编码后的属性值顺序组装成至少一个数据段依序存入第二编码结构,完成对属性值部中数据段的编码;根据数据帧序列号生成器生成的序列号、数据模式段长度、数据段数量、数据生成时间戳和采集时间戳编码数据帧头的字节码数据;按照数据帧头、数据模式段和数据段的顺序组装形成数据帧。
[0086]
可以理解的是,数据编码即按照既定的字节码规范将属性值内容组织成字节码流,并且和数据模式属性名称内容的字节码流组装到一起的过程。这里需要用到一个数据帧的概念。所谓数据帧就是将同一个时间点生成的具有相同数据模式的原数据汇集在同一个字节码流中,作为一个整体进行编码、传输和存储,该字节码流就是一个数据帧。
[0087]
具体实施时,基于以上这种紧凑的编码方法,可以得到针对单个属性名称字节码编码方法,以属性名称为“aaaa”为例说明:
[0088]1‑
1、先对属性名称“aaaa”的属性类型进行编码,按照上表查表可知,“aaaa”属于微整型,故对应的类型编码为0b00000000,将结果放入第一个字节,进入步骤1
‑
2;
[0089]1‑
2、将属性名称按照属性编码方法进行编码,同时得出编码后的字节数,如“aaaa”的将字节数为4,放入继1
‑
1之后的下一个字节,将编好码的字节接续在后面,例如“aaaa”编码后为00101011;
[0090]
说明:这里使用一个字节表示无符号整数,以编码属性名称的长度,所以要求其长度不能过长,这里要求最大字节数是252(即255
‑
3),保证整个属性的元信息长度不超过255个字节,便于整体编码。
[0091]
基于以上这种紧凑的编码方法,可以得到单个属性名称的字节码解码方法:
[0092]2‑
1、分析属性类型和取值范围:读入第一个字节,以此确定具体的属性类型和数值长度,进入步骤2
‑
2;
[0093]2‑
2、读入下一个字节,获取属性名称的字节数,进入步骤2
‑
3;
[0094]2‑
3、再读入n个字节,每个字节按照属性(字段)编码方法进行解码就可以得到属性名称的字符串。
[0095]
同理,基于上述编码方案,可以进一步地设计一个完整的数据模式的字节码编码方案,也就是对属性部的编码方案:
[0096]
首先用一个字节表示数据模式名称的字节数n1,然后用n1个字节存储数据模式名称对应的字符,如student,第一个字节中n1为7,接下来用n1字节,也即7个字节依次存储s t u d e n t这7个字符,再接着用一个字节表示属性的个数n2(不超过255),如name和sex,此时n2为2,然后用n2个字节存储每个属性的字节长度,这个数据可以作为索引,最后就是n2个字节段,每个字节段都包含一个属性类型、取值范围和属性名称的全部字节内容,单个字节段的长度不超过255个字节。图4说明了这个结构,其中一个短的方形代表一个字节。
[0097]
数据帧的字节码结构如图5所示,开头先是数据帧头部分,描述了数据帧的一些基本元数据信息,总长度24个字节,紧接着就是数据模式段即上面所定义的数据模式部分的
字节码。然后是数据段即存储数据的字节码。如果数据模式的属性中存在变长字符串,那么就需要在数据段中存储字符串的实际长度,字符串的实际数据则在变长字符串段中存储,其顺序和数据段中的变长字符串的顺序一致。
[0098]
数据编码的过程就是将同一个时间点生成的原数据组装成数据帧的过程:
[0099]3‑
1、解析数据模式字节码,得出属性名称的有序列表;
[0100]3‑
2、读取原数据的数据结果集,对于每一条结果记录按照属性名称列表的顺序把原数据中的属性值进行二进制编码;如果属性类型是非字符串,那么按照属性类型占用的字节长度编码;如果是字符串,那么用utf
‑
8编码其字面值,得到编码好的数据和实际长度,再编码实际长度值为2个字节数据;
[0101]3‑
3、将编码好的属性值或字符串长度按照属性列表顺序组装成一个数据段,将每一个数据段连接起来拼接到数据模式段的后面;
[0102]3‑
4、将编码好的字符串字面值按照属性编码顺序组装成一个变长字符串段,将变长字符串段拼接到数据段后面;
[0103]3‑
5、根据数据帧序列号生成器生成的序列号,数据模式段长度,数据段数量,数据生成时间戳和采集时间戳编码数据帧头字节码数据,拼接在数据模式段前部,至此就完成了一个数据段的编码。
[0104]
上述实施例中将新产生的数据帧与同一数据模式下的参考数据帧做差分运算,并以差分值更新数据帧中的属性值的方法包括:
[0105]
指定一个数据帧为参考数据帧,通过解析参考数据帧中的数据模式段长度和数据段数量,定位起始数据段的偏移量;解析参考数据帧中的数据模式段得到每个属性值的字节数,通过汇总每个属性值的字节数得到每个数据段的长度;根据起始数据段的偏移量、每个数据段的长度以及数据模式段长度和数据段数量得到每个数据段的偏移量;基于上述逻辑识别出同一数据模式下新产生数据帧中各数据段的属性值,通过比较新产生数据帧与参考数据帧中属性值的差值,并将新产生数据帧中的属性值更新为差值,同时更新数据模式段中属性的类型编码。
[0106]
对于时间序列数据,可以将某一个时间点汇集到的原数据和之前某一个时间点汇集的原数据的属性值逐个做减法,从而得到差分数据。在同一数据模式不变的前提下,这种差分运算的结果可以大幅缩短数据的取值范围,甚至根据时间和空间局部性原理,很多数据在一定时间窗口内是不变或者变化很小的,所以差分的效果会更好。这种特性是时间序列数据特有的,需要好好利用。
[0107]
差分运算需要用到参考数据帧,参考数据帧就是用于做差分运算的主数据帧,即之前某个时间点生成的没有被差分的数据帧,参考数据帧会被缓存起来,供后面生成的数据帧做差分使用。
[0108]
基于以上数据帧的结构定义,可以给出数据帧差分运算的过程:
[0109]4‑
1、将缓存的参考数据帧记为r,在r的数据帧头中解析出数据模式段长度和数据段数量datacount,这样就可以快速定位r的起始数据段偏移量dataoffset1;
[0110]4‑
2、解析r的数据模式段,得到每一个属性值的字节数,相加就得到了单个数据段的长度datalen,那么根据dataoffset1、datalen和datacount就可以得到每一个数据段的偏移量:
[0111]
dataoffsetn=dataoffset1+(n
‑
1)
×
datalen,1≤n≤datacount;
[0112]4‑
3、利用上述对r解析得到的信息,可以直接分析当前数据帧f的数据,顺序读取数据帧f数据段中的每一个属性值,与r中对应的相同位置的属性值进行比较,并根据如下规则进行差分运算:
[0113]
a、如果当前属性是非字符串类型,那么用f的属性值减去r的属性值,得到的差值取值范围有两种情况:一种情况是取值范围比原类型小(比如原类型是整型,差值在微整形、小整形或中整形范围内,再比如原类型是双精度浮点,差值在单精度浮点范围内),另一种情况是取值范围和原类型相同或比原类型大,这里只针对第一种情况做差分。对于当前帧的所有数据段,如果一个属性的取值范围都变小了,那么可以给当前数据帧的该属性的所有值进行差分“瘦身”,数据段中更新属性值为差值,并且更新数据模式段中属性类型编码为新的属性类型编码;
[0114]
b、如果当前属性是字符串类型,那么比较f和r的变长字符串的实际值,如果相同,那么将f的字符串实际值变为空字符串,即长度为0的字符串,同时更新数据段中对应属性字节部分的值为0,即长度为0的短字符串,进一步更新属性类型为0b10000001(标识差分类型),表示发生了差分;如果不相同,则什么也不做;
[0115]4‑
4、将经过差分运算的f传入下一个过程数据压缩。
[0116]
过程说明:4
‑
1到4
‑
2是解析参考数据帧元数据和属性值长度的过程,且每一帧在做差分之前其字节码布局和数据量与参考数据帧都是相同的。
[0117]
数据压缩:在步骤4
‑
4之后,采用成熟的无损压缩算法snappy、zlib和lz等,对数据段和变长字符串段进行进一步压缩的过程,该过程可以进一步减少数据帧的体积约30%
‑
40%,有效节省存储空间。
[0118]
上述实施例中,在步骤将数据帧切分成多个数据传输片段,通过对传输片段压缩后封装成数据传输单元并由编码段发送至解码端之前还包括:
[0119]
预设数据传输片段的数据结构,数据传输片段包括头部和数据体;头部的信息包括数据传输片段的唯一序号编码、数据传输片段的长度、标志位、数据帧标识和数据帧长度,数据帧标识包括数据模式序号和数据帧序号;数据体包括数据段的属性值。
[0120]
上述实施例中,将数据帧切分成多个数据传输片段的方法包括:
[0121]
参考预设的数据传输片段的数据结构,将数据帧中的多个数据段切分成多个数据传输片段。
[0122]
具体实施时,数据帧切分和封装的目的是便于高效的网络传输,以及数据安全保护。由于tcp/ip协议的规定,一个以太网数据帧的用户数据段大小在46
‑
1500字节之间,再减去tcp协议头占用的40个字节,留给业务数据的大小就是6
‑
1460个字节。所以在进行大数据传输的时候,最有效的方式是需要把数据帧先切分成数据传输片段再进行传输。
[0123]
每一个数据传输片段被称作数据传输单元(dtu),预设的数据传输片段的数据结构如图6所示,dtu头部占用32个字节。其中:
[0124]
dtu序号是一段时间内每个dtu全局唯一的编码,是以1为增量递增的,标识dtu的封装和传输的逻辑顺序。如果出现网络乱序,那么在接收端可以通过增加缓冲区和重排序的方法调整dtu的顺序;
[0125]
dtu长度是当前dtu头部加上dtu数据体的总字节数,不超过1460个字节,可在接收
端验证数据是否部分丢失或损坏;
[0126]
标志位可包含这几类信息:当前使用的数据校验和算法,数据帧的压缩算法,是否是参考帧等。这些信息供接收端使用;
[0127]
数据帧标识包括数据模式序号和数据帧序号,用以标识该dtu切分的是哪一个数据帧。
[0128]
数据帧长度即该dtu切分的数据帧的总长度。用于在接收端拼装的时候进行校验。
[0129]
数据校验是对当前dtu(dtu头部加上dtu数据体)的签名摘要,用于防止数据被篡改。
[0130]
基于这样的设计,dtu可以实现乱序发送,具有防重发、防丢包、防篡改的高可靠机制。
[0131]
上述实施例中,利用解码端对所述数据传输单元解压缩后复原所述传输片段,组装得到所述数据帧的方法包括:
[0132]
解码端对接收到的多个所述数据传输单元的数据传输片段的长度进行校验;校验通过后将多个所述数据传输单元按照数据模式分组,并对同一分组中的多个所述数据传输单元按照唯一序号编码排序复原所述数据帧;利用所述数据传输单元中标志位提供的压缩算法对各所述数据帧进行解压缩;根据复原的数据帧及对应的参考数据帧,基于差分的逆运算还原数据帧中的属性值,同时更新数据帧中属性的类型编码。
[0133]
具体实施时:这一模块是编码过程的最后一个模块,也即数据帧切分和封装的逆过程,以便为后面的过程准备数据。过程如下:
[0134]5‑
1、每接收到一个dtu,首先根据dtu长度对每一个dtu的字节数进行验证,然后根据标志位算法对dtu进行校验和计算,并与dtu带有的传输前的校验和进行比对验证,验证通过的话向发送端反馈确认消息,否则反馈重传消息;
[0135]5‑
2、根据dtu序号对接收到的dtu进行缓存、连续性检查和排序,如果发现缺失dtu那么向发送端反馈dtu缺失重传消息。
[0136]5‑
3、根据数据帧标识对dtu进行分组处理,每一类数据模式的数据帧对应一个分组,再根据数据帧长度累加每一个分组的数据帧,直到达到数据帧长度,这样就可以组装成一个完整的数据帧。
[0137]5‑
4、根据dtu标志位的压缩算法标志,对数据帧的数据段和变长字符串段进行解压缩。
[0138]5‑
5、根据dtu标志位确定对应的数据帧是否是参考帧,如果是参考帧那么将解压缩之后的参考数据帧缓存起来。
[0139]5‑
6、如果不是参考帧,那么就需要进行解码,即逆向差分的过程:针对每一个属性,如果类型是0b10000001,那么用参考帧的字符串值代替当前帧的字符串值,并更新数据段中的字符串长度和数据模式段中属性类型为0b10000000,以还原数据帧的数据内容;如果类型不是0b10000001,那么比较当前帧和参考帧属性类型,类型不同的话说明编码端做了差分运算,就用差分值加上参考帧属性值得到数据段中新的当前值,并更新当前帧属性类型为参考帧类型。
[0140]
此外,本实施例支持以下几种的数据索引和数据存储的构建方式,数据索引即在系统内存中建立的可以快速访问(通常是常量时间复杂度内)数据对象的方法。数据索引具
体的设计和实现在一定程度上又依赖于数据存储的结构。这里分几种情况讨论。
[0141]
1、最简单情况:无需第三方存储系统,由数据帧的字节码文件作为存储
[0142]
因为数据帧文件的字节码结构,所以可以直接存储在系统磁盘上作为存储系统使用。在这种情况下,数据索引就需要能够根据数据模式的名称和时间戳(生成时间戳和采集时间戳)定位到对应的数据帧。这是对时间序列数据进行检索的基本要求。另外,如果要对业务数据建立索引,那么就需要建立从属性和属性值到数据段的索引,以便快速定位和获取某一条数据记录。
[0143]
该种情况支持以下三类数据索引:
[0144]
a、顶层索引:从数据模式名称(或标识)联合时间戳映射到数据帧文件的二级索引结构;
[0145]
b、业务数据索引:单个或多个数据属性和值联合起来映射到数据段偏移位置的索引结构;
[0146]
c、变长字符串索引:字符串属性名映射到变长字符串段偏移量的索引结构。
[0147]
2、关系数据库或文档数据库系统:根据数据模式在数据库中构建索引
[0148]
如果目标存储系统是关系数据库(比如mysql)或文档数据库(比如mongodb)系统,那么可以将数据模式对应为表或集合,数据模式的属性对应为列字段或属性,数据段中包含的数据则是数据记录或文档数据。a类索引就对应在时间戳字段或属性上建立的索引,b类索引就对应在业务字段或属性上建立的索引,c类索引则自然支持。
[0149]
3、大数据存储系统:根据数据模式单独构建索引
[0150]
如果目标存储系统是大数据系统(比如hbase),那么可以将数据模式对应为表,数据模式的属性对应为列簇和列,数据段中包含的数据则是列值。a类索引和b类索引的时间戳和业务属性就可以联合起来构成表的行键,c类索引则自然支持。a类索引和b类索引还可以联合起来形成单独的多级索引结构,以支持更复杂的检索和更大规模的数据库。
[0151]
综上,本具有以下技术效果:
[0152]
1、基于一套统一的编码方法和结构,将数据压缩、传输、存储和查询检索有机结合起来,每个环节都在发挥自由优势的同时也会正向地影响其他环节,以达到系统整体效率最佳;
[0153]
2、针对时间序列大数据有更好的压缩效率,以有效节省存储空间和传输带宽;
[0154]
3、可靠高效率的数据传输和交换,适于分布式大数据系统的数据接入、数据备份和使用;
[0155]
4、支持多样化的数据存储和检索方案,适用于不同的大数据环境;
[0156]
5、可实现高效率轻量级的数据存储和检索系统,适用于小型的边缘计算系统或嵌入式、物联网设备。
[0157]
图2和图3事实上描述了一个时序大数据采集、传输和存储的典型的系统流程,具有普适性。本实施例的编码器和解码器流程可以作为大数据etl(数据提取、转换、加载存入)子系统实施。
[0158]
另外,本实施例还可应用于分布式边缘计算系统,分布式边缘计算系统的场景通常是在物联网领域,比如智能家居、工业物联网、智慧农业等,数量众多的设备每隔一段时间间隔(几秒到几分钟)就需要将设备自身的运行状态数据和对环境监测得到的数据上报
到云端,便于云端系统能够统一集中和分析这些数量庞大的数据。为了进一步提升整体系统效率,边缘云作为传统云平台向终端设备侧,即物端的下沉,可以通过先对采集到的数据进行汇总和预处理,减缓上层云网络通路的压力和数据处理的压力。
[0159]
本实施例的大数据编码器可以部署在边缘设备中,对设备时序数据进行编码和压缩,有效地降低对上层云网络带宽的需求,同时保证足够的传输可靠性。如图1和图2中的数据管道在这个场景下就是边缘云和上层云之间的网络通路或软件系统。同时在上层云中部署大数据解码器就可以对采集到的数据接入大数据分析平台,从而实现有效利用。
[0160]
在一些场景中,边缘设备的能力被集成到终端的物联网设备中。这个时候把大数据编码器部署在终端设备中依然可以起到有效节省带宽和提升数据传输可靠性的目的。
[0161]
实施例二
[0162]
本实施例提供一种基于时间序列的大数据编解码装置,包括:
[0163]
编码单元,用于获取基于时间序列的原数据,采用预设的数据模式对所述原数据进行编码形成数据帧;
[0164]
更新单元,用于将新产生的数据帧与同一数据模式下的参考数据帧做差分运算,并以差分值更新所述数据帧中的属性值;
[0165]
切分单元,用于将所述数据帧切分成多个数据传输片段,通过对所述传输片段压缩后封装成数据传输单元并由编码段发送至解码端;
[0166]
解密单元,用于利用解码端对所述数据传输单元解压缩后复原所述传输片段,组装得到所述数据帧存储于数据系统中。
[0167]
与现有技术相比,本发明实施例提供的基于混沌工程的故障演练装置的有益效果与上述实施例一提供的基于混沌工程的故障演练方法的有益效果相同,在此不做赘述。
[0168]
实施例三
[0169]
本实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器运行时执行上述基于混沌工程的故障演练方法的步骤。
[0170]
与现有技术相比,本实施例提供的计算机可读存储介质的有益效果与上述技术方案提供的基于混沌工程的故障演练方法的有益效果相同,在此不做赘述。
[0171]
本领域普通技术人员可以理解,实现上述发明方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,上述程序可以存储于计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而的存储介质可以是:rom/ram、磁碟、光盘、存储卡等。
[0172]
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。