CLP:压缩文本日志上进行高效和可扩展的压缩
一、问题定义:
本文介绍了CLP的设计和实现,CLP是一个能够无损压缩非结构化文本日志的工具,同时能够直接在压缩的数据上进行快速搜索。CLP是一个完整的端到端系统,用于读取、归档、搜索和分析日志信息;
要满足以下目标:
首先,日志是无损压缩的,用户可以删除原始日志,而且不用担心会对其进行破坏性的改变(例如,通过改变浮点值的精度)。第二,用户能够搜索他们的日志中的任何数值,这与基于索引的搜索不同,后者通常只允许搜索索引的数值。最后,CLP应该是高性能和可扩展的,用户可以用它来获取和搜索大量的日志数据,同时节省存储成本。
二、算法核心:
1. 基本概念
1.1 CLP的压缩包括两个步骤:首先,它将每个日志信息中高度重复的部分删除,并以特殊的格式进行编码,然后它将轻量级的压缩器应用于编码后的数据,进一步减少其大小。
1.2 CLP将每个消息分成三块。1)日志类型,通常是高度重复的静态文本;2)变量值;3)时间戳(如果消息包含时间戳)。CLP进一步将变量值分成两类,第一类是重复的,如各种标识符(如用户名),第二类是不重复的(如一项工作的完成时间)。第一类称为字典变量,第二类称为非字典变量。
1.3 一旦被解析,字典中的变量就存储在一个两级的变量字典中,被称为vDict,第一层将每个字典变量Schema映射到一个唯一的ID。每个Schema也被映射到一个指针上,该指针指向vDict的第二层,实际的变里值被存储在那里。
在图3中,Schema中的task ID、IP地址和container ID都被映射到第一层的ID 的0,1和2,而实际的变量值被存储在第二层。