专利名称:日志记录方法、日志查询方法及系统的制作方法
技术领域:
本发明涉及日志处理领域,更为具体地,涉及一种日志记录方法及装置、一种日志查询方法及装置以及具有上述装置的日志系统。
背景技术:
日志系统负责接收网关发送的日志数据,按照一定格式存储所接收的日志数据,并且提供对日志数据的查询功能。网关发送的日志数据通常包括三种类型管理日志,运行日志和访问日志。管理日志记录的是网关的管理员对网关的管理操作,运行日志记录的是网关本身运行过程中发生的事件,而访问日志记录的是通过网关的访问事件,通常一个会话会产生一条访问日志。通常情况下,网关的管理日志和运行日志不会很多,而访问日志每秒可能达到成千上万条。 图I示出了网关发送的日志数据的一个示例。如图I所示,在该日志数据中包括的字段是时间,模块,等级,源IP,目的IP,目的端口,协议和动作。目前的日志系统主要运行在Linux/Unix或者Windows服务器上,采用关系数据库来实现对日志数据的存储和查询功能。另外,为了提高日志的查询性能,还会为关系数据库建立索引。然而,基于关系数据库实现的日志系统的性能差。一方面,在基于关系数据库实现的日志系统中,日志数据的插入性能差。如果为了提高日志的查询性能而给关系数据库建立索引,则日志数据的插入性能会进一步下降。此外,关系数据库的插入性能还会随着记录的增多而下降。另一方面,即使为数据库建立索引,随着所记录的日志增多,查询性能仍然无法满足要求。此外,基于关系数据库实现的日志系统的存储空间(例如,磁盘空间)利用率低。在基于关系数据库实现的日志系统中,为了提高日志的查询性能,必须为关系数据库建立搜索引,此时会明显增大关系数据库文件所占用的存储空间,从而使得日志系统的存储空间利用率低。
发明内容
鉴于上述,本发明的目的在于提供一种日志记录方法及装置,该方法及装置能够减少索引文件所占用的存储空间。本发明的另一目的在于提供一种日志查询方法及装置,该方法及装置能够提高日志的查询性能。本发明的另一目的在于提供包括上述装置的日志系统。根据本发明的一个方面,提供了一种日志记录方法,包括从所获取的日志中获取该日志中的各个字段的字段取值;将所获取的日志插入到日志数据文件中,所述日志数据文件与多个预先创建的索引文件相关联地存储在存储装置中;记录所述日志在所述日志数据文件中的写入位置距离所述日志数据文件的起始位置的偏移量;以及将各个字段的字段取值和日志的偏移量相关联地写入到对应的索引文件中,每个字段对应一个索引文件,其中,所述多个索引文件中的至少一个索引文件是主索引文件,在所述主索引文件中,还与对应字段的字段取值和日志的偏移量相关联地写入所述日志的长度。在上述方面的一个或多个示例中,在非主索引文件中,还与对应字段的字段取值和日志的偏移量相关联地写入所述日志的长度。在上述方面的一个或多个示例中,所述字段包括时间类型字段、枚举类型字段和变量类型字段,对于时间类型字段,所获取的字段取值是日志的起始时间和结束时间,对于枚举类型字段,所获取的字段取值是字段的枚举类型,以及对于变量类型字段,所获取的字段取值是变量值。在上述方面的一个或多个示例中,所述与时间索引对应的索引文件、所述与枚举类型字段对应的索引文件采用数组方式,以及所述与变量类型字段对应的索引文件采用HASH表的方式。·根据本发明的另一方面,提供了一种日志记录装置,包括字段取值获取单元,用于从所获取的日志中获取该日志中的各个字段的字段取值;日志插入单元,用于将所获取的日志插入到日志数据文件中,所述日志数据文件与多个预先创建的索引文件相关联地存储在存储装置中;记录单元,用于记录所述日志在所述日志数据文件中的写入位置距离所述日志数据文件的起始位置的偏移量;以及索引文件写入单元,用于将各个字段的字段取值和日志的偏移量相关联地写入到对应的索引文件中,每个字段对应一个索引文件,其中,所述多个索引文件中的至少一个索引文件是主索引文件,在对应的索引文件是主索引文件时,所述索引文件写入单元还用于将所述日志的长度与对应字段的字段取值和日志的偏移量相关联地写入到所述主索引文件中。在上述方面的一个或多个示例中,在非主索引文件中,还与对应字段的字段取值和日志的偏移量相关联地写入所述日志的长度。根据本发明的另一方面,提供了一种日志查询方法,所述日志按照如上所述的方法进行记录,所述日志查询方法包括根据用户输入的多个查询条件,在对应的索引文件中读取满足单个查询条件的所有日志偏移量,以得到与该单个查询条件对应的日志偏移量集合;计算所读取的所有日志偏移量集合的交集;根据所计算出的日志偏移量集合的交集,获取与该交集中的日志偏移量对应的主索引文件;以及根据所获取的主索引文件中的日志偏移量和日志长度,从所述日志数据文件中读取满足多个查询条件的日志。在上述方面的一个或多个示例中,计算所读取的所有日志偏移量集合的交集包括对所获取的日志偏移量集合,按照所包含的数据元素的个数从小到大进行排序;以及针对排序后的日志偏移量集合,迭代计算排序后的日志偏移量集合中的前两个日志偏移量集合的交集,直到针对所有所获取的日志偏移量集合完成迭代计算,其中,每次迭代计算的结果替换进行本次迭代计算的两个日志偏移量集合,作为下次迭代计算时的第一个日志偏移量集合。在上述方面的一个或多个示例中,两个日志偏移量集合之间的交集采用二分法计算,以及在进行二分法时,对于在先日志偏移量集合的第一个元素,二分法的开始和结束位置分别为在后日志偏移量集合的第一个元素和最后一个元素;对于所述在先日志偏移量集合的除了第一个元素之外的元素,二分法的开始位置是前一次二分法查找的结果位置,结束位置是在先日志偏移量集合的最后一个元素。根据本发明的另一方面,提供了一种日志查询装置,所述日志按照如上所述的方法进行记录,所述日志查询装置包括日志偏移量获取单元,用于根据用户输入的多个查询条件,在对应的索引文件中读取满足单个查询条件的所有日志偏移量,以得到与该单个查询条件对应的日志偏移量集合;交集计算单元,用于计算所读取的所有日志偏移量集合的交集;主索引文件获取单元,用于根据所计算出的日志偏移量集合的交集,获取与该交集中的日志偏移量对应的主索引文件;以及日志读取单元,用于根据所获取的主索引文件中的日志偏移量和日志长度,从所述日志数据文件中读取满足多个查询条件的日志。在上述方面的一个或多个示例中,所述交集计算单元包括排序模块,用于对所获取的日志偏移量集合,按照所包含的数据元素的个数从小到大进行排序;以及迭代计算模块,用于针对排序后的日志偏移量集合,迭代计算排序后的日志偏移量集合中的前两个日志偏移量集合的交集,直到针对所有所获取的日志偏移量集合完成迭代计算,其中,每次迭代计算的结果替换进行本次迭代计算的两个日志偏移量集合,作为下次迭代计算时的第一 个日志偏移量集合。根据本发明的另一方面,提供了一种日志系统,包括如上所述的日志记录装置;以及如上所述的日志查询装置。利用上述日志记录方法及装置,按照日志数据文件与日志索引文件结合的方式对日志进行记录,从而无需基于关系数据库进行存储,由此减少索引文件所占用的存储空间。利用上述日志查询方法及装置,通过获取满足多个查询条件的偏移量之间的交集来读取满足多个查询条件的日志,可以显著提高日志的查询性能。为了实现上述以及相关目的,本发明的一个或多个方面包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明了本发明的某些示例性方面。然而,这些方面指示的仅仅是可使用本发明的原理的各种方式中的一些方式。此外,本发明旨在包括所有这些方面以及它们的等同物。
根据下述参照附图进行的详细描述,本发明的上述和其他目的、特征和优点将变得更加显而易见。在附图中图I示出了日志的一个示例;图2示出了根据本发明的实施例的日志记录方法的流程图;图3示出了根据本发明的实施例的日志记录装置的方框示意图;图4示出了根据本发明实施例的日志查询方法的流程图;图5示出了图4中的偏移量交集的计算过程的一个示例的流程图;图6示出了根据本发明的实施例的日志查询装置的方框示意图;图7示出了图6中的交集计算单元的一个实现示例的方框示意图;和图8示出了根据本发明的实施例的日志系统的方框示意图。在所有附图中相同的标号指示相似或相应的特征或功能。
具体实施方式
下面描述本公开的各个方面。应该明白的是,本文的教导可以以多种多样形式具体体现,并且在本文中公开的任何具体结构、功能或两者仅仅是代表性的。基于本文的教导,本领域技术人员应该明白的是,本文所公开的一个方面可以独立于任何其它方面实现,并且这些方面中的两个或多个方面可以按照各种方式组合。例如,可以使用本文所阐述的任何数目的方面,实现装置或实践方法。另外,可以使用其它结构、功能、或除了本文所阐述的一个或多个方面之外或不是本文所阐述的一个或多个方面的结构和功能,实现这种装置或实践这种方法。此外,本文所描述的任何方面可以包括权利要求的至少一个元素。下面将参照图2到图7描述本发明的各个实施例。图2示出了根据本发明的实施例的日志记录方法的流程图。如图2所示,在获取日志后,例如,从网关接收到日志数据后,在步骤S210中,从所获取的日志中获取该日志中的各个字段的字段取值。通常,日志由多个字段构成。所述日志中的字段可以包括时间类型字段、枚举类型字段和变量类型字段。所述时间类型字段用于记录日志的时间信息,比如关于日志的发生时间的信息。所述枚举类型字段可以是日志等级字段、模块名称字段等的字段,用于记录日志等级值、模块名称等。变量类型字段可以·是比如IP地址字段、用户名字段等的字段,用于记录IP地址、用户名字等。对于时间类型字段,所获取的字段取值是日志的发生时间。对于枚举类型字段,所获取的字段取值是字段的枚举类型值,比如日志等级值、模块名称等。对于变量类型字段,所获取的字段取值是变量值,比如IP地址、用户名等。接着,在步骤S220,将所获取的日志插入到日志数据文件中。这里,所述日志数据文件用于记录日志数据,并且与预先创建的索引文件相关联的存储在存储装置中。通常,在日志数据文件中,每一行写入一条日志。在其它示例中,在一行中也可以写入多条日志。所述预先创建的索引文件可以包括与时间类型字段对应的索引文件(下文中称为时间索引文件)、与枚举类型字段对应的索引文件以及与变量类型字段对应的索引文件。所述索引文件可以包括主索引文件和非主索引文件。在主索引文件中记录字段取值、偏移量和日志长度。在非主索引文件中记录字段取值和偏移量。另外,可选地,在非主索引文件中,可以不记录日志长度,也可以记录日志长度。在所述预先创建的索引文件中,至少包括一个主索引文件,比如时间索引文件是主索引文件。在本发明的其它示例中,所述预先创建的索引文件可以都是主索引文件。优选地,所述预先创建的索引文件中仅仅包括一个主索引文件。然后,在步骤S230,记录所述日志在所述日志数据文件中的写入位置距离所述日志数据文件的起始位置的偏移量。接着,在步骤S240,从日志中的第一个字段开始,对于每个字段,判断该字段所对应的索引文件是否是主索引文件。例如,根据字段的类型,确定该字段所对应的索引文件是否是主索引文件。在步骤S240中判断该字段所对应的索引文件是主索引文件时,在步骤S250,将所获取的该字段的字段取值、日志的偏移量以及日志长度相关联地写入到与该字段对应的主索引文件中。在步骤S240中判断该字段所对应的索引文件是非主索引文件时,在步骤S260中,将所获取的该字段的字段取值和日志的偏移量相关联地写入到与该字段对应的索引文件中。对于不同类型的索引文件,采用不同的格式。在本发明的一个示例中,时间索引文件和枚举索引文件采用数组方式。在时间索引文件和枚举类型文件是主索引文件时,每个数组元素是三元数组,比如,在时间索引文件中,记录一条日志的起始时间和结束时间、日志的偏移量和日志长度。在枚举索引文件中,记录一条日志的枚举类型(比如日志等级、模块名称)、偏移量以及日志长度。比如,对于时间索引文件,如果一条日志发生的时间是0x5059bd05,在日志数据文件中的偏移量是256,长度是100,则在时间索引文件中需要添加12个字节(二进制方式)0x5059bd050x000001000x00000064,时间索引文件是下面数据结构的数组
Struct time—index {
Unsigned int seconds;
Unsiiined int offset;
o,
Unsigned int len;
} °在时间索引文件和枚举类型文件是非主索引文件时,每个数组元素是二元数组,如,在时间索引文件中,记录一条日志的起始时间和结束时间和日志的偏移量。在枚举索
弓丨文件中,记录一条日志的枚举类型(比如日志等级、模块名称)以及偏移量。变量索引文件采用HASH表方式。在变量索引文件是主索引文件时,HASH表的每个节点记录了日志字段的键值、和该键值相对应的所有日志的偏移量以及日志长度。例如用户名索引文件HASH表中的每个节点记录了用户名、该用户对应的所有日志在日志数据文件中的偏移量以及日志长度。在变量索引文件是非主索引文件时,HASH表的每个节点记录了日志字段的键值以及和该键值相对应的所有日志的偏移量。然后,在步骤S270中,判断是否针对日志中的所有字段都完成上述索引文件写入过程。如果完成,则流程结束。否则,在步骤S280中,转到下一字段,然后返回到步骤S240。图2仅仅是本发明的日志记录过程的一个实现示例。针对上述示例,还可以进行各种变型。比如,在本发明的一个变型中,可以认为所有索引文件都是主索引文件,从而省略图2中的步骤S240和步骤S260。在本发明的另一变型中,在步骤S240之前,还可以包括判断过程,用于对于每个字段,判断在预先创建的索引文件中是否存在对应的索引文件。在判断为不存在对应的索引文件时,创建对应的索引文件,并且将该字段的字段取值和日志的偏移量相关联地写入到所创建的索引文件中。在存在对应的索引文件时,流程进行到步骤S240。图3示出了根据本发明的实施例的日志记录装置300的方框示意图。如图3所示,日志记录装置300包括字段取值获取单元310、日志插入单元320、记录单元330以及索引文件写入单元340。字段取值获取单元310用于从所获取的日志中获取该日志中的各个字段的字段取值。日志插入单元320用于将所获取的日志插入到日志数据文件中,所述日志数据文件与多个预先创建的索引文件相关联地存储在存储装置中。所述多个预先创建的索引文件中的至少一个索引文件是主索引文件。
记录单元330用于记录所述日志在所述日志数据文件中的写入位置距离所述日志数据文件的起始位置的偏移量。索引文件写入单元340用于将各个字段的字段取值和日志的偏移量相关联地写入到对应的索引文件中,每个字段对应一个索引文件。此外,在对应的索引文件是主索引文件时,所述索引文件写入单元340还用于将所述日志的长度与对应字段的字段取值和日志的偏移量相关联地写入到所述主索引文件中。此外,在本发明的另一实施例中,对于非主索引文件,也可以将所述日志的长度与对应字段的字段取值和日志的偏移量相关联地写入到所述非主索引文件中。在本发明的另一示例中,所述日志记录装置还可以包括判断单元(未示出),用于对于每个字段,在将该字段的字段取值和日志的偏移量相关联地写入到对应的索引文件中之前,判断在预先创建的索引文件中是否存在对应的索引文件;以及创建单元(未示出),用于在判断单元判断出不存在对应的索引文件时,创建对应的索引文件。在不存在对应的索引文件时,所述索引文件写入单元340被配置为将该字段的字段取值和日志的偏移量相关 联地写入到所创建的索引文件中,以及在存在对应的索引文件时,所述索引文件写入单元340被配置为将该字段的字段取值和日志的偏移量相关联地写入到该对应的索引文件中。图4示出了根据本发明实施例的日志查询方法的流程图。如图4所示,在利用多个查询条件对如上参照图2所述进行记录的日志进行查询时,首先,在步骤S410,根据用户输入的多个查询条件,在对应的索引文件中读取满足单个查询条件的所有日志偏移量,以得到与该单个查询条件对应的日志偏移量集合。所述多个查询条件可以包括比如与时间相关的查询条件,与指定等级相关的查询条件,与用户名相关的查询条件等。对于给定起始时间和结束时间日志的查询条件,在时间索引文件中读取满足该查询条件的所有偏移量,并组成日志偏移量集合offsets」[]。对于指定等级的查询条件,在日志等级索引文件中读取满足该指定等级的所有日志的偏移量,并组成日志偏移量集合0ffsets_2[]。对于给出用户名的查询条件,在用户名索引文件中读取满足指定用户的所有日志的偏移量,并组成日志偏移量offsets_n[]。这里的偏移量offsets_l []、offsets_2[]和偏移量offsets_n[]通常是偏移量集合。然后,在步骤S420,计算所读取的所有日志偏移量集合的交集,即求偏移量集合offsets_l [], offsets_2 [], ......offsets_n []的交集。在如上求出日志偏移量集合的交集后,在步骤S430,根据所计算出的日志偏移量集合的交集,获取与该交集中包含的日志偏移量对应的主索引条件。这里,所计算出的交集中可能存在多个日志偏移量,从而可以得到多个主索引条件。然后,在步骤S440,根据所获取的主索引条件中的日志偏移量以及日志长度,从所述日志数据文件中读取满足多个查询条件的日志。图5示出了图4中的偏移量集合交集的计算过程的一个示例的流程图。如图5所示,首先,在步骤S421中,对于所获取的偏移量集合,按照所包含的数组元素的个数从小到大进行排序。假设偏移量集合#&的8_1[]〈#&的8_2[]〈……<0ffsets_n[]。接着,在步骤S423中,将第一个偏移量集合设置为当前偏移量集合,即,将offsets」[]设置为当前偏移量集合。然后,在步骤S425,计算当前偏移量集合与下一偏移量集合的交集,即,在当前偏移量集合是offsets_l [],计算offsets_l []和offsets_2[]的交集。在当前偏移量集合是offsets_l□和offsets_2[]的交集时,计算该交集与offsets_3[]的交集。如此类推。在计算出交集后,在步骤S427中,判断是否计算出所有偏移量集合的交集。如果已经计算出,则流程结束。否则,流程进行到步骤S429,将计算出的交集作为当前偏移量集合,并且随后流程返回到步骤S425,继续进行交集计算。在本发明的另一示例中,在计算两个偏移量集合offsets_l []和offsets_2 [](假设两者分别具有M和N个元素)的交集时,如果第一个偏移量集合的元素个数远小于第二个偏移量集合的元素个数(即M远小于N),将采用二分法来计算交集。即对于第一个偏移量集合中的每个元素,使用二分法在第二偏移量集合中查找是否存在相同的元素。由于两个偏移量集合都是单调递增的,在使用二分法的时候,对于0fTSetS_l[]的第一个元素,二分法的开始和结束位置分别为0fTSetS_2[]的第一个元素和最后一个元 素。对于offsets」[]的第二个元素,二分法的开始位置是前一次二分法查找的结果位置,结束位置还是0ffsetS_2口的最后一个元素。依次下去,由此可以减少二分次数。由于这些数组元素都是单调递增的,理论上计算两个递增数组offsets_m[],offsets_n[](分别具有M和N个元素)交集的时间复杂度最好结果是ο (Μ+Ν),从而减小了计算交集的复杂度。进而提高了查询性能。图6示出了根据本发明的实施例的日志查询装置600的方框示意图。如图6所示,日志查询装置600包括日志偏移量获取单元610、交集计算单元620、主索引文件获取单元630和日志读取单元640。日志偏移量获取单元610用于根据用户输入的多个查询条件,在对应的索引文件中读取满足单个查询条件的所有日志偏移量,以得到与该单个查询条件对应的日志偏移量集合。交集计算单元620用于计算所读取的所有日志偏移量集合的交集。主索引文件获取单元630用于根据所计算出的日志偏移量集合的交集,获取与该交集中包含的日志偏移量对应的主索引条件。日志读取单元630用于根据所获取的主索引条件中的日志偏移量和日志长度,从所述日志数据文件中读取满足多个查询条件的日志。图6中的交集计算单元可以采用多种方式实现。图7示出了图6中的交集计算单元的一个实现示例的方框示意图。如图7所示,所述交集计算单元620包括排序模块621和迭代计算模块623。排序模块621用于对所获取的日志偏移量集合,按照所包含的数据元素的个数从小到大进行排序。迭代计算模块623用于针对排序后的日志偏移量集合,迭代计算排序后的日志偏移量集合中的前两个日志偏移量集合的交集,直到针对所有所获取的日志偏移量集合完成迭代计算,其中,每次迭代计算的结果替换进行本次迭代计算的两个日志偏移量集合,作为下次迭代计算时的第一个日志偏移量集合。图8示出了根据本发明的实施例的日志系统10的方框示意图。如图8所示,日志系统10包括日志记录装置300和日志查询装置600。这里,日志系统10中也可以包括日志记录装置300和日志查询装置的各种变型。利用上述日志记录方法及装置,按照日志数据文件与日志索引文件结合的方式对日志进行存储,从而无需基于关系数据库进行存储,由此减少索引文件所占用的存储空间。利用上述日志查询方法及装置,通过获取满足多个查询条件的偏移量之间的交集来读取满足多个查询条件的日志,可以显著提高日志的查询性能。经过试验,采用本发明,可以大幅提高日志系统的性能,并且索引文件占用的磁盘空间不到日志数据文件的20%。利用根据本发明的技术方案,在DELL R71服务器上,对于具有5个字段,长度为128-256字节的日志,插入100万条日志只需要12秒。而且,根据查询条件的不同,查询时间在O. 3毫秒到5毫秒之间。而在相同软硬件环境下,使用基于关系数据库(比如sqlite数据库)的技术方案,在开启事务的情况下,插入100万条记录用时37分53秒,以及查询时间在3毫秒到15毫秒之间。另外,sqlite数据库的插入性能随着插入日志的增加而明显下降。而采用本发明的方案则几乎没有下降。此外,通过采用上述优化之后求多个递增数组交集的算法,比普通算法性能提升了 3-10倍,使用优化之后的算法,查询的性能提升了 40%。尽管前面公开的内容示出了本发明的示例性实施例,但是应当注意,在不背离权·利要求限定的本发明的范围的前提下,可以进行多种改变和修改。根据这里描述的发明实施例的方法权利要求的功能、步骤和/或动作不需以任何特定顺序执行。此外,尽管本发明的元素可以以个体形式描述或要求,但是也可以设想多个,除非明确限制为单数。虽然如上参照图描述了根据本发明的各个实施例进行了描述,但是本领域技术人员应当理解,对上述本发明所提出的各个实施例,还可以在不脱离本发明内容的基础上做出各种改进。因此,本发明的保护范围应当由所附的权利要求书的内容确定。
权利要求
1.一种日志记录方法,包括 从所获取的日志中获取该日志中的各个字段的字段取值; 将所获取的日志插入到日志数据文件中,所述日志数据文件与多个预先创建的索引文件相关联地存储在存储装置中; 记录所述日志在所述日志数据文件中的写入位置距离所述日志数据文件的起始位置的偏移量;以及 将各个字段的字段取值和日志的偏移量相关联地写入到对应的索引文件中,每个字段对应一个索引文件, 其中,所述多个索引文件中的至少一个索引文件是主索引文件,在所述主索引文件中,还与对应字段的字段取值和日志的偏移量相关联地写入所述日志的长度。
2.如权利要求I所述的日志记录方法,其中,在非主索引文件中,还与对应字段的字段取值和日志的偏移量相关联地写入所述日志的长度。
3.如权利要求I所述的日志记录方法,其中,所述字段包括时间类型字段、枚举类型字段和变量类型字段,对于时间类型字段,所获取的字段取值是日志的起始时间和结束时间,对于枚举类型字段,所获取的字段取值是字段的枚举类型,以及对于变量类型字段,所获取的字段取值是变量值。
4.如权利要求3所述的日志记录方法,其中,所述与时间索引对应的索引文件、所述与枚举类型字段对应的索引文件都采用数组方式,以及所述与变量类型字段对应的索引文件采用HASH表的方式。
5.一种日志记录装置,包括 字段取值获取单元,用于从所获取的日志中获取该日志中的各个字段的字段取值; 日志插入单元,用于将所获取的日志插入到日志数据文件中,所述日志数据文件与多个预先创建的索引文件相关联地存储在存储装置中; 记录单元,用于记录所述日志在所述日志数据文件中的写入位置距离所述日志数据文件的起始位置的偏移量;以及 索引文件写入单元,用于将各个字段的字段取值和日志的偏移量相关联地写入到对应的索引文件中,每个字段对应一个索引文件, 其中,所述多个索引文件中的至少一个索引文件是主索引文件,在对应的索引文件是主索引文件时,所述索引文件写入单元还用于将所述日志的长度与对应字段的字段取值和日志的偏移量相关联地写入到所述主索引文件中。
6.如权利要求5所述的日志记录装置,在非主索引文件中,还与对应字段的字段取值和日志的偏移量相关联地写入所述日志的长度。
7.一种日志查询方法,所述日志按照如权利要求I所述的方法进行记录,所述日志查询方法包括 根据用户输入的多个查询条件,在对应的索引文件中读取满足单个查询条件的所有日志偏移量,以得到与该单个查询条件对应的日志偏移量集合; 计算所读取的所有日志偏移量集合的交集; 根据所计算出的日志偏移量集合的交集,获取与该交集中的日志偏移量对应的主索引文件;以及根据所获取的主索引文件中的日志偏移量和日志长度,从所述日志数据文件中读取满足所述多个查询条件的日志。
8.如权利要求7所述的日志查询方法,其中,计算所读取的所有日志偏移量集合的交集包括 对所获取的日志偏移量集合,按照所包含的数据元素的个数从小到大进行排序;以及 针对排序后的日志偏移量集合,迭代计算排序后的日志偏移量集合中的前两个日志偏移量集合的交集,直到针对所有所获取的日志偏移量集合完成迭代计算,其中,每次迭代计算的结果替换进行本次迭代计算的两个日志偏移量集合,作为下次迭代计算时的第一个日志偏移量集合。
9.如权利要求8所述的日志查询方法,其中,两个日志偏移量集合之间的交集采用二分法计算,以及在进行二分法计算时,对于在先日志偏移量集合的第一个元素,二分法的开始和结束位置分别为在后日志偏移量集合的第一个元素和最后一个元素,以及对于所述在先日志偏移量集合的除了第一个元素之外的元素,二分法的开始位置是前一次二分法查找的结果位置,结束位置是在先日志偏移量集合的最后一个元素。
10.一种日志查询装置,所述日志按照如权利要求I所述的方法进行记录,所述日志查询装置包括 日志偏移量获取单元,用于根据用户输入的多个查询条件,在对应的索引文件中读取满足单个查询条件的所有日志偏移量,以得到与该单个查询条件对应的日志偏移量集合; 交集计算单元,用于计算所读取的所有日志偏移量集合的交集; 主索引文件获取单元,用于根据所计算出的日志偏移量集合的交集,获取与该交集中的日志偏移量对应的主索引文件;以及 日志读取单元,用于根据所获取的主索引文件中的日志偏移量和日志长度,从所述日志数据文件中读取满足查询条件的日志。
11.如权利要求10所述的日志查询装置,其中,所述交集计算单元包括 排序模块,用于对所获取的日志偏移量集合,按照所包含的数据元素的个数从小到大进行排序;以及 迭代计算模块,用于针对排序后的日志偏移量集合,迭代计算排序后的日志偏移量集合中的前两个日志偏移量集合的交集,直到针对所有所获取的日志偏移量集合完成迭代计算,其中,每次迭代计算的结果替换进行本次迭代计算的两个日志偏移量集合,作为下次迭代计算时的第一个日志偏移量集合。
12.—种日志系统,包括 如权利要求5或6所述的日志记录装置;以及 如权利要求10或11所述的日志查询装置。
全文摘要
本发明提供了一种日志系统,包括日志记录装置和日志查询装置。在日志记录装置中,记录单元记录日志的写入位置距离日志数据文件的起始位置的偏移量。索引文件写入单元将各个字段的字段取值、日志偏移量和/或日志长度相关联地写入到对应的索引文件中。在日志查询装置中,日志偏移量获取单元根据多个查询条件,在对应的索引文件中读取满足单个查询条件的所有日志偏移量。交集计算单元计算所读取的日志偏移量的交集。日志读取单元根据交集中的日志偏移量,从日志数据文件中读取满足多个查询条件的日志。利用该日志系统,可以显著提高日志的查询性能,并且减少索引文件所占用的存储空间。
文档编号G06F17/30GK102929936SQ20121036619
公开日2013年2月13日 申请日期2012年9月26日 优先权日2012年9月26日
发明者黄传辉, 曹斌 申请人:东软集团股份有限公司