日志文件的读写方法及装置制造方法

文档序号:6519276阅读:180来源:国知局
日志文件的读写方法及装置制造方法
【专利摘要】本发明公开了一种日志文件的读写方法及装置。其中,该方法包括:读取步骤:将读取到日志文件中的日志数据保存入对应的内存集合;检测步骤:检测内存集合的行数是否大于预设阈值;插入步骤:在内存集合的行数大于预设阈值的情况下,将内存集合中的日志数据插入数据库中的第一临时表;返回步骤:返回执行读取步骤直至将日志数据全部保存入第一临时表中;更新步骤:使用第一临时表中的数据更新数据库的正式表。通过本发明,解决了现有技术中将日志文件导入数据库的时间长、效率低的问题,实现了边读边写的效果,使用这种并行处理的机制,缩短了程序整体处理时间,提高了性能的效果。
【专利说明】日志文件的读写方法及装置
【技术领域】
[0001]本发明涉及数据处理领域,具体而言,涉及一种日志文件的读写方法及装置。
【背景技术】
[0002]现有技术中日志文件导入数据库的通常做法为,通过程序逐行读取指定格式的日志文件并逐行写入内存,处理完该日志文件后,才把内存一次性写入数据库,也即先读取完文件才会写入数据库,采用该方案程序执行的时间=读取文件的时间+写入数据库的时间。在日志文件中有大量数据的情况下,读取文件的时间和写入数据库的执行时间分别大幅度增加,造成程序整体的执行时间也大幅度增加。采用上述方法因为执行流程是串行线性的,在程序读取文件过程中,写入数据库的操作一直在等待读取操作的完成,造成了大量的资源闲置。同时,当一次读入的数据足够的大的时候,把这些数据整体写入数据库会造成数据库写入时间过长,短时间内数据库的日志暴涨,如果写入失败,回滚大量数据的时间也很长。
[0003]针对现有技术中将日志文件导入数据库的时间长、效率低的问题,目前尚未提出有效的解决方案。

【发明内容】

[0004]针对相关技术中将日志文件导入数据库的时间长、效率低的问题,目前尚未提出有效的解决方案,为此,本发明的主要目的在于提供一种日志文件的读写方法及装置,以解决上述问题。
[0005]为了实现上述目的,根据本发明的一个方面,提供了一种日志文件的读写方法,该方法包括:读取步骤:将读取到日志文件中的日志数据保存入对应的内存集合;检测步骤:检测内存集合的行数是否大于预设阈值;插入步骤:在内存集合的行数大于预设阈值的情况下,将内存集合中的日志数据插入数据库中的第一临时表;返回步骤:返回执行读取步骤直至将日志数据全部保存入第一临时表中;更新步骤:使用第一临时表中的数据更新数据库的正式表。
[0006]进一步地,读取步骤包括:从日志文件中逐行读取第一日志数据;对第一日志数据进行过滤处理得到第二日志数据;将第二日志数据反序列化得到对象元素;将对象元素保存入内存集合。
[0007]进一步地,在检测步骤之后,方法还包括:在内存集合的行数不大于预设阈值的情况下,检测是否将日志文件中的日志数据读取完;在将日志文件中的日志数据读取完的情况下,执行插入步骤;在没有将日志文件中的日志数据读取完的情况下,执行返回步骤。
[0008]进一步地,更新步骤包括:对第一临时表中的数据进行去重处理得到第二临时表;使用第二临时表中的数据更新正式表。
[0009]进一步地,方法还包括:删除第一临时表和第二临时表中的数据。
[0010]为了实现上述目的,根据本发明的另一方面,提供了一种日志文件的读写装置,该装置包括:读取模块,用于将读取到日志文件中的日志数据保存入对应的内存集合;检测模块,用于检测内存集合的行数是否大于预设阈值;插入模块,用于在内存集合的行数大于预设阈值的情况下,将内存集合中的日志数据插入数据库中的第一临时表;返回执行模块,用于返回执行读取步骤直至将日志数据全部保存入第一临时表中;更新模块,用于使用第一临时表中的数据更新数据库的正式表。
[0011]进一步地,读取模块包括:读取子模块,用于从日志文件中逐行读取第一日志数据;过滤模块,用于对第一日志数据进行过滤处理得到第二日志数据;反序列化模块,用于将第二日志数据反序列化得到对象元素;保存模块,用于将对象元素保存入内存集合。
[0012]进一步地,装置还包括:检测子模块,用于在内存集合的行数不大于预设阈值的情况下,检测是否将日志文件中的日志数据读取完;第一执行模块,用于在将日志文件中的日志数据读取完的情况下,执行插入模块;第二执行模块,用于在没有将日志文件中的日志数据读取完的情况下,执行返回执行模块。
[0013]进一步地,更新步骤包括:去重模块,用于对第一临时表中的数据进行去重处理得到第二临时表;更新子模块,用于使用第二临时表中的数据更新正式表。
[0014]进一步地,装置还包括:删除模块,用于删除第一临时表和第二临时表中的数据。
[0015]采用本发明,在将读取到日志文件中的日志数据保存入对应的内存集合之后,可以检测内存集合的行数是否大于预设阈值,并在内存集合的行数大于预设阈值的情况下,将内存集合中的日志数据插入数据库中的第一临时表,然后返回执行读取日志数据的步骤直至将日志数据全部保存入第一临时表中,在将所有的日志数据全部保存入第一临时表中之后,使用第一临时表中的数据更新正式表。在该日志处理逻辑中实现了并行处理的机制,把大量的日志数据拆分为多个小量数据穿插在主线程的读取过程中进行并行更新,也即可以在主线程读取日志数据的同时,子线程将日志数据写入数据库,更新正式表中的数据,实现了边读边写的效果,使用这种并行处理的机制,缩短了程序整体处理时间,提高了性能解决了现有技术中将日志文件导入数据库的时间长、效率低的问题。
【专利附图】

