日志压缩与解压方法、装置、电子设备及存储介质与流程
未命名
07-27
阅读:109
评论:0
1.本公开涉及计算机技术领域,具体涉及云平台、大数据以及数据处理等技术领域,尤其涉及一种日志压缩与解压方法、装置、电子设备及存储介质。
背景技术:
2.随着互联网技术的不断发展,许多大型网站和应用程序生成了大量的日志,这些日志需要存储和处理,否则将导致存储空间的浪费和计算资源的过载。因此,日志的压缩技术应运而生。
3.现有技术中,为了提高日志的存储和传输效率,同时也不影响日志的有效性,可以对日志进行压缩,以减小日志的体积。目前大部分日志压缩都采用一些常用的压缩算法,一般有zip,gzip,snappy等压缩算法,根据一些权威网站的测试,这些算法的压缩效率在2
–
10倍不等,压缩解压都需要完整地读取所有二进制数据,计算成本也较高。
技术实现要素:
4.本公开提供了一种日志压缩与解压方法、装置、电子设备及存储介质。
5.根据本公开的一方面,提供了一种日志压缩方法,包括:
6.获取待压缩的日志组的至少一个公共前缀的信息;所述待压缩日志组中包括多条日志;
7.基于所述至少一个公共前缀的信息,对所述待压缩日志组中的多条日志进行压缩处理。
8.根据本公开的另一方面,提供了一种日志的解压方法,包括:
9.获取待解压的日志组的压缩日志;
10.从所述压缩日志中获取所述日志组的至少一个公共前缀的信息;
11.基于所述至少一个公共前缀的信息,对所述压缩日志进行解压处理,得到所述日志组中的多条日志。
12.根据本公开的再一方面,提供了一种日志压缩装置,包括:
13.获取模块,用于获取待压缩的日志组的至少一个公共前缀的信息;所述待压缩日志组中包括多条日志;
14.压缩模块,用于基于所述至少一个公共前缀的信息,对所述待压缩日志组中的多条日志进行压缩处理。根据本公开的又一方面,提供了一种日志的解压装置,包括:
15.日志获取模块,用于获取待解压的日志组的压缩日志;
16.前缀获取模块,用于从所述压缩日志中获取所述日志组的至少一个公共前缀的信息;
17.解压模块,用于基于所述至少一个公共前缀的信息,对所述压缩日志进行解压处理,得到所述日志组中的多条日志。
18.根据本公开的再另一方面,提供了一种电子设备,包括:
computer)等智能设备;显示设备可以包括但不限于个人电脑、电视等具有显示功能的设备。
42.另外,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
43.图1是根据本公开第一实施例的示意图;如图1所示,本实施例提供一种日志压缩方法,具体可以包括如下步骤:
44.s101、获取待压缩的日志组的至少一个公共前缀的信息;待压缩日志组中包括多条日志;
45.s102、基于至少一个公共前缀的信息,对待压缩日志组中的多条日志进行压缩处理。
46.本实施例的日志压缩方法,可以应用在云业务场景的云平台中。
47.在云业务场景中,云平台中的日志主要由两部分构成,一部分是服务端信息,主要包括服务端对应的云业务资源的归属、服务端的网际互连协议(internet protocol;ip)地址、服务端端口、服务端的域名、服务端的资源路径信息、服务状态等;其中服务端的资源路径信息通常采用链接的形式,也可以称为服务端的链接;服务端端口即指的是服务端的端口标识或者端口信息。另一部分是访问者的客户端信息包括客户端的源ip地址、源端口信息、访问时间以及日志标识如日志id。
48.在实际应用中,一个云业务平台上可以部署多个服务端,多个服务端可以分别归属于一个、两个或者多个不同的用户。这里的用户可以不是个人用户,而为商家用户或者某个组织或者团体用户。基于上述部署,可以在日志的服务端的信息中记录云业务资源的归属,即服务端的对应的云业务资源所属的用户信息,简称用户信息。
49.服务端的信息中的服务状态用于标识服务端是否成功响应该访问。客户端信息中的日志标识为云平台为该日志配置的,唯一标识该日志的id。
50.在实际场景中,云平台接收到一条访问请求之后,可以通过镜像的方式,获取该访问的服务端信息中的云业务资源的归属、服务端的ip地址、服务端端口信息、服务端的域名、服务端的资源路径信息、以及客户端的源ip地址、源端口信息、以及访问时间,生成该访问的日志,并为该访问配置日志id。同时跟踪该访问,检测服务端对该访问的响应情况,得到服务端的服务状态,也记录在该访问的日志中。
51.在云平台中,部署的多个服务端会时刻地接收到客户端的访问,为了合理、准确、有效地对云平台中的日志进行存储,本实施例中,可以流式地读取多条日志,作为待压缩的日志组。具体地,流式读取待压缩的日志组时,可以设定流式读取到固定数量的日志,构成一个待压缩的日志组。或者也可以设定流式读取固定时间周期内的多个访问的多个日志,构成一个待压缩的日志组。其中固定数量可以根据实际需求或者实际经验来设置,例如,1000条、2000条等任意数量。固定时间周期可以为1分钟、2分钟或者其他时间周期,也可以根据实际需求或者实际经验来设置,在此不做限定。
52.经过对超大流量的云平台的机房内的访问日志的特征进行分析,发现存在特别明显的分化现象,云平台上的热点用户、热点ip地址的等热点数据占据了90%以上。基于上述特性,可以得知云平台的访问的日志中必然存在很多的日志具有共同的字段。而且考虑到
热点客户、热点ip地址等都属于服务端的信息,保存时通常位于日志的前段,所以,提出本公开的技术方案,基于待压缩的日志组的至少一个公共前缀的信息,对多条日志进行有效地压缩。具体地,可以先获取待压缩的日志组的至少一个公共前缀(prefix)的信息。也就是说,待压缩的日志组中的多条日志,可以仅对应一个公共前缀;也可以对应两个或者多个公共前缀。例如,待压缩日志组的多条日志中,有一部分日志携带有公共前缀1,还有另一部分日志携带有公共前缀2,可能还有一部分日志携带有公共前缀3等等。
53.本实施例中,考虑到公共前缀的信息是多条日志中共同存在的,可以基于至少一个公共前缀的信息,对多条日志中的公共前缀的信息进行压缩处理,可以减少公共前缀的信息的重复,进而减少日志的体积,实现压缩多条日志的目的。
54.本实施例的日志压缩方法,通过获取待压缩的日志组的至少一个公共前缀的信息,并基于至少一个公共前缀的信息,对待压缩日志组中的多条日志进行压缩处理,可以有效地减少待压缩的日志组的体积,达到压缩的目的。本实施例的技术方案,基于待压缩的日志组的至少一个公共前缀的信息,便可以实现压缩,与压缩算法相比,可以省去复杂的计算,有效地提高日志的压缩效率。
55.图2是根据本公开第二实施例的示意图;本实施例的日志压缩方法,在上述图1所示实施例的技术方案的基础上,进一步更加详细地描述本公开的技术方案。如图2所示,本实施例的日志压缩方法,具体可以包括如下步骤:
56.s201、将待压缩的日志组中各条日志的服务端信息,更新至预先创建的字典树中;
57.本实施例的字典树为树状结构,用于记录日志的服务端的信息。
58.s202、基于预设的访问数量阈值,从字典树中获取至少一个公共前缀的各公共前缀的内容;
59.s203、基于各公共前缀的内容,获取待压缩的日志组的各公共前缀的长度;
60.由于云业务场景中的云平台中部署了多个云服务端,经过对大流量的云平台的访问日志的特征进行分析,可以发现存在非常明显的分化现象,即存在较多的热点用户,热点ip地址等热点信息。考虑到具有相同热点用户或者热点ip地址等热点信息的不同日志中,存在相同的热点信息。本实施例中可以在压缩多条日志的过程中,减去相同热点信息的重复,达到减少日志数据的体积,实现压缩的目的。而且,经分析可以发现:日志中的客户端的信息则可以来自于任意的个人用户、企业用户等,比较分散,不会成为日志中的热点信息。而上述热点用户、热点ip地址等热点信息,都属于日志中的服务端的信息。
61.本实施例中,为了准确、高效地对日志进行压缩,尽可能地挖掘长度较长的公共前缀。所以,可以设置日志中的服务端的信息按照如下表1的方式记录。
62.表1
[0063][0064]
其中热点信息中,用户信息和服务端ip地址的热度较高,尽可能地往前放。也就是说,服务端的信息中的多个字段可以按照统计的各字段在热点数据中的热度的高低来排序。例如,一段时间周期内,某个热点用户的热度最高,占所有访问的90%。其次,该热点用户对应的某个热点ip地址的访问占该热点用户的访问的80%;再者,该热点ip地址的访问
中70%为某个热点端口的访问等等。基于此,可以将服务端的信息,按照用户信息、服务端ip地址、服务端端口、域名、链接以及服务状态的顺序进行记录。其中链接即指的是服务端的资源路径信息。用户信息指的是服务端的云业务资源的归属用户的信息,多个不同的服务端可以归属于同一个用户。
[0065]
如表1所示,客户端的信息,可以按照源ip、源端口、访问时间以及日志id存储。其中日志id可以为云平台为该日志配置的,但是存储在客户端的信息内。
[0066]
因为访问日志有流量分化的特点,大客户用户、个别服务端ip的流量非常大,因此将服务端的字段按上述表1所示的顺序组合后,在多条日志中,可以划分为公共前缀(prefix)和后缀两部分。图3是本公开实施例中公共前缀的划分示意图。如图3所示,这个划分是动态的,也就是说,划分只是指定一个标准,具体的划分由实际处理过程中,多条日志数据的实际分布来决定的,目的是将分布式计算中一个批次的日志中,有相当多公共前缀的数据能提取出来,这样能极大降低重复存储公共前缀的数据量。图3中公共前缀的截止线为虚线,即表示公共前缀是动态变化的。例如,对于某一部分日志,公共前缀可以包括用户信息、服务端ip、服务端端口;而对于另一部分日志,公共前缀可以包括用户信息、服务端ip、服务端端口以及域名;而对于其他部分的日志,公共前缀可能仅包括用户信息、服务端ip。
[0067]
本实施例中,为了高效地获取待压缩的日志组的各公共前缀的内容,可以借助于字典树来快速、准确地获取。
[0068]
s204、基于至少一个公共前缀的信息,获取至少一个公共前缀的数量;
[0069]
例如,本实施例中,按照上述方式,获取到的多个公共前缀的信息,可以包括各公共前缀的内容、长度、标识等。各公共前缀的标识是为各公共前缀配置的用于唯一标识该公共前缀的一个标识、或者索引。
[0070]
s205、基于至少一个公共前缀的信息以及至少一个公共前缀的数量,对待压缩日志组中的多条日志进行压缩处理,得到日志组的压缩日志;
[0071]
s206、向日志文件存储系统发送该日志组的压缩日志。
[0072]
需要说明的是,为了便于对压缩日志的管理,还可以为压缩日志配置相应的时间标识,该时间标识采用日志组中的多条日志的最早的访问时间和最晚访问时间来标识。这样,可以方便在出现故障时,及时、准确地获取到相应的压缩日志,并进行日志恢复,方便快速定位故障。并且向日志文件存储系统发送该压缩日志同时,也发送压缩日志对应的时间标识,以在日志文件存储系统中一起存储该压缩日志和对应的时间标识。
[0073]
本实施例的压缩日志相对于未压缩之前的多条日志,省去了重复的公共前缀的内容,有效地减少了日志的体积,实现日志的有效压缩。
[0074]
为了提高获取的至少一个公共前缀的各公共前缀的内容的准确性,首先,需要采用步骤s201将待压缩的日志组中各条日志的服务端信息,更新至预先创建的字典树中,具体可以包括如下步骤:
[0075]
(1)对于各条日志,将该条日志的服务端信息聚合成字符串;
[0076]
(2)将字符串按照预设字符分割成包括至少两个片段的片段序列;
[0077]
(3)对于片段序列中的各片段,检测字典树中是否存在片段对应的节点;若存在,执行步骤(4);若不存在,执行步骤(5);
[0078]
(4)将片段对应的节点的访问数量累加1,并更新片段对应的节点的最后访问时间lastvisittime,结束。
[0079]
其中,片段对应的节点的最后访问时间,即为该日志的访问时间。
[0080]
(5)在字典树中片段序列中片段之前的最近邻片段对应的节点下插入一个新节点,作为片段的节点;执行步骤(6);
[0081]
(6)将片段的节点的访问数量设置为1,并更新片段对应的节点的最后访问时间lastvisittime;
[0082]
(7)将片段的节点的父节点的子节点数量累加1,结束。
[0083]
需要说明的是,插入新节点之后,需要将该节点的所有父节点的属性信息中记录的子节点数量都累加1,才能有效地保证每个节点的属性信息中记录的子节点数量的准确性。
[0084]
例如,本实施例的字典树的格式可以如下:
[0085][0086]
基于以上代码所述,可以得知,在字典树中,需要记录每个节点被访问的次数、每个节点包括的所有子节点的数量、以及每个节点最后一次被访问的访问时间,这样,可以非常方便对字典树结构的管理和维护,能够有效地确保基于字典树获取的公共前缀的额准确性。
[0087]
在本公开的一个实施例中,日志的服务端的信息,可以按"\t"聚合成字符串往字典树里添加。本实施例中,基于日志行的特点,用".","/","\t","?","&"等预设字符将字符串分割成包括至少两个片段的片段序列。并将各片段分隔到字典树中不同的节点上,能够极大地降低字典树的高度和节点数量,优化遍历性能。这样可以使得公共前缀匹配的更多,同时字典树的层级更低,更合理。
[0088]
基于以上可知,字典树是基于服务端的信息构建的,字典树中的所有节点都可能是公共前缀中的部分片段。
[0089]
在字典树中插入节点的过程中,无论是否会新增新节点,整条路径上所有的节点的visitcount都会加1,如果创建了一个新节点后,父节点路径上所有节点的subnodecount都会加1。其中,节点的visitcount用于判断节点的活跃度,也是最大公共前缀拉取的判断条件,subnodecount用于存储所有子节点的个数,后面可以用于快速的对节点进行删除。
[0090]
例如,图4是本公开实施例提供的一种字典树中插入节点的示意图。如图4所示,以
要更新的服务端的信息为“xxx.com/test.html”为例,具体地,按照上述实施例的插入方式,在节点“com/”下插入节点“test.”,在节点“test.”下插入节点“html”。其中,节点“xxx.”、节点“com/”、节点“test.”、节点“html”的访问次数vistcount都+1;节点“baidu.”和节点“com/”的子节点数量subnodecount都+2;节点“test.”的子节点数量subnodecount+1。
[0091]
可选地,在本公开的一个实施例中,为了对字典树进行有效地管理,不能无限制地增加字典树的节点,还需要考虑字典树能够承受的最大数量阈值,也可以称为最大节点数量,采用maxnodesize表示。
[0092]
所以,在本公开的一个实施例中,可以在步骤(5)插入一下新节点之前,还可以包括如下步骤:
[0093]
(11)检测字典树包括的节点数量是否达到最大数量阈值maxnodesize;若未达到,直接执行步骤(5)即可;若已达到;执行步骤(12);
[0094]
(12)从字典树中删除至少预设数量的节点。
[0095]
本实施例中,预设数量可以根据实际需求来设置。例如可以设置为1,但是会存在操作比较频繁,每次删除1个,增加1个之后,又得再执行删除。为了避免频繁执行删除操作,可以将该预设数量设置为稍大一些,如20、50或者其他数值。该预设数量也可以记为最少删除数量即mindeletenum。
[0096]
该步骤(12)的删除可以按照多种规则来实现。例如,可以随意删除;或者删除一些访问次数小的节点;或者删除一些不仅访问次数小,而且子节点数也较少的节点;或者删除一些访问时刻距离当前时刻较远的节点;或者也可以采用其他一些规则来实现,在此不再举例赘述、
[0097]
例如,在本公开的一个实施例中,可以采用如下方式来实现步骤(12):
[0098]
(21)获取字典树中最后访问时间在预设时刻之前的节点数量;
[0099]
(22)检测最后访问时间在预设时刻之前的节点数量是否大于或者等于预设数量;若是,执行步骤(23);否则,执行步骤(24);
[0100]
(23)从字典树中删除最后访问时间在预设时刻之前所有节点;结束。
[0101]
该预设时刻可以为根据实际经验设置的一个时刻,该时刻之前的日志可以认为是较为久远的日志,可以删除。此时,删除的节点数量大于或者等于预设数量。
[0102]
(24)从字典树中删除最后访问时间在预设时刻之前所有节点;执行步骤(25);
[0103]
(25)更新待删除的节点的剩余数量;执行步骤(26);
[0104]
此时,按照步骤(24)的方式,删除的节点数量小于预设数量,此时,可以利用预设数量减去步骤(24)删除的节点数量,作为待删除的节点的剩余数量。然后继续按照后续步骤删除剩余数量的节点。
[0105]
(26)基于字典树中各节点的访问次数以及各节点包括的子节点的数量,从字典树中删除剩余数量的节点。
[0106]
具体地,按照该步骤(26)的原则,综合分析字典树中每个节点的访问次数,以及各节点包括的子节点数量,从中选择一些合理的节点删除。
[0107]
例如,在本公开的一个实施例中,步骤(26)具体实施时,可以包括如下步骤:
[0108]
(31)将根节点的下一层中各节点按照访问数量排序,得到第一节点访问列表;
[0109]
(32)从第一节点访问列表中获取访问数量最小的节点,作为当前的待分析节点;
[0110]
(33)获取待分析节点及包括的子节点的总数量;
[0111]
(34)检测待分析节点及包括的子节点的总数量是否小于或者等于剩余数量;若是,执行步骤(35);否则,执行步骤(38);
[0112]
(35)删除待分析节点及包括的子节点;执行步骤(36);
[0113]
(36)从第一节点访问列表中删除待分析节点;执行步骤(37);
[0114]
(37)更新待删除的节点的剩余数量;返回步骤(32);
[0115]
需要注意的是,删除该待分析节点及包括的子节点之后,也需要更新该待分析节点的父节点包括的子节点数量subnodecount。
[0116]
(38)获取字典树中当前的待分析节点的下一层包括的多个子节点以及各子节点的访问数量;执行步骤(39);
[0117]
(39)将各子节点按照访问数量排序,得到第二节点访问列表;执行步骤(40);
[0118]
(40)从第二节点访问列表中获取访问数量最小的节点,更新为当前的待分析节点;执行步骤(41);
[0119]
(41)获取待分析节点及包括的子节点的总数量;执行步骤(42);
[0120]
(42)检测待分析节点及包括的子节点的总数量是否小于或者等于剩余数量;若是,执行步骤(43);若大于,返回步骤(38);
[0121]
(43)删除待分析节点及包括的子节点;执行步骤(44);
[0122]
(44)从第二节点访问列表中删除待分析节点;执行步骤(45);
[0123]
(45)更新待删除的节点的剩余数量;返回步骤(40);
[0124]
同理,删除该待分析节点及包括的子节点之后,也需要更新该待分析节点的父节点包括的子节点数量subnodecount。
[0125]
按照上述方式,循环执行,可以完成从字典树中删除预设数量的节点。而且删除的节点都是非常合理,例如删除的节点是访问时间较远的节点,或者删除的是子节点数较少的节点,这样可以最大程度地避免删除的节点对公共前缀的影响,以有效地确保基于字典树获取的公共前缀的准确性。例如,删除过程中,可以采用如下示意代码来实现:
[0126][0127][0128]
其中deletenum表示输入的要删除的节点数量,即预设数量。tempdeletenum表示待删除的节点的剩余数量。
[0129]
进一步可选地,上述步骤s202基于预设的访问数量阈值,从字典树中获取至少一个公共前缀的各公共前缀的内容,具体实现时,可以包括如下步骤:
[0130]
(51)从字典树的根节点开始,通过逐层检测各节点,获取访问数量大于预设的访问数量阈值的至少一个候选节点;
[0131]
本实施例中,可以采用广度优先算法(breadth-first-search;bfs)遍历各节点。
[0132]
(52)将各候选节点与对应的父节点进行拼接,生成字符串,作为对应的公共前缀的内容,得到至少一个公共前缀的内容。
[0133]
可选地,在本公开的一个实施例中,在步骤(51)之后,步骤(52)之前,还可以包括如下步骤:
[0134]
(61)若包括至少两个候选节点时,检测至少两个候选节点中是否存在父子关系的节点对;若存在,执行步骤(62);若不存在,执行步骤(52);
[0135]
(62)将节点对中父节点的访问数量减去子节点的访问数量,得到父节点的剩余访问数量;
[0136]
(63)检测父节点的剩余访问数量是否小于预设访问阈值,若是,执行步骤(64);否则,确定在至少两个候选节点中保留该父节点,执行步骤(52);
[0137]
(64)从至少两个多个候选节点中删除父节点;执行步骤(52)。
[0138]
例如,图5是本公开提供的一种获取公共前缀的内容的示意图。如图5所示,可以按照两轮的遍历来实现获取公共前缀的内容。
[0139]
如图5左侧所示,以预设数量阈值为100为例,按照上述步骤(51),在第一轮遍历中,可以从字典树中获取访问数量visitcount大于100的四个候选节点,如节点“zzz.”、节点“com/”、节点“index.”和节点“test.”,其中节点“zzz.”的访问数量visitcount为212,节点“com/”的访问数量visitcount为212,节点“index.”的访问数量visitcount为101,和节点“test.”的访问数量visitcount为101。
[0140]
如图5右侧所示,在第二轮遍历中,按照步骤(61)检测四个候选节点中是否存在父子关系的节点对。其中节点“zzz.”和节点“com/”为父子关系的节点对;节点“com/”和节点“index.”为父子关系的节点对;节点“com/”和节点“test.”也为父子关系的节点对。
[0141]
对于父子关系的节点对“zzz.”和“com/”,按照步骤(62)-(64),节点“zzz.”的访问数量visitcount减去节点“com/”的访问数量visitcount,得到节点“zzz.”的剩余访问数量visitcount为0,小于预设访问阈值100,此时删除候选节点“zzz.”。
[0142]
同理,对于,父子关系的节点对“com/”和“index.”以及“com/”和“test.”,按照步骤(62)-(64),节点“com/”的访问数量visitcount减去节点“index.”的访问数量visitcount和节点“com/”的访问数量visitcount,得到节点“com/”的剩余访问数量visitcount为10,小于预设访问阈值100,此时删除候选节点“com/”。即此时得到的候选节点仅有节点“index.”和节点“test.”。例如,图5所示示例图中得到的公共前缀可以包括:zzzcom/index.和zzz.com/test.。按照此方式,可以获取最长的公共前缀,能够有效地提高公共前缀的合理性以及准确性。
[0143]
在本公开的一个实施例中,步骤s205具体实现时,可以包括如下步骤:
[0144]
(71)以最长匹配原则,获取各日志对应的公共前缀标识;
[0145]
(72)将多条日志,按照至少一个公共前缀的数量、各公共前缀标识对应的公共前缀的信息、以及各日志对应的公共前缀标识、后缀信息以及客户端信息,压缩在一起,得到日志组的压缩日志;其中后缀信息为对应的日志的服务端信息中公共前缀信息之后的其他信息。
[0146]
例如,图6是本公开提供的压缩日志的结构示意图。压缩日志共分成三大部分,第一部分是一个整形,用来存储这批次数据的公共前缀的数量,第二部分依次存储n个公共前缀的信息;第三部分依次存储多个日志的记录信息。各公共前缀的信息中包括公共前缀的长度以及内容。第三部分中存储的每个日志的记录信息,具体包括日志对应的公共前缀的标识、日志中后缀的信息、日志中的客户端信息。其中日志中的后缀信息包括后缀的长度以及后缀的内容。日志中的客户端信息也包括客户端信息的长度和内容。
[0147]
其中,公共前缀数量(prefixsize):最开始的4个byte存储了公共prefix的个数,后面会紧跟对应个数的prefixentry。
[0148]
公共前缀(prefixentry):公共前缀的entry,包含两部分:公共前缀的长度(prefixlength)和公共前缀的内容(prefixcontent);
[0149]
公共前缀的长度(prefixlength):表示公共prefixcontent的byte长度;
[0150]
公共前缀的内容(prefixcontent):存储公共prefix的内容;
[0151]
日志记录(ziplogentry):压缩日志的entry;
[0152]
公共前缀的标识(prefixindex):与prefixentry的位置对应,例如可以从0开始计数,采用数字来标识各个公共前缀。
[0153]
后缀长度(postfixlength):表示后缀postfix的byte长度;服务端的信息中公共前缀之外的内容称为后缀;
[0154]
后缀(postfix)的内容:存储服务端的信息中公共前缀之外的剩余后缀的内容;
[0155]
客户端信息的长度(clientinfolength):表示clientinfo的长度;
[0156]
客户端信息的(clientinfo)内容:用于存储客户端信息的内容。
[0157]
例如,日志记录1表示第一条日志的存储内容,对应包括公共前缀标识、后缀长度、后缀内容,客户端信息长度以及客户端信息的内容。
[0158]
另外,对于未命中公共前缀的日志,所有的服务端的信息都作为后缀记录,该方式的日志称为长尾日志。
[0159]
采用该方式可以对待压缩日志组中的多条日志都采用图6所示的压缩格式,可以除去公共前缀的重复,减小压缩日志的体积,实现对日志组的有效压缩。
[0160]
采用本实施例的日志压缩方法,压缩的效率取决于同一前缀命中的日志数量,对于未命中公共前缀的长尾日志,因为数据格式带来的每条记录的存储额外损耗为6byte。
[0161]
可选地,在本公开的一个实施例中,还可以通过直接对待压缩的日志组中的多条日志的服务端信息进行分析,获取至少一个公共前缀的信息中各公共前缀的内容以及各公共前缀的长度。通过对多条日志的服务端信息进行分析,挖掘多条日志中的部分日志共同包括的公共前缀的内容和长度。该方式,也可以准确地获取到待压缩的日志组的各公共前缀的信息。
[0162]
本实施例的日志压缩方法,通过采用上述技术方案,借助字典树,准确、高效地获取到待压缩日志组的至少一个公共前缀信息;进而可以基于至少一个公共前缀的信息,对待压缩日志组中的多条日志进行压缩处理,得到日志组的压缩日志,能够有效地减少压缩日志中公共前缀的体积,有效地提高压缩效率。
[0163]
而且,本实施例中,可以将日志中的服务端的信息,准确、合理地更新在字典树的结构中。而且,还能够合理、有效地对字典树进行管理和维护,例如,可以在字典树中插入新节点时,对各节点的属性信息进行及时维护;还可以在字典树包括的节点数量是否达到最大数量阈值,从字典树中删除至少预设数量的节点;而且删除时,可以按照上述实施例的方式,删除访问时刻远的节点,或者删除子节点数较少的节点,总之,能够实现合理删除,减少删除节点对字典树结构的影响,进而可以有效地确保基于字典树,获取的公共前缀的更加合理、更加准确。
[0164]
利用线上的真实访问日志数据,对本实施例的技术方案,进行性能测试,测试数据总记录行数40w条,日志文件大小72m,平均每条访问日志180byte。程序运行过程中,40w条记录自动化地输出7条公共前缀,40w条数据构造字典树花费时间1.2s,压缩后的文件大小890k,压缩后的大小为原数据的1/72,与现有技术的压缩算法相比,能够更加有效地提高压缩效率。而且还能够有效地减少压缩日志传输时的带宽资源,节省压缩日志的存储空间,实用性非常强。
[0165]
图7是根据本公开第三实施例的示意图;如图7所示,本实施例提供一种日志解压
方法,具体可以包括如下步骤:
[0166]
s701、获取待解压的日志组的压缩日志;
[0167]
s702、从压缩日志中获取日志组的多个公共前缀的信息;
[0168]
s703、基于多个公共前缀的信息,对压缩日志进行解压处理,得到日志组中的多条日志。
[0169]
本实施例的技术方案,具体用于对上述图1或者图2所示实施例中压缩的压缩日志进行解压。
[0170]
在实际应用中,在出现故障等情况,需要还原压缩的日志时,可以先获取到待解压的日志组的压缩日志。由于压缩日志是基于多个公共前缀的信息进行的压缩,所以,解压时,可以先从压缩日志中获取日志组的多个公共前缀的信息。然后,进一步基于多个公共前缀的信息,对压缩日志进行解压处理,可以还原到日志组中的多条日志。
[0171]
本实施例的日志解压方法,通过采用上述技术方案,可以非常准确、高效地对压缩日志进行解压处理,还原到日志组中的多条日志。
[0172]
图8是根据本公开第四实施例的示意图;本实施例的日志解压方法,在上述图7所示实施例的技术方案的基础上,进一步更加详细地描述本公开的技术方案。如图8所示,本实施例的日志解压方法,具体可以包括如下步骤:
[0173]
s801、获取待解压的日志组的时间标识;
[0174]
考虑到实际应用场景中,日志文件存储系统中存储的各压缩日志可以按照对应的时间标识存储,以便于查找。这里的时间标识具体可以采用压缩日志中的多条日志的最早的访问时间和最晚访问时间来标识。
[0175]
s802、基于待解压的日志组的时间标识,从日志文件存储系统中获取待解压的日志组的压缩日志;
[0176]
s803、从压缩日志中获取日志组的多个公共前缀的数量、多个公共前缀中各公共前缀的标识、各公共前缀的内容和各公共前缀的长度;
[0177]
s804、从压缩日志中获取各日志对应的公共前缀标识、后缀信息以及客户端信息;其中,后缀信息为对应的日志的服务端信息中公共前缀信息之后的其他信息;
[0178]
s805、基于各日志的公共前缀标识对应的公共前缀的内容、以及各日志对应的后缀信息以及客户端信息,还原对应的日志,得到日志组中的多条日志。
[0179]
本实施例的解压缩,可以为上述图2所示实施例的压缩的逆过程。具体地,可以从图6所示结构的压缩日志中,先获取日志组的多个公共前缀的数量、多个公共前缀中各公共前缀的标识、各公共前缀的内容和各公共前缀的长度。
[0180]
进一步,再从压缩日志中获取各日志对应的公共前缀标识、后缀信息以及客户端信息,其中后缀信息中也包括后缀的长度以及内容。客户端信息中也包括客户端信息的长度和内容。具体地,客户端信息的内容,可以包括上述图2所示实施例中的客户端信息的各个字段的内容。最后,基于各日志的公共前缀标识对应的公共前缀的内容、以及各日志对应的后缀信息以及客户端信息,还原对应的日志,得到日志组中的多条日志。
[0181]
本实施例的日志解压方法,通过采用上述技术方案,可以快速、准确地还原出日志组的多条日志。
[0182]
图9是根据本公开第五实施例的示意图;如图9所示,本实施例提供一种日志压缩
装置900,包括:
[0183]
获取模块901,用于获取待压缩的日志组的至少一个公共前缀的信息;所述待压缩日志组中包括多条日志;
[0184]
压缩模块902,用于基于所述至少一个公共前缀的信息,对所述待压缩日志组中的多条日志进行压缩处理。
[0185]
本实施例的日志压缩装置900,通过采用上述模块实现日志压缩的实现原理以及技术效果,与上述相关方法实施例的实现相同,详细可以参考上述相关方法实施例的记载,在此不再赘述。
[0186]
图10是根据本公开第六实施例的示意图;如图10所示,本实施例提供一种日志压缩装置1000,包括上述图9所示的同名同功能模块:获取模块1001和压缩模块1002。
[0187]
在本公开的一个实施例中,获取模块1001,用于对所述待压缩的日志组中的所述多条日志的服务端信息进行分析,获取所述至少一个公共前缀的信息中各所述公共前缀的内容以及各所述公共前缀的长度。
[0188]
如图10所示,在本公开的一个实施例中,获取模块1001,包括:
[0189]
更新单元10011,用于将所述待压缩的日志组中各条所述日志的服务端信息,更新至预先创建的字典树中;
[0190]
第一获取单元10012,用于基于预设的访问数量阈值和所述字典树,获取所述至少一个公共前缀的各所述公共前缀的内容;
[0191]
第二获取单元10013,用于基于各所述公共前缀的内容,获取所述待压缩的日志组的各所述公共前缀的长度。
[0192]
进一步可选地,在本公开的一个实施例中,第一获取单元10012,用于:
[0193]
从所述字典树的根节点开始,通过逐层检测各节点,获取访问数量大于所述预设的访问数量阈值的至少一个候选节点;
[0194]
将各所述候选节点与对应的父节点进行拼接,生成字符串,作为对应的所述公共前缀的内容,得到所述至少一个公共前缀的内容。
[0195]
进一步可选地,在本公开的一个实施例中,第一获取单元10012,还用于:
[0196]
若包括至少两个候选节点时,确定所述至少两个候选节点中存在父子关系的节点对;
[0197]
将所述节点对中父节点的访问数量减去子节点的访问数量,得到所述父节点的剩余访问数量;
[0198]
若所述父节点的剩余访问数量小于所述预设访问阈值,从所述至少两个候选节点中删除所述父节点。
[0199]
进一步可选地,在本公开的一个实施例中,更新单元10011,用于:
[0200]
对于各所述日志,将述日志的服务端信息聚合成字符串;
[0201]
将所述字符串按照预设字符分割成包括至少两个片段的片段序列;
[0202]
对于所述片段序列中的各所述片段,检测所述字典树中是否存在所述片段对应的节点;
[0203]
若存在,将所述片段对应的节点的访问数量累加1,并更新所述片段对应的节点的最后访问时间。
[0204]
进一步可选地,在本公开的一个实施例中,更新单元10011,还用于:
[0205]
若所述字典树中不存在所述片段对应的节点,在所述字典树中所述片段序列中所述片段之前的最近邻片段对应的节点下插入一个新节点,作为所述片段的节点;
[0206]
将所述片段的节点的访问数量设置为1,并更新所述片段对应的节点的最后访问时间;
[0207]
将所述片段的节点的父节点的子节点数量累加1。
[0208]
进一步可选地,在本公开的一个实施例中,更新单元10011,还用于:
[0209]
检测所述字典树包括的节点数量是否达到最大数量阈值;
[0210]
若达到,从所述字典树中删除至少预设数量的节点。
[0211]
进一步可选地,在本公开的一个实施例中,更新单元10011,还用于:
[0212]
获取所述字典树中最后访问时间在预设时刻之前的节点数量;
[0213]
检测最后访问时间在预设时刻之前的节点数量是否大于或者等于所述预设数量;
[0214]
若是,从所述字典树中删除最后访问时间在预设时刻之前所有节点。
[0215]
进一步可选地,在本公开的一个实施例中,更新单元10011,还用于:
[0216]
若所述字典树中最后访问时间在预设时刻之前的节点的数量小于预设数量,从所述字典树中删除最后访问时间在预设时刻之前所有节点;
[0217]
更新待删除的节点的剩余数量;
[0218]
基于所述字典树中各节点的访问次数以及各节点包括的子节点的数量,从所述字典树中删除所述剩余数量的节点。
[0219]
进一步可选地,在本公开的一个实施例中,更新单元10011,还用于:
[0220]
将根节点的下一层中各节点按照访问数量排序,得到第一节点访问列表;
[0221]
从所述第一节点访问列表中获取访问数量最小的节点,作为当前的待分析节点;
[0222]
获取所述待分析节点及包括的子节点的总数量;
[0223]
检测所述待分析节点及包括的子节点的总数量是否小于或者等于所述剩余数量;
[0224]
若是,删除所述待分析节点及包括的子节点;
[0225]
进一步可选地,在本公开的一个实施例中,更新单元10011,还用于:
[0226]
从所述第一节点访问列表中删除所述待分析节点;
[0227]
更新待删除的节点的所述剩余数量。
[0228]
进一步可选地,在本公开的一个实施例中,更新单元10011,还用于:
[0229]
若所述待分析节点及包括的子节点的总数量大于所述剩余数量,获取所述字典树中所述待分析节点的下一层包括的多个子节点以及各所述子节点的访问数量;
[0230]
将各所述子节点按照访问数量排序,得到第二节点访问列表;
[0231]
从所述第二节点访问列表中获取访问数量最小的节点,更新为当前的所述待分析节点;
[0232]
获取所述待分析节点及包括的子节点的总数量;
[0233]
检测所述待分析节点及包括的子节点的总数量是否小于或者等于所述剩余数量;
[0234]
若是,删除所述待分析节点及包括的子节点;
[0235]
进一步可选地,在本公开的一个实施例中,更新单元10011,还用于:
[0236]
从所述第二节点访问列表中删除所述待分析节点;
[0237]
更新待删除的节点的所述剩余数量。
[0238]
进一步可选地,如图10所示,在本公开的一个实施例中,压缩模块1002,包括:
[0239]
第三获取单元10021,用于基于所述至少一个公共前缀的信息,获取所述至少一个公共前缀的数量;
[0240]
压缩单元10022,用于基于所述至少一个公共前缀的信息以及所述至少一个公共前缀的数量,对所述待压缩日志组中的多条日志进行压缩处理。
[0241]
进一步可选地,在本公开的一个实施例中,压缩单元10022,用于:
[0242]
以最长匹配原则,获取各所述日志对应的公共前缀标识;
[0243]
将所述多条日志,按照所述至少一个公共前缀的数量、各所述公共前缀标识对应的公共前缀的信息、以及各所述日志对应的公共前缀标识、后缀信息以及客户端信息,压缩在一起,得到所述日志组的压缩日志;其中所述后缀信息为对应的所述日志的服务端信息中所述公共前缀信息之后的其他信息。
[0244]
本实施例的日志压缩装置1000,通过采用上述模块实现日志压缩的实现原理以及技术效果,与上述相关方法实施例的实现相同,详细可以参考上述相关方法实施例的记载,在此不再赘述。
[0245]
图11是根据本公开第七实施例的示意图;如图11所示,本实施例提供一种日志解压装置1100,包括:
[0246]
日志获取模块1101,用于获取待解压的日志组的压缩日志;
[0247]
前缀获取模块1102,用于从所述压缩日志中获取所述日志组的至少一个公共前缀的信息;
[0248]
解压模块1103,用于基于所述至少一个公共前缀的信息,对所述压缩日志进行解压处理,得到所述日志组中的多条日志。
[0249]
本实施例的日志解压装置1100,通过采用上述模块实现日志解压的实现原理以及技术效果,与上述相关方法实施例的实现相同,详细可以参考上述相关方法实施例的记载,在此不再赘述。
[0250]
进一步可选地,在本公开的一个实施例中,前缀获取模块1102,用于:
[0251]
从所述压缩日志中获取所述日志组的所述至少一个公共前缀的数量、所述至少一个公共前缀中各所述公共前缀的标识、各所述公共前缀的内容和各所述公共前缀的长度。
[0252]
进一步可选地,在本公开的一个实施例中,解压模块1103,用于:
[0253]
从所述压缩日志中获取各所述日志对应的公共前缀标识、后缀信息以及客户端信息;其中,所述后缀信息为对应的所述日志的服务端信息中所述公共前缀信息之后的其他信息;
[0254]
基于各所述日志的公共前缀标识对应的所述公共前缀的内容、以及各所述日志对应的后缀信息以及客户端信息,还原对应的所述日志,得到所述日志组中的多条日志。
[0255]
上述实施例的日志解压装置1100,通过采用上述模块实现日志解压的实现原理以及技术效果,与上述相关方法实施例的实现相同,详细可以参考上述相关方法实施例的记载,在此不再赘述。
[0256]
本公开的技术方案中,所涉及的用户个人信息的获取,存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
[0257]
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
[0258]
图12示出了可以用来实施本公开的实施例的示例电子设备1200的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
[0259]
如图12所示,设备1200包括计算单元1201,其可以根据存储在只读存储器(rom)1202中的计算机程序或者从存储单元1208加载到随机访问存储器(ram)1203中的计算机程序,来执行各种适当的动作和处理。在ram 1203中,还可存储设备1200操作所需的各种程序和数据。计算单元1201、rom 1202以及ram 1203通过总线1204彼此相连。输入/输出(i/o)接口1205也连接至总线1204。
[0260]
设备1200中的多个部件连接至i/o接口1205,包括:输入单元1206,例如键盘、鼠标等;输出单元1207,例如各种类型的显示器、扬声器等;存储单元1208,例如磁盘、光盘等;以及通信单元1209,例如网卡、调制解调器、无线通信收发机等。通信单元1209允许设备1200通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
[0261]
计算单元1201可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元1201的一些示例包括但不限于中央处理单元(cpu)、图形处理单元(gpu)、各种专用的人工智能(ai)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(dsp)、以及任何适当的处理器、控制器、微控制器等。计算单元1201执行上文所描述的各个方法和处理,例如本公开的上述方法。例如,在一些实施例中,本公开的上述方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元1208。在一些实施例中,计算机程序的部分或者全部可以经由rom 1202和/或通信单元1209而被载入和/或安装到设备1200上。当计算机程序加载到ram 1203并由计算单元1201执行时,可以执行上文描述的本公开的上述方法的一个或多个步骤。备选地,在其他实施例中,计算单元1201可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行本公开的上述方法。
[0262]
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、芯片上系统的系统(soc)、复杂可编程逻辑设备(cpld)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
[0263]
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件
包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
[0264]
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
[0265]
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,crt(阴极射线管)或者lcd(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
[0266]
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(lan)、广域网(wan)和互联网。
[0267]
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
[0268]
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
[0269]
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
技术特征:
1.一种日志压缩方法,包括:获取待压缩的日志组的至少一个公共前缀的信息;所述待压缩日志组中包括多条日志;基于所述至少一个公共前缀的信息,对所述待压缩日志组中的多条日志进行压缩处理。2.根据权利要求1所述的方法,其中,获取待压缩的日志组的至少一个公共前缀的信息,包括:对所述待压缩的日志组中的所述多条日志的服务端信息进行分析,获取所述至少一个公共前缀的信息中各所述公共前缀的内容以及各所述公共前缀的长度。3.根据权利要求1所述的方法,其中,获取待压缩的日志组的至少一个公共前缀的信息,包括:将所述待压缩的日志组中各条所述日志的服务端信息,更新至预先创建的字典树中;基于预设的访问数量阈值和所述字典树,获取所述至少一个公共前缀的各所述公共前缀的内容;基于各所述公共前缀的内容,获取所述待压缩的日志组的各所述公共前缀的长度。4.根据权利要求3所述的方法,其中,基于预设的访问数量阈值和所述字典树,获取所述至少一个公共前缀的各所述公共前缀的内容,包括:从所述字典树的根节点开始,通过逐层检测各节点,获取访问数量大于所述预设的访问数量阈值的至少一个候选节点;将各所述候选节点与对应的父节点进行拼接,生成字符串,作为对应的所述公共前缀的内容,得到所述至少一个公共前缀的内容。5.根据权利要求4所述的方法,其中,从所述字典树的根节点开始,通过逐层检测各节点,获取访问数量大于所述预设的访问数量阈值的至少一个候选节点之后,将各所述候选节点与对应的父节点进行拼接,生成字符串,作为对应的所述公共前缀的内容,得到所述至少一个公共前缀的内容之前,所述方法还包括:若包括至少两个候选节点时,确定所述至少两个候选节点中存在父子关系的节点对;将所述节点对中父节点的访问数量减去子节点的访问数量,得到所述父节点的剩余访问数量;若所述父节点的剩余访问数量小于所述预设访问阈值,从所述至少两个候选节点中删除所述父节点。6.根据权利要求3所述的方法,其中,将所述待压缩的日志组中各条所述日志的服务端信息,更新至预先创建的字典树中,包括:对于各所述日志,将述日志的服务端信息聚合成字符串;将所述字符串按照预设字符分割成包括至少两个片段的片段序列;对于所述片段序列中的各所述片段,检测所述字典树中是否存在所述片段对应的节点;若存在,将所述片段对应的节点的访问数量累加1,并更新所述片段对应的节点的最后访问时间。7.根据权利要求6所述的方法,其中,所述方法还包括:
若所述字典树中不存在所述片段对应的节点,在所述字典树中所述片段序列中所述片段之前的最近邻片段对应的节点下插入一个新节点,作为所述片段的节点;将所述片段的节点的访问数量设置为1,并更新所述片段对应的节点的最后访问时间;将所述片段的节点的父节点的子节点数量累加1。8.根据权利要求7所述的方法,其中,在所述字典树中所述片段序列中所述片段之前的最近邻片段对应的节点下插入一个新节点之前,所述方法还包括:检测所述字典树包括的节点数量是否达到最大数量阈值;若达到,从所述字典树中删除至少预设数量的节点。9.根据权利要求8所述的方法,其中,从所述字典树中删除至少预设数量的节点,包括:获取所述字典树中最后访问时间在预设时刻之前的节点数量;检测最后访问时间在预设时刻之前的节点数量是否大于或者等于所述预设数量;若是,从所述字典树中删除最后访问时间在预设时刻之前所有节点。10.根据权利要求8所述的方法,其中,从所述字典树中删除至少预设数量的节点,包括:若所述字典树中最后访问时间在预设时刻之前的节点的数量小于预设数量,从所述字典树中删除最后访问时间在预设时刻之前所有节点;更新待删除的节点的剩余数量;基于所述字典树中各节点的访问次数以及各节点包括的子节点的数量,从所述字典树中删除所述剩余数量的节点。11.根据权利要求10所述的方法,其中,基于所述字典树中各节点的访问次数以及各节点包括的子节点的数量,从所述字典树中删除所述剩余数量的节点,包括:将根节点的下一层中各节点按照访问数量排序,得到第一节点访问列表;从所述第一节点访问列表中获取访问数量最小的节点,作为当前的待分析节点;获取所述待分析节点及包括的子节点的总数量;检测所述待分析节点及包括的子节点的总数量是否小于或者等于所述剩余数量;若是,删除所述待分析节点及包括的子节点。12.根据权利要求11所述的方法,其中,删除所述待分析节点及包括的子节点之后,所述方法还包括:从所述第一节点访问列表中删除所述待分析节点;更新待删除的节点的所述剩余数量。13.根据权利要求11所述的方法,其中,所述方法还包括:若所述待分析节点及包括的子节点的总数量大于所述剩余数量,获取所述字典树中所述待分析节点的下一层包括的多个子节点以及各所述子节点的访问数量;将各所述子节点按照访问数量排序,得到第二节点访问列表;从所述第二节点访问列表中获取访问数量最小的节点,更新为当前的所述待分析节点;获取所述待分析节点及包括的子节点的总数量;检测所述待分析节点及包括的子节点的总数量是否小于或者等于所述剩余数量;若是,删除所述待分析节点及包括的子节点。
14.根据权利要求13所述的方法,其中,删除所述待分析节点及包括的子节点之后,所述方法还包括:从所述第二节点访问列表中删除所述待分析节点;更新待删除的节点的所述剩余数量。15.根据权利要求1-14任一所述的方法,其中,基于所述至少一个公共前缀的信息,对所述待压缩日志组中的多条日志进行压缩处理,包括:基于所述至少一个公共前缀的信息,获取所述至少一个公共前缀的数量;基于所述至少一个公共前缀的信息以及所述至少一个公共前缀的数量,对所述待压缩日志组中的多条日志进行压缩处理。16.根据权利要求15所述的方法,其中,基于所述至少一个公共前缀的信息以及所述至少一个公共前缀的数量,对所述待压缩日志组中的多条日志进行压缩处理,包括:以最长匹配原则,获取各所述日志对应的公共前缀标识;将所述多条日志,按照所述至少一个公共前缀的数量、各所述公共前缀标识对应的公共前缀的信息、以及各所述日志对应的公共前缀标识、后缀信息以及客户端信息,压缩在一起,得到所述日志组的压缩日志;其中所述后缀信息为对应的所述日志的服务端信息中所述公共前缀信息之后的其他信息。17.一种日志解压方法,包括:获取待解压的日志组的压缩日志;从所述压缩日志中获取所述日志组的至少一个公共前缀的信息;基于所述至少一个公共前缀的信息,对所述压缩日志进行解压处理,得到所述日志组中的多条日志。18.根据权利要求17所述的方法,其中,从所述压缩日志中获取所述日志组的至少一个公共前缀的信息,包括:从所述压缩日志中获取所述日志组的所述至少一个公共前缀的数量、所述至少一个公共前缀中各所述公共前缀的标识、各所述公共前缀的内容和各所述公共前缀的长度。19.根据权利要求18所述的方法,其中,基于所述至少一个公共前缀的信息,对所述压缩日志进行解压处理,得到所述日志组中的多条日志,包括:从所述压缩日志中获取各所述日志对应的公共前缀标识、后缀信息以及客户端信息;其中,所述后缀信息为对应的所述日志的服务端信息中所述公共前缀信息之后的其他信息;基于各所述日志的公共前缀标识对应的所述公共前缀的内容、以及各所述日志对应的后缀信息以及客户端信息,还原对应的所述日志,得到所述日志组中的多条日志。20.一种日志压缩装置,包括:获取模块,用于获取待压缩的日志组的至少一个公共前缀的信息;所述待压缩日志组中包括多条日志;压缩模块,用于基于所述至少一个公共前缀的信息,对所述待压缩日志组中的多条日志进行压缩处理。21.根据权利要求20所述的装置,其中,所述获取模块,用于:对所述待压缩的日志组中的所述多条日志的服务端信息进行分析,获取所述至少一个
公共前缀的信息中各所述公共前缀的内容以及各所述公共前缀的长度。22.根据权利要求20所述的装置,其中,所述获取模块,包括:更新单元,用于将所述待压缩的日志组中各条所述日志的服务端信息,更新至预先创建的字典树中;第一获取单元,用于基于预设的访问数量阈值和所述字典树,获取所述至少一个公共前缀的各所述公共前缀的内容;第二获取单元,用于基于各所述公共前缀的内容,获取所述待压缩的日志组的各所述公共前缀的长度。23.根据权利要求22所述的装置,其中,所述第一获取单元,用于:从所述字典树的根节点开始,通过逐层检测各节点,获取访问数量大于所述预设的访问数量阈值的至少一个候选节点;将各所述候选节点与对应的父节点进行拼接,生成字符串,作为对应的所述公共前缀的内容,得到所述至少一个公共前缀的内容。24.根据权利要求23所述的装置,其中,所述第一获取单元,还用于:若包括至少两个候选节点时,确定所述至少两个候选节点中存在父子关系的节点对;将所述节点对中父节点的访问数量减去子节点的访问数量,得到所述父节点的剩余访问数量;若所述父节点的剩余访问数量小于所述预设访问阈值,从所述至少两个候选节点中删除所述父节点。25.根据权利要求22所述的装置,其中,所述更新单元,用于:对于各所述日志,将述日志的服务端信息聚合成字符串;将所述字符串按照预设字符分割成包括至少两个片段的片段序列;对于所述片段序列中的各所述片段,检测所述字典树中是否存在所述片段对应的节点;若存在,将所述片段对应的节点的访问数量累加1,并更新所述片段对应的节点的最后访问时间。26.根据权利要求25所述的装置,其中,所述更新单元,还用于:若所述字典树中不存在所述片段对应的节点,在所述字典树中所述片段序列中所述片段之前的最近邻片段对应的节点下插入一个新节点,作为所述片段的节点;将所述片段的节点的访问数量设置为1,并更新所述片段对应的节点的最后访问时间;将所述片段的节点的父节点的子节点数量累加1。27.根据权利要求26所述的装置,其中,所述更新单元,还用于:检测所述字典树包括的节点数量是否达到最大数量阈值;若达到,从所述字典树中删除至少预设数量的节点。28.根据权利要求27所述的装置,其中,所述更新单元,还用于:获取所述字典树中最后访问时间在预设时刻之前的节点数量;检测最后访问时间在预设时刻之前的节点数量是否大于或者等于所述预设数量;若是,从所述字典树中删除最后访问时间在预设时刻之前所有节点。29.根据权利要求27所述的装置,其中,所述更新单元,还用于:
若所述字典树中最后访问时间在预设时刻之前的节点的数量小于预设数量,从所述字典树中删除最后访问时间在预设时刻之前所有节点;更新待删除的节点的剩余数量;基于所述字典树中各节点的访问次数以及各节点包括的子节点的数量,从所述字典树中删除所述剩余数量的节点。30.根据权利要求29所述的装置,其中,所述更新单元,还用于:将根节点的下一层中各节点按照访问数量排序,得到第一节点访问列表;从所述第一节点访问列表中获取访问数量最小的节点,作为当前的待分析节点;获取所述待分析节点及包括的子节点的总数量;检测所述待分析节点及包括的子节点的总数量是否小于或者等于所述剩余数量;若是,删除所述待分析节点及包括的子节点。31.根据权利要求30所述的装置,其中,所述更新单元,还用于:从所述第一节点访问列表中删除所述待分析节点;更新待删除的节点的所述剩余数量。32.根据权利要求30所述的装置,其中,所述更新单元,还用于:若所述待分析节点及包括的子节点的总数量大于所述剩余数量,获取所述字典树中所述待分析节点的下一层包括的多个子节点以及各所述子节点的访问数量;将各所述子节点按照访问数量排序,得到第二节点访问列表;从所述第二节点访问列表中获取访问数量最小的节点,更新为当前的所述待分析节点;获取所述待分析节点及包括的子节点的总数量;检测所述待分析节点及包括的子节点的总数量是否小于或者等于所述剩余数量;若是,删除所述待分析节点及包括的子节点。33.根据权利要求32所述的装置,其中,所述更新单元,还用于:从所述第二节点访问列表中删除所述待分析节点;更新待删除的节点的所述剩余数量。34.根据权利要求20-33任一所述的装置,其中,所述压缩模块,包括:第三获取单元,用于基于所述至少一个公共前缀的信息,获取所述至少一个公共前缀的数量;压缩单元,用于基于所述至少一个公共前缀的信息以及所述至少一个公共前缀的数量,对所述待压缩日志组中的多条日志进行压缩处理。35.根据权利要求34所述的装置,其中,所述压缩单元,用于:以最长匹配原则,获取各所述日志对应的公共前缀标识;将所述多条日志,按照所述至少一个公共前缀的数量、各所述公共前缀标识对应的公共前缀的信息、以及各所述日志对应的公共前缀标识、后缀信息以及客户端信息,压缩在一起,得到所述日志组的压缩日志;其中所述后缀信息为对应的所述日志的服务端信息中所述公共前缀信息之后的其他信息。36.一种日志解压装置,包括:日志获取模块,用于获取待解压的日志组的压缩日志;
前缀获取模块,用于从所述压缩日志中获取所述日志组的至少一个公共前缀的信息;解压模块,用于基于所述至少一个公共前缀的信息,对所述压缩日志进行解压处理,得到所述日志组中的多条日志。37.根据权利要求36所述的装置,其中,所述前缀获取模块,用于:从所述压缩日志中获取所述日志组的所述至少一个公共前缀的数量、所述至少一个公共前缀中各所述公共前缀的标识、各所述公共前缀的内容和各所述公共前缀的长度。38.根据权利要求37所述的装置,其中,所述解压模块,用于:从所述压缩日志中获取各所述日志对应的公共前缀标识、后缀信息以及客户端信息;其中,所述后缀信息为对应的所述日志的服务端信息中所述公共前缀信息之后的其他信息;基于各所述日志的公共前缀标识对应的所述公共前缀的内容、以及各所述日志对应的后缀信息以及客户端信息,还原对应的所述日志,得到所述日志组中的多条日志。39.一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-16或者17-19中任一项所述的方法。40.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-16或者17-19中任一项所述的方法。41.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-16或者17-19中任一项所述的方法。
技术总结
本公开提供了一种日志压缩与解压方法、装置、电子设备及存储介质,涉及云平台、大数据以及数据处理等技术领域。具体实现方案包括:获取待压缩的日志组的至少一个公共前缀的信息;所述待压缩日志组中包括多条日志;基于所述至少一个公共前缀的信息,对所述待压缩日志组中的多条日志进行压缩处理。本公开的技术,能够有效地提高日志的压缩效率。有效地提高日志的压缩效率。有效地提高日志的压缩效率。
技术研发人员:段鹏飞
受保护的技术使用者:北京百度网讯科技有限公司
技术研发日:2023.03.29
技术公布日:2023/7/25
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
