System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及数据处理,具体涉及一种数据压缩、解压缩方法、装置、电子设备及计算机可读存储介质。
技术介绍
1、在软件工程中,profiling(性能分析)是指收集程序运行过程中的相关信息(如函数调用次数及耗时、内存分配频率及大小等)的过程。对profiling采集到的数据进行分析,能够快速地定位程序的性能瓶颈,为程序优化提供参考。
2、不同的profile工具对采集到的数据有不同的存储格式及相应的解析工具,解析工具可将采集的数据转换为可读的调用栈文本格式,进而据此生成可视化图表(如火焰图)。由于profile工具的采样频率在毫秒粒度,数分钟采样得到的调用栈文本数据的数据量通常较大,因此,调用栈文本数据在存储前通常使用通用的压缩算法直接进行压缩。当基于数据查询需求进行数据读取时,首先解压缩得到调用栈文本数据,再遍历查找所需的文本内容,进而可据此生成火焰图。
3、然而,在上述技术中,由于调用栈文本是按照采样时间顺序写入的,当需要读取任意时间范围内的采样数据时,只能从文件头顺序遍历,才能定位读取到需要的采样数据,因此,对调用栈文本数据的随机读取较慢。此外,对于采用通用压缩算法压缩得到的调用栈文本数据的压缩结果,无法支持随机读取。
技术实现思路
1、本申请提供了一种数据压缩、解压缩方法、装置、电子设备及计算机可读存储介质,以解决或至少部分解决上述问题。具体如下。
2、第一方面,本申请提供了一种数据压缩方法,所述方法包括:
3、对程序运行数据进行采
4、构建所述调用栈文本数据的编码表;
5、根据所述编码表,对所述调用栈文本数据进行压缩编码,得到所述调用栈文本数据的编码结果汇总表;
6、根据所述采样时间、所述调用栈采样文本的编码结果起始字节相对于所述编码结果汇总表起始字节的字节偏移量,以及所述调用栈采样文本的编码结果的字节长度,构建所述调用栈文本数据的编码结果索引表;
7、根据所述编码表、所述编码结果汇总表和所述编码结果索引表,生成所述调用栈文本数据的压缩文件。
8、第二方面,本申请提供了一种数据解压缩方法,所述方法包括:
9、接收针对采样时间位于目标时间范围内的目标调用栈采样文本的数据查询指令;
10、响应于所述数据查询指令,从调用栈文本数据的压缩文件中获取所述调用栈文本数据的编码表、编码结果汇总表和编码结果索引表;其中,所述调用栈文本数据的压缩文件通过第一方面所述的数据压缩方法进行压缩得到,所述调用栈文本数据包括各采样时间对应的调用栈采样文本;
11、从所述编码结果索引表中查询所述目标时间范围的起止时间对应的目标字节偏移量和目标字节长度;所述目标字节偏移量为所述目标调用栈采样文本的编码结果起始字节相对于所述编码结果汇总表起始字节的字节偏移量,所述目标字节长度为所述目标调用栈采样文本的编码结果的字节长度;
12、根据所述目标字节偏移量和所述目标字节长度,从所述编码结果汇总表中确定目标编码结果;
13、根据所述编码表,对所述目标编码结果进行解码,以获得所述目标调用栈采样文本。
14、第三方面,本申请实施例还提供了一种数据压缩装置,所述装置包括:
15、采样解析模块,用于对程序运行数据进行采样,并对采样结果进行解析,得到调用栈文本数据;所述调用栈文本数据包括各采样时间对应的调用栈采样文本;
16、第一构建模块,用于构建所述调用栈文本数据的编码表;
17、压缩编码模块,用于根据所述编码表,对所述调用栈文本数据进行压缩编码,得到所述调用栈文本数据的编码结果汇总表;
18、第二构建模块,用于根据所述采样时间、所述调用栈采样文本的编码结果起始字节相对于所述编码结果汇总表起始字节的字节偏移量,以及所述调用栈采样文本的编码结果的字节长度,构建所述调用栈文本数据的编码结果索引表;
19、生成模块,用于根据所述编码表、所述编码结果汇总表和所述编码结果索引表,生成所述调用栈文本数据的压缩文件。
20、第四方面,本申请实施例还提供了一种数据解压缩装置,所述装置包括:
21、接收模块,用于接收针对采样时间位于目标时间范围内的目标调用栈采样文本的数据查询指令;
22、获取模块,用于响应于所述数据查询指令,从调用栈文本数据的压缩文件中获取所述调用栈文本数据的编码表、编码结果汇总表和编码结果索引表;其中,所述调用栈文本数据的压缩文件通过第一方面所述的数据压缩方法进行压缩得到,所述调用栈文本数据包括各采样时间对应的调用栈采样文本;
23、查询模块,用于从所述编码结果索引表中查询所述目标时间范围的起止时间对应的目标字节偏移量和目标字节长度;所述目标字节偏移量为所述目标调用栈采样文本的编码结果起始字节相对于所述编码结果汇总表起始字节的字节偏移量,所述目标字节长度为所述目标调用栈采样文本的编码结果的字节长度;
24、确定模块,用于根据所述目标字节偏移量和所述目标字节长度,从所述编码结果汇总表中确定目标编码结果;
25、解码模块,用于根据所述编码表,对所述目标编码结果进行解码,以获得所述目标调用栈采样文本。
26、第五方面,本申请实施例还提供了一种电子设备,包括:
27、处理器;以及
28、存储器,用于存储程序,该电子设备通电并通过所述处理器运行该程序后,执行如第一方面或第二方面所述的方法。
29、第六方面,本申请实施例还提供了一种计算机可读存储介质,存储有程序,该程序被处理器运行,执行如第一方面或第二方面所述的方法。
30、与现有技术相比,本申请具有以下优点:
31、在本申请实施例提供的数据压缩方法中,在对调用栈采样文本进行编码时,记录其对应的采样时间及编码结果在编码结果汇总表中的起止字节位置,得到一个按采样时间顺序及编码结果字节起止位置组织起来的编码结果索引表,并将该表放入最终的压缩文件。如此,当需要读取某一时间范围的调用栈采样文本时,能够通过编码结果索引表快速定位到需要从编码结果汇总表中读取的字节范围,再结合编码表即可还原得到所需的调用栈采样文本。通过该数据压缩方法进行数据压缩,能够支持在压缩文件上的随机访问,因此读取时不需要解压出整个文件,可大幅减少读取时的内存消耗,此外,还能够实现对任意采样时间范围内压缩结果的快速定位和读取,解决了使用通用压缩算法后,无法在压缩结果中快速定位任意采样时间范围数据的问题。
本文档来自技高网...【技术保护点】
1.一种数据压缩方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述构建所述调用栈文本数据的编码表,包括:
3.根据权利要求2所述的方法,其特征在于,所述调用栈采样文本包括采样时间代码行和采样数据代码行;
4.根据权利要求3所述的方法,其特征在于,所述采样时间代码行包括采样时间标识符和采样时间;
5.根据权利要求4所述的方法,其特征在于,所述根据所述编码表,对所述调用栈文本数据进行压缩编码,得到所述调用栈文本数据的编码结果汇总表,包括:
6.根据权利要求1所述的方法,其特征在于,所述根据所述采样时间、所述调用栈采样文本的编码结果起始字节相对于所述编码结果汇总表起始字节的字节偏移量,以及所述调用栈采样文本的编码结果的字节长度,构建所述调用栈文本数据的编码结果索引表,包括:
7.根据权利要求1所述的方法,其特征在于,所述根据所述编码表、所述编码结果汇总表和所述编码结果索引表,生成所述调用栈文本数据的压缩文件,包括:
8.一种数据解压缩方法,其特征在于,所述方法包括:
...【技术特征摘要】
1.一种数据压缩方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述构建所述调用栈文本数据的编码表,包括:
3.根据权利要求2所述的方法,其特征在于,所述调用栈采样文本包括采样时间代码行和采样数据代码行;
4.根据权利要求3所述的方法,其特征在于,所述采样时间代码行包括采样时间标识符和采样时间;
5.根据权利要求4所述的方法,其特征在于,所述根据所述编码表,对所述调用栈文本数据进行压缩编码,得到所述调用栈文本数据的编码结果汇总表,包括:
6.根据权利要求1所述的方法,其特征在于,所述根据所述采样时间、所述调用栈采样文本的编码结果起始字节相对于所述编码结果汇总表起始字节的字节偏移量,以及所述调用栈采样文本的编码结果的字节长度,构建所述调用栈文本数据的编码结果索引表,包括:
7.根据权利要求1所述的方法,其特征在于,所述根据所述编码表、所述编码结果汇总表和所述编码结果索引表,生成所述调用栈文本数据的压缩文件,包括:
8.一种数据解压缩方法,其特征在于,所述方法包括:
9.根据权利要求8所述的方法,其特征在于,所述从所述编码结果索引表中查询所述目...
【专利技术属性】
技术研发人员:黄泽盛,林凯漩,杨航,冯钊,陈海锋,
申请(专利权)人:网易杭州网络有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。