【附图说明】
[0016]此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0017]图1是根据本发明实施例的日志文件的读写装置示意图;
[0018]图2是根据本发明实施例的日志文件的读写方法的流程图;以及
[0019]图3是根据本发明实施例的一种可选的日志文件的读写方法的流程图。
【具体实施方式】
[0020]首先,在对本发明实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
[0021]回滚(Rollback):回滚泛指程序更新失败,返回上一次正确状态的行为。
[0022]序列化(Serialize):将对象状态转换为可保持或传输的格式的过程。
[0023]反序列化(Deserialize):将数据流转化成对象的过程。
[0024]正则表达式(Regular Expression):正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。
[0025]JSON(JavaScript Object Notation):一种轻量级的数据交换格式。
[0026]主键(Primary Key):是表中的一个或多个字段,它的值用于唯一地标识表中的某
一条记录。
[0027]哈希(Hash):就是把任意长度的输入(又叫做预映射,pre-1mage),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
[0028]为了使本【技术领域】的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0029]需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0030]图1是根据本发明实施例的日志文件的读写装置示意图。如图1所示,该装置可以包括:读取模块10,用于将读取到日志文件中的日志数据保存入对应的内存集合;检测模块30,用于检测内存集合的行数是否大于预设阈值;插入模块50,用于在内存集合的行数大于预设阈值的情况下,将内存集合中的日志数据插入数据库中的第一临时表;返回执行模块70,用于返回执行读取步骤直至将日志数据全部保存入第一临时表中;更新模块90,用于使用第一临时表中的数据更新数据库的正式表。
[0031]采用本发明,在将读取到日志文件中的日志数据保存入对应的内存集合之后,可以检测内存集合的行数是否大于预设阈值,并在内存集合的行数大于预设阈值的情况下,将内存集合中的日志数据插入数据库中的第一临时表,然后返回执行读取日志数据的步骤直至将日志数据全部保存入第一临时表中,在将所有的日志数据全部保存入第一临时表中之后,使用第一临时表中的数据更新正式表。在该日志处理逻辑中实现了并行处理的机制,把大量的日志数据拆分为多个小量数据穿插在主线程的读取过程中进行并行更新,也即可以在主线程读取日志数据的同时,子线程将日志数据写入数据库,更新正式表中的数据,实现了边读边写的效果,使用这种并行处理的机制,缩短了程序整体处理时间,提高了性能,解决了现有技术中将日志文件导入数据库的时间长、效率低的问题。
[0032]进一步地,读取模块包括:读取子模块,用于从日志文件中逐行读取第一日志数据;过滤模块,用于对第一日志数据进行过滤处理得到第二日志数据;反序列化模块,用于将第二日志数据反序列化得到对象元素;保存模块,用于将对象元素保存入内存集合。
[0033]具体地,在执行本申请的上述实施例之前,可以初始化内存中的数据集合和执行该实施例需要使用的内部变量(在完成对内存的初始化之后,打开日志文件,逐行读取日志文件中的第一日志数据。在该实施例中的日志数据与第一日志数据是同样的数据。
[0034]其中,该内部变量指程序中用于数据交换或者传递的临时变量,只在程序内部使用。
[0035]更具体地,通过正则表达式从读取到的第一日志数据中过滤掉不符合规则的数据流(即第一日志数据组成的数据流)得到第二日志数据。在该步骤中日志数据的表现形式为字符串。
[0036]通过该步骤可以减少大量不符合规则的日志数据,从而可以有效减少后续数据处理的数量,减少了资源占用并且可以大大提高处理速度。
[0037]具体地,将日志数据放入内存集合中,之后循环读取日志,直到日志全部读取完毕。在该实施例中日志数据的表现形式是对象元素。
[0038]更具体地,在该保存过程中,可以将具有不同属性的日志数据保存入不同的内存集合中,也即可以根据日志数据的属性信息将日志数据保存进对应的内存集合。其中,属性信息可以包括:业务类型、用户信息以及访问时间等信息。
[0039]进一步地,装置还包括:检测子模块,用于在内存集合的行数不大于预设阈值的情况下,检测是否将日志文件中的日志数据读取完;第一执行模块,用于在将日志文件中的日志数据读取完的情况下,执行插入模块;第二执行模块,用于在没有将日志文件中的日志数据读取完的情况下,执行返回执行模块。
[0040]进一步地,更新步骤包括:去重模块,用于对第一临时表中的数据进行去重处理得到第二临时表;更新子模块,用于使用第二临时表中的数据更新正式表。
[0041]进一步地,装置还包括:删除模块,用于删除第一临时表和第二临时表中的数据。
[0042]由于第一临时表中会有大量的重复数据,将重复的大量数据直接在第一临时表中删除生成第二临时表,然后使用第二临时表中的数据更新正式表中的数据,比起直接将第一临时表中的数据导入正式表中后删除大量重复数据,可以节省大量的时间,采用该方案可以大大提高处理效率。
[0043]在本发明的上述实施例中,删除第一临时表和第二临时表中的数据,可以收缩数据库并释放资源。
[0044]具体地,可以将去重后的临时表(即第二临时表中的)根据第二临时表中的每行数据主键列生成的Hash值,对临时表和正式表的数据逐行进行Hash匹配,临时表的数据已经存在于正式表则把临时表的数据更新到正式表中,临时表的数据不存在于正式表则把临时表的数据插入到正式表中。
[0045]在上述实施例中,对第二临时表和正式表中的数据逐行进行Hash匹配具体地可以通过如下方法实现:
[0046]比较两个表中每行数据的hash值是否相同,在hash值相同的情况下,确认匹配成功;在hash不同的情况下,确认匹配不成功。
[0047]在匹配成功的情况下,确认第二临时表中该行的数据在正式表中已经存在,使用第二临时表中的数据修改正式表中对应行的数据的值;在匹配不成功的情况下,确认第二临时表中该行的数据在正式表中不存在,将第二临时表中改行的数据插入到正式表中。
[0048]上述实施例中的检测子模块、第一执行模块、第二执行模块、去重模块、更新子模块以及删除模块可以使用下述的方法实施例中的方法实现。
[0049]图2是根据本发明实施例的日志文件的读写方法的流程图,如图2所示该方法包括如下步骤:
[0050]步骤S102,读取步骤:将读取到日志文件中的日志数据保存入对应的内存集合。
[0051]步骤S104,检测步骤:检测内存集合的行数是否大于预设阈值。
[0052]步骤S106,插入步骤:在内存集合的行数大于预设阈值的情况下,将内存集合中的日志数据插入数据库中的第一临时表。
[0053]步骤S108,返回步骤:返回执行读取步骤直至将日志数据全部保存入第一临时表中。
[0054]步骤S110,更新步骤:使用第一临时表中的数据更新数据库的正式表。
[0055]采用本发明,在将读取到日志文件中的日志数据保存入对应的内存集合之后,可以检测内存集合的行数是否大于预设阈值,并在内存集合的行数大于预设阈值的情况下,将内存集合中的日志数据插入数据库中的第一临时表,然后返回执行读取日志数据的步骤直至将日志数据全部保存入第一临时表中,在将所有的日志数据全部保存入第一临时表中之后,使用第一临时表中的数据更新正式表。在该日志处理逻辑中实现了并行处理的机制,把大量的日志数据拆分为多个小量数据穿拆在主线程的读取过程中进行并行更新,也即可以在主线程读取日志数据的同时,子线程将日志数据写入数据库,更新正式表中的数据,实现了边读边写的效果,使用这种并行处理的机制,缩短了程序整体处理时间,提高了性能解决了现有技术中将日志文件导入数据库的时间长、效率低的问题。
[0056]在本发明的上述实施例中,通过边读边写并行处理的机制,减少资源闲置,缩短整体执行时间,提高执行效率,通过设定一个读写平衡的阈值,减少一次性写入数据库的数据量,提闻系统的读与性能。
[0057]根据本发明的上述实施例,读取步骤可以包括:从日志文件中逐行读取第一日志数据;对第一日志数据进行过滤处理得到第二日志数据;将第二日志数据反序列化得到对象元素;将对象元素保存入内存集合。
[0058]具体地,如图3所示,本发明的上述实施例可以包括如下步骤:
[0059]步骤S201:读取日志数据。
[0060]步骤S202:读取下一条日志数据。
[0061]具体地,在执行本申请的上述实施例之前,可以初始化内存中的数据集合和执行该实施例需要使用的内部变量(在完成对内存的初始化之后,打开日志文件,逐行读取日志文件中的第一日志数据。在该实施例中的日志数据与第一日志数据是同样的数据。
[0062]其中,该内部变量指程序中用于数据交换或者传递的临时变量,只在程序内部使用。
[0063]步骤S203:检测下一条日志数据是否符合正则表达式。通过该步骤实现上述实施例中对第一日志数据进行过滤处理得到第二日志数据的步骤。
[0064]其中,具体地,在下一条日志数据符合正则表达式的情况下,表明该日志数据符合规则,则将该日志数据(此处的日志数据为第二日志数据)执行步骤S205的处理。在下一条日志数据符合正则表达式的情况下,执行步骤S204:抛出异常,并返回执行步骤S202。
[0065]更具体地,通过正则表达式从读取到的第一日志数据中过滤掉不符合规则的数据流(即第一日志数据组成的数据流)得到第二日志数据。在该步骤中日志数据的表现形式为字符串。
[0066]通过该步骤可以减少大量不符合规则的日志数据,从而可以有效减少后续数据处理的数量,减少了资源占用并且可以大大提高处理速度。
[0067]步骤S205:将日志数据反序列化成对象元素。
[0068]具体地,根据预设规则将第二日志数据(在本实施例中第一日志数据可以是字符串)反序列化为对象元素。
[0069]其中,上述实施例中的规则可以是客户端与服务器约定的数据格式、数据项的名称和类型定义等参数;数据流可以是进位制,例如:010101、JSON:{"name": "john", "age":24}、参数形式:sn=85&gsve=l.3.1.0等,客户端和服务器端预先约定的发送日志数据的格式以及数据项的名称和类型定义即为上述实施例中的预设规则。
[0070]具体地,数据接收端(即上述实施例中的服务器)定义了接收数据的数据项个数、名称和类型,例如:A:数值型,B:字符型,C:字符型,客户端发送必须按该定义发送数据,如果数据项个数、名称和类型任意一项不合符定义,均被认为不符合规则。
[0071]步骤S206:将日志数据保存入内存集合。
[0072]具体地,将日志数据放入内存集合中,之后循环读取日志,直到日志全部读取完毕。在该实施例中日志数据的表现形式是对象元素。
[0073]更具体地,在该保存过程中,可以将具有不同属性的日志数据保存入不同的内存集合中,也即可以根据日志数据的属性信息将日志数据保存进对应的内存集合。其中,属性信息可以包括:业务类型、用户信息以及访问时间等信息。
[0074]步骤S207:检测内存集合的行数是否大于预设阈值。
[0075]其中,在行数大于预设阈值的情况下,执行步骤S209;在行数不大于预设阈值的情况下,执行步骤S208。
[0076]步骤S208:检测日志数据是否全部读完。其中,在日志数据全部读完的情况下,执行步骤S209 ;在日志数据没有全部读完的情况下,返回执行步骤S202,直至将所有的日志数据读完。
[0077]步骤S209:将日志数据插入临时表。
[0078]具体地,对内存集合行数设置一个预设阈值,在内存集合的行数大于设置阈值时,开启一个线程,任务线程的标示符自加一,通过数据库脚本语言把内存集合中的数据(即第二日志数据)插入数据库的第一临时表(中间表)。
[0079]其中,临时表的表结构和正式表完全一致。
[0080]步骤S210:检测日志数据是否成功插入临时表。该步骤中的临时表即为上述实施例中的第一临时表。
[0081]具体地,若插入失败则回滚事务,抛出异常结束程序;若插入成功,则执行步骤S211,与此同时,子线程释放占用的资源,任务线程标示符自减一。
[0082]步骤S211:检测日志数据是否读完。其中,在日志数据没有读取完的情况下,返回执行步骤S202 ;在日志数据读取完的情况下,执行步骤S212。[0083]具体地,主线程继续读取日志数据,直到日志数据全部读取完毕,通过任务线程标示符的数量判断是否还有子线程未完成,当任务线程标示符等于零时,子线程全部执行完毕。
[0084]在本发明的上述实施例中,在检测步骤之后,方法还可以包括:在内存集合的行数不大于预设阈值的情况下,检测是否将日志文件中的日志数据读取完;在将日志文件中的日志数据读取完的情况下,执行插入步骤;在没有将日志文件中的日志数据读取完的情况下,执行返回步骤。
[0085]根据本发明的上述实施例,导入步骤可以包括:对第一临时表中的数据进行去重处理得到第二临时表;将第二临时表中的数据导入正式表。具体地,第二临时表可以是与第一临时表
[0086]由于第一临时表中会有大量的重复数据,将重复的大量数据直接在第一临时表中删除生成第二临时表,然后使用第二临时表中的数据更新正式表中的数据,比起直接将第一临时表中的数据导入正式表中后删除大量重复数据,可以节省大量的时间,采用该方案可以大大提高处理效率。
[0087]具体地,在导入步骤之后,方法还可以包括:删除第一临时表和第二临时表中的数据。
[0088]删除第一临时表和第二临时表中的数据,可以收缩数据库并释放资源。
[0089]具体地,在图3中示出的步骤S212至步骤S213可以实现上述实施例:
[0090]步骤S212:将临时表中的数据导入数据库正式表。
[0091]具体地,主线程等待子线程全部执行完毕(此时各个子线程已经完成各自的临时表数据的导入),把所有的临时表中的数据导入到数据库的正式表中。
[0092]更具体地,可以将去重后的临时表(即第二临时表中的)根据第二临时表中的每行数据主键列生成的Hash值,对临时表和正式表的数据逐行进行Hash匹配,临时表的数据已经存在于正式表则把临时表的数据更新到正式表中,临时表的数据不存在于正式表则把临时表的数据插入到正式表中。
[0093]在上述实施例中,对第二临时表和正式表中的数据逐行进行Hash匹配具体地可以通过如下方法实现:
[0094]比较两个表中每行数据的hash值是否相同,在hash值相同的情况下,确认匹配成功;在hash不同的情况下,确认匹配不成功。
[0095]在匹配成功的情况下,确认第二临时表中该行的数据在正式表中已经存在,使用第二临时表中的数据修改正式表中对应行的数据的值;在匹配不成功的情况下,确认第二临时表中该行的数据在正式表中不存在,将第二临时表中改行的数据插入到正式表中。
[0096]步骤S213:检测临时表中的数据导入正式表是否失败。
[0097]在临时表中的数据导入正式表失败的情况下,则回滚事务,抛出异常记录错误信息并结束程序;若导入成功,则提交事务。
[0098]在本发明实施例中提及的正式表是预先保存在数据库中预定格式的表。
[0099]需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。[0100]本发明上述实施例中的正式表可以为数据库中预存好的固定格式的用于保存数据的表。
[0101]从以上的描述中,可以看出,本发明实现了如下技术效果:采用本发明,在将读取到日志文件中的日志数据保存入对应的内存集合之后,可以检测内存集合的行数是否大于预设阈值,并在内存集合的行数大于预设阈值的情况下,将内存集合中的日志数据插入数据库中的第一临时表,然后返回执行读取日志数据的步骤直至将日志数据全部保存入第一临时表中,在将所有的日志数据全部保存入第一临时表中之后,使用第一临时表中的数据更新正式表。在该日志处理逻辑中实现了并行处理的机制,把大量的日志数据拆分为多个小量数据穿拆在主线程的读取过程中进行并行更新,也即可以在主线程读取日志数据的同时,子线程将日志数据写入数据库,更新正式表中的数据,实现了边读边写的效果,使用这种并行处理的机制,缩短了程序整体处理时间,提高了性能解决了现有技术中将日志文件导入数据库的时间长、效率低的问题。
[0102]显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
[0103]以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种日志文件的读写方法,其特征在于,包括: 读取步骤:将读取到日志文件中的日志数据保存入对应的内存集合; 检测步骤:检测所述内存集合的行数是否大于预设阈值; 插入步骤:在所述内存集合的所述行数大于所述预设阈值的情况下,将所述内存集合中的所述日志数据插入数据库中的第一临时表; 返回步骤:返回执行所述读取步骤直至将所述日志数据全部保存入所述第一临时表中; 更新步骤:使用所述第一临时表中的数据更新所述数据库的正式表。
2.根据权利要求1所述的读写方法,其特征在于,所述读取步骤包括: 从所述日志文件中逐行读取第一日志数据; 对所述第一日志数据进行过滤处理得到第二日志数据; 将所述第二日志 数据反序列化得到对象元素; 将所述对象元素保存入所述内存集合。
3.根据权利要求1所述的读写方法,其特征在于,在所述检测步骤之后,所述方法还包括: 在所述内存集合的所述行数不大于所述预设阈值的情况下,检测是否将所述日志文件中的所述日志数据读取完; 在将所述日志文件中的所述日志数据读取完的情况下,执行所述插入步骤; 在没有将所述日志文件中的所述日志数据读取完的情况下,执行所述返回步骤。
4.根据权利要求1至3中任意一项所述的读写方法,其特征在于,所述更新步骤包括: 对所述第一临时表中的数据进行去重处理得到第二临时表; 使用所述第二临时表中的数据更新所述正式表。
5.根据权利要求4所述的读写方法,其特征在于,在所述更新步骤之后,所述方法还包括: 删除所述第一临时表和所述第二临时表中的数据。
6.一种日志文件的读写装置,其特征在于,包括: 读取模块,用于将读取到日志文件中的日志数据保存入对应的内存集合; 检测模块,用于检测所述内存集合的行数是否大于预设阈值; 插入模块,用于在所述内存集合的所述行数大于所述预设阈值的情况下,将所述内存集合中的所述日志数据插入数据库中的第一临时表; 返回执行模块,用于返回执行所述读取步骤直至将所述日志数据全部保存入所述第一临时表中; 更新模块,用于使用所述第一临时表中的数据更新所述数据库的正式表。
7.根据权利要求6所述的读写装置,其特征在于,所述读取模块包括: 读取子模块,用于从所述日志文件中逐行读取第一日志数据; 过滤模块,用于对所述第一日志数据进行过滤处理得到第二日志数据; 反序列化模块,用于将所述第二日志数据反序列化得到对象元素; 保存模块,用于将所述对象元素保存入所述内存集合。
8.根据权利要求6所述的读写装置,其特征在于,所述装置还包括:检测子模块,用于在所述内存集合的所述行数不大于所述预设阈值的情况下,检测是否将所述日志文件中的所述日志数据读取完; 第一执行模块,用于在将所述日志文件中的所述日志数据读取完的情况下,执行所述插入模块; 第二执行模块,用于在没有将所述日志文件中的所述日志数据读取完的情况下,执行所述返回执行模块。
9.根据权利要求6至8中任意一项所述的读写装置,其特征在于,所述更新步骤包括: 去重模块,用于对所述第一临时表中的数据进行去重处理得到第二临时表; 更新子模块,用于使用所述第二临时表中的数据更新所述正式表。
10.根据权利要求9所述的读写装置,其特征在于,所述装置还包括: 删除模块,用于删除所述第一临时表和所述第二临时表中的数据。
【文档编号】G06F17/30GK103593440SQ201310575219
【公开日】2014年2月19日 申请日期:2013年11月15日 优先权日:2013年11月15日
【发明者】吴充, 郭涛 申请人:北京国双科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1