一种日志数据存储方法、装置、电子设备和介质与流程

文档序号:26050426发布日期:2021-07-27 15:25阅读:94来源:国知局
一种日志数据存储方法、装置、电子设备和介质与流程

本申请涉及通信技术领域,尤其涉及一种日志数据存储方法、装置、电子设备和介质。



背景技术:

日志就是计算机系统、设备、软件在某种刺激下反应生成的数据。而日志可以了解计算机硬件和软件的运行状态,可以找出运行问题所在,因此一般会对日志进行存储。但是由于文件系统的限制,数据库的大小存在上限,且数据库过大会影响查询性能,但是每天的日志又在不断产生,因此如何对存储日志的数据库进行拆分,让新数据持续写入,又让日志的规格或者所占用的空间得到控制是问题的关键所在。

目前在一些较低端的网络设备上,只支持内存或者一些使用存储空间较小的存储介质来存储日志。日志存储是按照每天一个数据库进行存储,每天达到文件系统的上限后新日志不再写入。但是该方法会存在如下问题:数据库很容易就写满了,按照该方法数据库写满后就无法继续记录日志,从而导致日志记录不全,这样日志就失去了完整性和时效性。

而在一些高端的网络设备上,可能支持硬盘等存储空间较大的存储介质,由于空间充足,在到达一个数据库上限后,创建新的数据库来不断写入,保证能存储更多的数据。但这种情况下,无法把日志占用的存储空间控制在一个固定范围内,导致存储介质被很快占满,后续无法保证新日志能有空间写入,甚至会导致其他类型需要存储的数据或文件无剩余空间写入。

因此,如何保证日志数据的持续写入,避免因存储空间的占满无法继续写入日志数据的情况发生是值得考虑的技术问题之一。



技术实现要素:

有鉴于此,本申请提供一种日志数据存储方法、装置、电子设备和介质,用以保证日志数据的持续写入,避免因存储空间的占满无法继续写入日志数据的情况发生。

具体地,本申请是通过如下技术方案实现的:

根据本申请的第一方面,提供一种日志数据存储方法,应用于网络设备中,所述网络设备包括的日志内存空间被划分为预留空间和多个业务分别对应的存储空间;以及所述方法,包括:

当任一业务产生新的日志数据时,判断该业务对应的存储空间是否已满;

若该业务对应的存储空间已满,则判断所述日志内存空间的已使用存储空间是否达到设定存储空间,所述设定存储空间的大小为所述日志内存空间与所述预留空间之间的差值;

若已达到设定存储空间,则利用所述新的日志数据对该业务对应的存储空间中旧的日志数据进行覆盖;

若未达到设定存储空间,则向其他业务中具有空闲空间的业务对应的存储空间中写入所述新的日志数据。

根据本申请的第二方面,提供一种日志数据存储装置,应用于网络设备中,所述网络设备包括的日志内存空间被划分为预留空间和多个业务分别对应的存储空间;以及所述装置,包括:

第一判断模块,用于当任一业务产生新的日志数据时,判断该业务对应的存储空间是否已满;

第二判断模块,用于若所述第一判断模块的判断结果为该业务对应的存储空间已满,则判断所述日志内存空间的已使用存储空间是否达到设定存储空间,所述设定存储空间的大小为所述日志内存空间与所述预留空间之间的差值;

日志写入模块,用于若所述第二判断模块的判断结果为已达到设定存储空间,则利用所述新的日志数据对该业务对应的存储空间中旧的日志数据进行覆盖;若所述第二判断模块的判断结果为未达到设定存储空间,则向其他业务中具有空闲空间的业务对应的存储空间中写入所述新的日志数据。

根据本申请的第三方面,提供一种电子设备,包括处理器和机器可读存储介质,机器可读存储介质存储有能够被处理器执行的计算机程序,处理器被计算机程序促使执行本申请实施例第一方面所提供的方法。

根据本申请的第四方面,提供一种机器可读存储介质,机器可读存储介质存储有计算机程序,在被处理器调用和执行时,计算机程序促使处理器执行本申请实施例第一方面所提供的方法。

本申请实施例的有益效果:

通过为各个业务分别配置各自对应的存储空间,一般情况下可以保证各个业务的日志数据的分布式存储,此外通过预留出一个预留空间,可以保证各业务的日志数据存储都能达到最大规格;而且本实施例中,当业务对应的存储空间占满时但其他业务对应的存储空间未占满时,可以实现存储空间占满的业务后续产生的新的日志数据存储到其他业务对应的存储空间内,由此实现了日志数据的不间断存储。

附图说明

图1是本申请实施例提供的一种日志数据存储方法的流程示意图;

图2是本申请实施例提供的一种日志数据写入存储空间的示意图;

图3是本申请实施例提供的另一种日志数据存储方法的流程示意图;

图4是本申请实施例提供的向外部存储设备写入新的日志数据的流程示意图;

图5是本申请实施例提供的外部存储设备写入日志数据的示意图;

图6是本申请实施例提供的日志数据存储装置的结构示意图;

图7是本申请实施例提供的实施日志数据存储方法的电子设备的硬件结构示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相对应的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

下面对本申请提供的日志数据存储方法进行详细地说明。

参见图1,图1是本申请提供的一种日志数据存储方法的流程图,该方法应用于网络设备中,所述网络设备包括的日志内存空间被划分为预留空间和多个业务分别对应的存储空间;以及网络设备实施上述日志数据存储方法时可包括如下所示步骤:

s101、当任一业务产生新的日志数据时,判断该业务对应的存储空间是否已满;若该业务对应的存储空间已满,则执行步骤s102;若该业务对应的存储空间未满,则执行步骤s105。

具体地,用户可以预先为网络设备中的日志内存空间进行分配,然后划出一个预留空间,并根据网络设备所承载的各个业务和余下的存储空间,为每个业务分配一个存储空间,参考图2所示,这样,一个业务对应一个存储空间,然后当各个业务产生日志数据时可以优先在对应业务的存储空间内写入该业务的日志数据;此外,本申请的日志内存空间还预留出一个预留空间,也请参考图2所示,该预留空间不存储任何日志数据,这样一来,可以保证其他业务对应的存储空间的最大化利用。

具体地,当网络设备确定某个业务(以业务a为例进行说明)产生新的业务数据时,会优先判断该业务a对应的存储空间是否已存满,如果该业务a对应的存储空间已满,则表明该业务a对应的存储空间无法继续存储日志数据,则执行步骤s102;若该业务a对应的存储空间未满,则表明该业务a对应的存储空间还可以继续存储后续接收到的日志数据,则执行步骤s105,即将该业务a产生的新的日志数据写入到该业务a对应的存储空间内。

需要说明的是,本实施例中日志内存空间为网络设备的内存中用于存储日志数据的存储空间,日志内存空间的大小可以根据实际情况来分配。

s102、判断所述日志内存空间的已使用存储空间是否达到设定存储空间;若已达到设定存储空间,则执行步骤s103;若未达到设定存储空间,则执行步骤s104。

其中,上述设定存储空间的大小为所述日志内存空间与所述预留空间之间的差值。

具体地,当该业务a的存储空间已满时,则可以确定上述网络设备的日志内存空间的已使用存储空间是否达到设定存储空间,该设定存储空间为日志内存空间与预留空间的差值,该已使用存储空间为各个业务的存储空间的总使用空间之和,也即各个存储空间是否均已被占满,如果均已被占满则表明该网络设备的各个业务产生的日志数据已填满存储空间,由此实现了存储空间的最大化利用,而且此时为了能够继续写入新的日志数据,执行步骤s103。

s103、利用所述新的日志数据对该业务对应的存储空间中旧的日志数据进行覆盖。

具体地,当步骤s102中日志内存空间的已使用存储空间达到设定存储空间时,则为了能够继续写入新产生的日志数据,则可以利用新的日志数据覆盖业务a对应的存储空间中旧的日志数据,从而实现了后续产生的日志数据的不间断存储。

s104、向其他业务中具有空闲空间的业务对应的存储空间中写入所述新的日志数据。

本步骤中,当步骤s102中日志内存空间的已使用存储空间未达到设定存储空间时,则表明存在其他业务的存储空间未存满的情况,则此时筛选出当前具有空闲空间的业务,然后可以从空闲看空间的各个业务对应的存储空间中筛选出一个业务对应的存储空间,然后将新的日志数据写入到筛选出的业务对应的存储空间内。例如,图2中当业务a的存储空间已占满时,而业务b和业务c各自对应的存储空间均有空闲,则此时可以从业务a和业务b中筛选出任一个业务对应的存储空间来存储业务a产生的新的日志数据,如将业务a新的日志数据写入到业务b对应的存储空间内。具体地,在从具有空闲空间的各个业务中筛选用于存储新的日志数据的存储空间时,可以任意选取一个具有空闲空间的业务;也可以比对各个业务分别具有的空闲空间的大小,然后选择空闲空间大的业务对应的存储空间来存储新的日志数据,具体选择方法还可以有多种,本实施例对此不进行限定。

s105、向该业务对应的存储空间写入所述新的日志数据。

本步骤中,当步骤s101中该业务对应的存储空间未存满时,表明该业务对应的存储空间可以继续存储日志数据,则此时可以将新的日志数据直接写入到该业务对应的存储空间中。

本实施例提供的日志数据存储方法中,通过为各个业务分别配置各自对应的存储空间,一般情况下可以保证各个业务的日志数据的分布式存储,此外通过预留出一个预留空间,可以保证各业务的日志数据存储都能达到最大规格;而且本实施例中,当业务对应的存储空间占满时但其他业务对应的存储空间未占满时,可以实现存储空间占满的业务后续产生的新的日志数据存储到其他业务对应的存储空间内,由此实现了日志数据的不间断存储。

可选地,本实施例提供的日志数据存储方法,还包括下述过程:当任一业务产生新的日志数据时,判断该业务本身产生的日志数据所占用的存储空间是否未达到该业务对应的存储空间;若未达到该业务对应的存储空间,则判断所述日志内存空间的已使用存储空间是否达到设定存储空间;若达到设定存储空间,则确认占用该业务对应的存储空间的目标业务,并按时间顺序删除所述目标业务对应的存储空间中的日志数据,直至所述目标业务对应的空闲存储空间达到其对应的存储空间为止,或者直至所述日志内存空间的已使用存储空间不大于所述设定存储空间为止;将所述新的日志数据写入到所述预留空间中。

具体地,实际应用中,还可能存在业务对应的存储空间被其他业务的日志数据占用的情况,也即业务自身产生的日志数据所占用的存储空间未达到为该业务分配的存储空间的情况,但是由于该业务的存储空间被其他业务的日志数据占用,所以该情况下也容易导致日志内存空间的已使用存储空间达到设定存储空间的情况。因此,在此情况下,本实施例提出当该业务本身产生的日志未达到该业务对应的存储空间但日志内存空间的已使用空间达到设定存储空间时,确定占用该业务对应的存储空间的目标业务,然后从目标业务对应的存储空间按照写入时间顺序删除日志数据,例如先删除最先写入目标业务对应的存储空间中的日志数据,即最老的日志数据。但是在删除日志数据时也不能无限制删除,停止删除日志的条件为:目标业务对应的存储空间中无日志数据时停止执行删除操作,即上述目标业务对应的空闲存储空间达到目标业务对应的存储空间时停止执行删除操作;或者,由于在执行日志数据删除操作,日志内存空间的已使用存储空间是动态变化的,因此可以判断日志内存空间的已使用存储空间是否不大于设定存储空间,如果不大于设定存储空间时,可以停止执行删除操作,此时可以不需要目标业务对应的空闲存储空间达到目标业务对应的存储空间。此外,为了保证新的日志数据的不间断存储,本实施例提出将新的日志数据写入到预留空间中,而且由于对目标业务对应的存储空间中的日志数据执行了删除操作,目标业务对应的存储空间会空闲出一部分空间,而空闲出的空间此时相当于预留空间,由此达到了预留了存储空间的目的。

此外,若该业务本身产生的日志数据所占用的存储空间达到为该业务分配的存储空间时,则可以执行图1所示的流程。

此外,在向预留空间写入新的日志数据后,后续可以继续判断该业务的日志数据所占用的存储空间是否达到该业务对应的存储空间,若达到时,则可以对该业务对应的存储空间中的日志数据进行覆盖处理,具体来说,优先覆盖该业务对应的存储空间中最老的日志数据,这样也实现了日志的不间断存储。

结合图2进行说明,在业务a产生新的日志数据后,可以统计业务a本身产生的日志数据所占用的存储空间,然后判断业务a本身产生的日志数据所占用的存储空间是否达到为业务a配置的存储空间,若未达到,则可以判断日志内存空间的已使用空间是否达到设定存储空间,如果达到,则确认占用业务a对应的存储空间的目标业务,如目标业务为业务c,则表明存在业务c的日志数据因业务c对应的存储空间已满而写入到业务a对应的存储空间中的情况,此时可以删除业务c对应的存储空间中存储的日志数据,即老化的日志数据,直至业务c对应的空闲存储空间达到业务c对应的存储空间时停止执行删除操作,或者日志内存空间的已使用存储空间不大于设定存储空间时停止执行删除操作。同时,将业务a产生的新的日志数据写入到预留空间中,由此实现了日志数据的不间断存储。

可选地,本实施例中,每条日志数据所占用的存储空间是固定的,每个业务对应的存储空间为该业务可存储的预分配日志条数与单条日志数据所占用的存储空间的乘积,每个业务的预分配日志条数为基于为该业务配置的日志存储比例确定出的。

具体地,日志内存空间为预先配置的,例如用户系统中可用来写日志数据的日志内存空间为m,网络设备所承载的业务存在n个业务类型,即n种业务。此外为了方便日志数据的管理,可以将日志数据的规格设置成一样的,也即每条日志数据所占用的存储空间是固定的,例如可以将每条日志数据占用内存大小固定为m,从而可以得出整个网络设备能存储的最大日志条数t=m/m,相应地,日志内存空间为基于所述网络设备能存储的最大日志条数与单条日志数据所占用的存储空间的乘积。

在此基础上,可以为每个业务配置其可以写入存储空间的日志数据的日志存储比例,进而可以确定出每个业务的预分配日志条数,而基于预分配日志条数和单条日志数据所占用的存储空间m确定出该业务对应的存储空间。具体来说,为保证各个业务特性都能按需记录日志,用户可以根据各个业务的业务特性为各个业务分配配置日志存储比例(ai%,ai%表示第i个业务的日志存储比例),如为n个业务分别配置的日志存储比例分别为:a1%、a2%、a3%、……an%,则可以根据各个业务特性按照各业务分别配置的日志存储比例得到各个业务的预分配日志条数,记为t*ai%。

在此基础上,可以按照下述过程实施步骤s101:判断该业务对应的存储空间已存储的实际日志条数是否不小于该业务的预分配日志条数;若该业务对应的存储空间已存储的实际日志条数不小于该业务的预分配日志条数,则确定该业务对应的存储空间已满;若该业务对应的存储空间已存储的实际日志条数小于该业务的预分配日志条数,则确定该业务对应的存储空间未满。

具体地,在向每个业务的存储空间写入日志数据时,以业务a为例进行说明,可以统计写入该业务a对应的存储空间的实际日志条数,然后判断该实际日志条数是否不小于为该业务配置的预分配日志条数,如果不小于预分配日志条数,则表明该业务a对应的存储空间已满,不能再继续写入新的日志数据;如果小于预分配日志条数,则表明业务a对应的存储空间未满,还可以继续向业务a的存储空间写入日志数据。

在此基础上,可以按照下述过程执行判断该业务本身产生的日志数据所占用的存储空间是否未达到该业务对应的存储空间,包括:统计该业务本身产生的日志数据的目标日志条数;判断所述目标日志条数是否小于该业务对应的预分配日志条数;若小于,则确定该业务本身产生的日志数据所占用的存储空间未达到该业务对应的存储空间;若不小于,则确定该业务本身产生的日志数据所占用的存储空间达到该业务对应的存储空间。

具体地,以业务a为例进行说明,在向存储空间写入日志数据时,该日志数据属于哪个业务是明确的,因此在业务a产生新的日志数据时,可以统计出业务a本身所产生的日志数据的目标日志条数,然后判断该目标日志条数是否小于业务a对应的预分配日志条数,当小于该业务a对应的预分配日志条数时,则表明业务a本身产生的日志数据所占用的存储空间未达到该业务对应的存储空间;当不小于该业务a对应的预分配日志条数时,则表明业务a本身产生的日志数据所占用的存储空间达到该业务对应的存储空间。

可选地,本实施例中的预留空间为基于预留空间比例确定出的。在此基础上,基于上述任一实施例,可以按照下述过程执行判断所述日志内存空间的已使用存储空间是否达到设定存储空间的步骤:确定所述日志内存空间已存储的日志数据的总日志条数;判断所述总日志条数是否小于指定日志条数,其中,所述指定日志条数为:所述最大日志条数减去所述最大日志条数与所述预留存储比例的乘积;若所述总日志条数不小于所述指定日志条数,则确定所述日志内存空间的已使用存储空间已达到设定存储空间;若所述总日志条数小于所述指定日志条数,则确定所述日志内存空间的已使用存储空间未达到设定存储空间。

具体地,为了充分利用日志内存空间,同时给业务写入、删除日志数据留出一定时间,避免旧日志数据删除不及时而无法写入新的日志数据,本申请提出需要预留一定的灵活空间,即上述预留空间,当某个业务产生的日志数据已到达预分配配条数,也即已写满该业务对的存储空间时,此时若预留空间(灵活空间)以外的存储空间充足,则可以占用其他空闲空间继续记录日志数据。为此,本申请设置了预留空间比例,记为b%,要保证a1%+a2%+…+an%=1-b%,此外b%*m即为预留空间,这部分预留空间可以保证各业务日志数据存储都达到最大规格,且能不间断存储日志数据。

具体地,当业务对应的存储空间写满时,可以确定网络设备当前已存储的日志数据的总日志条数,然后判断总日志条数是否已经达到指定日志条数,该指定日志条数为t*(1-b%),如果总日志条数大于等于t*(1-b%),也即达到该指定日志条数,则确认网络设备的日志内存空间的已使用存储空间已达到设定存储空间,已经实现了各个业务分别对应的存储空间的最大化利用,此时为了能够继续存储新的日志数据,则可以执行步骤s103,即对该业务对应的存储空间的旧的日志数据进行处理,即利用新的日志数据来覆盖旧的日志数据,具体可以查找该业务对应的存储空间中最开始存储的日志数据(最旧的日志数据),这样也就实现了新的日志数据的不间断存储;若总日志条数小于t*(1-b%),也即未达到该指定日志条数,则确认网络设备的日志内存空间的已使用存储空间未达到设定存储空间,则为了实现存储空间的最大化利用,本申请提出执行步骤s104,即筛选出一个具有空闲空间的业务对应的存储空间来存储新产生的日志数据,从而不仅实现了存储空间的最大化利用而且实现了日志数据的不间断存储。

需要说明的是,上述预留空间比例b%为预设的,可以动态调整。一般情况下,在日志数据存储流程启动后,会计算日志的生成速率,然后根据日志的生成速率定期自动调整预留空间比例b%的大小,其中,预留空间比例b%与日志生成速率之间的函数关系为:f(m*b%)=t*v*m,其中,m即为上述日志内存空间的大小,m即为上述单条日志数据所占用的存储空间,v即为日志生成速率,而t表示时间,单位可以为分或者秒等等。

由此,当用网络设备的内存保存日志数据时,日志数据的存储空间有限,核心是保持日志记录功能持续生效,且最大限度的利用内存资源。基于此目的,本实施例提出根据不同业务的特性为各个业务预分配各自的存储空间,当本业务预分配的存储空间写满的时候,需判断在预留空间以外,是否可以占用其它业务对应的且未占用的存储资源来记录本业务的日志数据,当可以占用时则优先使用这部分资源,保证内存空间的最大利用率;如果不能占用其它资源,则从时间最老的日志开始删除本业务的日志数据,通过覆盖的方式写入本业务新的日志数据,以实现日志数据的不间断写入。

可选地,一般情况下,上述任一实施例的实施过程的前提是在网络设备没有外部存储设备时才会利用内存来存储日志数据,当网络设备外接有外部存储设备时,则采用图3所示的流程实施,也即,在任一业务产生新的日志数据之后,在执行上述判断该业务对应的存储空间是否已满(即步骤s102)之前,还包括图3所示的流程:

s301、为所述新的日志数据生成全局日志识别码。

具体地,外部存储设备中包括数据库,该数据库用于存储日志数据;此外,在向数据库写入日志数据时,若当前数据库已写满,则可以新建一个数据库来写入日志数据,但是创建数据库的数量与外部存储设备的存储容量相关。

此外,数据库中的日志按时间进行组织,例如按1天、2天、1周等等。为了方便描述,以按1天为例进行说明,受文件系统限制,每个日志数据的数据库(db)文件大小有限制,每天生成若干个db文件,为保证外部存储设备的存储资源可以在一段时间内均衡利用,而不会被某一天过多的日志数据占满,用户需要配置每天日志数据的存储上限。当外部存储设备的已使用存储空间已经达到用户配置的每天存储限制或者每天的日志条数上限时,为了能够保证持续写入新产生的日志数据,本实施例提出对数据库中的日志数据进行覆盖处理,基于此目的,本申请为产生的每个日志数据配置唯一的全局日志识别码globalid。

s302、根据生成的全局日志识别码向所述外设存储设备写入所述新的日志数据。

具体地,在为每个日志数据分配全局日志识别码globalid后,对于每天的日志数据,需要根据globalid滚动覆盖同一天的多个数据库,具体方法如下:若含有多天的数据库,则根据时间进行删除,删除最老的数据库中的最老的数据,以写入新的日志数据,从而实现日志数据的不间断写入。

可选地,可以按照图4所示的流程执行步骤s302,即:根据生成的全局日志识别码向所述外设存储设备写入所述新的日志数据,包括:

s401、判断当前访问的数据库的已使用空间是否达到存储门限阈值;若达到存储门限阈值,则执行步骤s402;若未达到存储门限阈值,则执行步骤s408。

本步骤中,在利用外部存储设备存储日志数据时,为每条日志数据分配的gloadid用于在多个数据库中唯一确定该条日志数据,globalid根据日志数据接收的时间逐渐递增,使得每条日志数据的globalid在同一天的多个数据库里保持唯一。

此外,在数据库初始化时,需要查询当天的所有数据库,根据globalid来确定找到最后一次写入日志数据时的位置,在接收到新的日志数据时,从确定出的位置处开始写,同样需要找到最早时间写入日志数据的位置,为后续日志数据滚动覆盖做准备,以解决同一天产生多个数据库滚动覆盖日志数据的问题。

具体地,在任一业务产生新的日志数据后,可以先判断新的日志数据所需要写入的数据库(即当前访问的数据库)的已使用空间是否达到存储门限阈值,该存储门限阈值可以为用户配置的最大存储值。如果已经达到,则表明当前访问的数据库已不能再写入新的日志数据。为了能够保证新的日志数据能够写入到外部存储设备以保证日志数据的不间断存储,本实施例提出此时执行步骤s402。而如果未达到存储门限阈值时,则表明该数据库还可以存储新的日志数据,则此时执行步骤s408。

s402、判断在所述当前访问的数据库之前创建的数据库是否存在最小的全局日志识别码,若不存在,则执行步骤s403;若存在,则执行步骤s407。

本步骤中,若当前访问的数据库已达到存储门限阈值时,则为了能够存储新的日志数据,可以判断在当前访问的数据库之前创建的数据库中是否存在最小的globalid,以确认是否能够将新的日志数据写入到之前创建的数据库中。

需要说明的是,上述最小的globalid为上一次执行覆盖操作时记录的被覆盖的日志数据的globalid,可以记为oldglobalid。

s403、查找最近一段时间内所述外设存储设备中所有数据库是否存在目标全局日志识别码;若存在目标全局日志识别码,则执行步骤s404;若不存在目标全局日志识别码,则执行步骤s405。

其中,上述目标全局日志识别码为所有数据库中大于所述最小的全局日志识别码中全局日志识别码的最小值。

本步骤中,若在当前访问的数据库之前创建的数据库中不存在最小的globalid,则表明该数据库不存在上述记录的最小的globalid对应的日志数据,可能已经被删除,则此时就需要遍历外部存储设备中所有的数据库,然后寻找是否存在目标全局识别码的数据库,该目标全局识别码为所有数据库中不小于上述记录的oldglobalid的全局日志识别码的最小值,即目标全局日志识别码为:(globalid>=oldglobalid)的全局识别码的最小值,也即先从每个数据库中查找与oldglobalid值相近但大于oldglobalid的全局日志识别码,这样一来,各个数据库都查找到一个满足上述关系的全局日志识别码,然后查找到的各个全局日志识别码中的最小值记为目标全局日志识别码。

s404、利用所述新的日志数据对所述目标全局日志识别码对应的日志数据进行覆盖。

本步骤中,目标全局日志识别码对应的数据库记为新的日志数据即将写入的目标数据库,然后再利用新的日志数据替换掉该目标数据库中目标全局日志识别码对应的日志数据,由此实现了新的日志数据的不间断写入。

可选地,在将新的日志数据写入到目标数据库后,可以记录新的日志数据的globalid,然后利用被替换的日志数据的globalid(也即上述目标全局日志识别码)来更新记录的oldglobalid。同时,还可以记录新的日志数据在目标数据库中的库日志识别码,记为库日志id,以方便后续日志数据的写入。

s405、确定最近一段时间内写入的日志数据中最小的全局日志识别码对应的日志数据。

本步骤中,如果遍历完所有的数据库未找到目标全局日志识别码,则只需要找到最近一段时间内写入的日志数据中最小的全局日志识别码及该最小的全局日志识别码所在的数据库。例如,在当天产生新的日志数据并在向外部存储设备中写入该新的日志数据时,若执行图4所示的流程时发现步骤s403的判断结果为不存在目标全局日志识别码时,则可以查找数据库中记录的当天最早的日志数据对应的全局日志识别码的所在的数据库及位置。

s406、利用所述新的日志数据对最近一段时间内写入的日志数据中最小的全局日志识别码对应的日志数据进行覆盖。

本步骤中,当查找到当天写入的日志数据中最小的全局日志识别码及对应数据库后,将查找到的数据库中当天写入的日志数据中最小的全局日志识别码对应的日志数据进行删除,然后将新的日志数据写入到该位置处,也即对旧的日志数据进行覆盖处理。从而实现了新的日志数据的写入。

可选地,在执行步骤s405后,可以记录新的日志数据的globalid,然后利用被覆盖的日志数据的globalid来更新oldglobalid,以及还可以记录新的日志数据在本次写入的数据库中的库日志id,通过记录上述信息,以便后续产生新的日志数据后,可以基于该记录进行日志数据的写入

s407、利用所述新的日志数据对所述最小的全局日志识别码对应的日志数据进行覆盖。

本步骤中,若存在最小的globalid,该最小的globalid对应的日志数据则为待覆盖的日志数据,且为老的日志数据,则此时执行步骤s407,利用新的日志数据覆盖该数据库中最小的globalid对应的日志数据,由此实现了新的日志数据的存储。

可选地,在执行步骤s407后,可以记录新的日志数据的globalid,然后利用被覆盖的日志数据的globalid来更新oldglobalid,以及还可以记录新的日志数据在其写入的数据库中的库日志id,通过记录上述信息,以便后续产生新的日志数据后,可以基于该记录进行日志数据的写入。

s408、在当前访问的数据库中写入新产生的日志数据。

本步骤中,若当前访问的数据库的已使用存储空间为达到存储门限阈值时,则表明当前访问的数据库还可以存储日志数据,则此时可以在当前访问的数据库中上一次写入日志数据之后的位置写入新的日志数据。

可选地,在执行步骤s409后,可以记录新的日志数据在当前访问的数据库中的库日志id。

为了更好地理解本实施例,以图5为例进行说明,图5中id为库日志id,globalid为全局日志识别码。图5中列出的数据库为同一天产生的数据库,分别为第一个数据库xxxx-1.db、第二个数据库xxxx-2.db和第三个数据库xxxx-3.db等等,先写第一个数据库,写满后新建第二个数据库,第二个数据库写到globalid为15时,若检查到第二数据库的存储空间已满,则需要对最早的日志数据进行覆盖,就是对第一个数据库的第一条日志数据执行覆盖操作;当日志数据写到globalid为20时,用户调大了存储门限阈值,此时则不需要执行覆盖操作,可以紧接着从第二个数据库继续写入后续接收到的日志数据。由此实现了日志数据的不间断存储。

基于同一发明构思,本申请还提供了与上述日志数据存储方法对应的日志数据存储装置。该日志数据存储装置的实施具体可以参考上述对日志数据存储方法的描述,此处不再一一论述。

参见图6,图6是本申请一示例性实施例提供的一种日志数据存储装置,应用于网络设备中,所述网络设备包括的日志内存空间被划分为预留空间和多个业务分别对应的存储空间;以及所述装置,包括:

第一判断模块601,用于当任一业务产生新的日志数据时,判断该业务对应的存储空间是否已满;

第二判断模块602,用于若所述第一判断模块601的判断结果为该业务对应的存储空间已满,则判断所述日志内存空间的已使用存储空间是否达到设定存储空间,所述设定存储空间的大小为所述日志内存空间与所述预留空间之间的差值;

日志写入模块603,用于若所述第二判断模块602的判断结果为已达到设定存储空间,则利用所述新的日志数据对该业务对应的存储空间中旧的日志数据进行覆盖;若所述第二判断模块602的判断结果为未达到设定存储空间,则向其他业务中具有空闲空间的业务对应的存储空间中写入所述新的日志数据。

可选地,所述日志内存空间为基于所述网络设备能存储的最大日志条数与单条日志数据所占用的存储空间的乘积,所述预留空间为基于预留空间比例确定出的;则

上述第二判断模块602,具体用于确定所述日志内存空间已存储的日志数据的总日志条数;判断所述总日志条数是否小于指定日志条数,其中,所述指定日志条数为:所述最大日志条数减去所述最大日志条数与所述预留存储比例的乘积;若所述总日志条数不小于所述指定日志条数,则确定所述日志内存空间的已使用存储空间已达到设定存储空间;若所述总日志条数小于所述指定日志条数,则确定所述日志内存空间的已使用存储空间未达到设定存储空间。

可选地,本实施例提供的日志数据存储装置,还包括:

第三判断模块(图中未示出),当任一业务产生新的日志数据时,判断该业务本身产生的日志数据所占用的存储空间是否未达到该业务对应的存储空间;

上述第二判断模块602,还用于在上述第三判断模块的判断结果为未达到该业务对应的存储空间,则判断所述日志内存空间的已使用存储空间是否达到设定存储空间;

日志删除模块(图中未示出),用于在上述第二判断模块602的判断结果为达到设定存储空间,则确认占用该业务对应的存储空间的目标业务,并按时间顺序删除所述目标业务对应的存储空间中的日志数据,直至所述目标业务对应的空闲存储空间达到其对应的存储空间为止,或者直至所述日志内存空间的已使用存储空间不大于所述设定存储空间为止;

上述日志写入模块603,还用于将所述新的日志数据写入到所述预留空间中。

可选地,每条日志数据所占用的存储空间是固定的,每个业务对应的存储空间为该业务可存储的预分配日志条数与单条日志数据所占用的存储空间的乘积;每个业务的预分配日志条数为基于为该业务配置的日志存储比例确定出的;则

上述第三判断模块(图中未示出),具体用于统计该业务本身产生的日志数据的目标日志条数;判断所述目标日志条数是否小于该业务对应的预分配日志条数;若小于,则确定该业务本身产生的日志数据所占用的存储空间未达到该业务对应的存储空间;若不小于,则确定该业务本身产生的日志数据所占用的存储空间达到该业务对应的存储空间。

可选地,当所述网络设备外接有外设存储设备时,则所述装置,还包括:

识别码生成模块(图中未示出),用于在任一业务产生新的日志数据之后,在所述第一判断模块执行所述判断该业务对应的存储空间是否已满之前,为所述新的日志数据生成全局日志识别码;

上述日志写入模块603,还用于根据生成的全局日志识别码向所述外设存储设备写入所述新的日志数据。

可选地,上述外设存储设备包括用于存储日志数据的数据库;则

上述日志写入模块603,具体用于判断当前访问的数据库的已使用空间是否达到存储门限阈值;若达到所述存储门限阈值,则判断在所述当前访问的数据库之前创建的数据库是否存在最小的全局日志识别码;若存在最小的全局日志识别码,则利用所述新的日志数据对所述最小的全局日志识别码对应的日志数据进行覆盖;若不存在最小的全局日志识别码,则查找最近一段时间内所述外设存储设备中所有数据库是否存在目标全局日志识别码,所述目标全局日志识别码为所有数据库中大于所述最小的全局日志识别码中全局日志识别码的最小值;若存在所述目标全局日志识别码,则利用所述新的日志数据对所述目标全局日志识别码对应的日志数据进行覆盖;若不存在所述目标全局日志识别码,则确定最近一段时间内写入的日志数据中最小的全局日志识别码对应的日志数据;利用所述新的日志数据对最近一段时间内写入的日志数据中最小的全局日志识别码对应的日志数据进行覆盖。

通过为各个业务分别配置各自对应的存储空间,一般情况下可以保证各个业务的日志数据的分布式存储,此外通过预留出一个预留空间,可以保证各业务的日志数据存储都能达到最大规格;而且本实施例中,当业务对应的存储空间占满时但其他业务对应的存储空间未占满时,可以实现存储空间占满的业务后续产生的新的日志数据存储到其他业务对应的存储空间内,由此实现了日志数据的不间断存储。

基于同一发明构思,本申请实施例提供了一种电子设备,该电子设备可以为上述网络设备。如图7所示,该电子设备包括处理器701和机器可读存储介质702,机器可读存储介质702存储有能够被处理器701执行的计算机程序,处理器701被计算机程序促使执行本申请实施例所提供的日志数据存储方法。需要说明的是,上述机器可读存储介质702包括日志内存空间,只是图中未示出。此外,该电子设备可以外接外部存储设备,以实现日志数据写入到外部存储设备。

上述计算机可读存储介质可以包括ram(randomaccessmemory,随机存取存储器)、ddrsram(doubledataratesynchronousdynamicrandomaccessmemory,双倍速率同步动态随机存储器),也可以包括nvm(non-volatilememory,非易失性存储器),例如至少一个磁盘存储器。可选的,计算机可读存储介质还可以是至少一个位于远离前述处理器的存储装置。

上述处理器可以是通用处理器,包括cpu(centralprocessingunit,中央处理器)、np(networkprocessor,网络处理器)等;还可以是dsp(digitalsignalprocessor,数字信号处理器)、asic(applicationspecificintegratedcircuit,专用集成电路)、fpga(field-programmablegatearray,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

另外,本申请实施例提供了一种机器可读存储介质,机器可读存储介质存储有计算机程序,在被处理器调用和执行时,计算机程序促使处理器执行本申请实施例所提供的日志数据存储方法。

对于电子设备以及机器可读存储介质实施例而言,由于其涉及的方法内容基本相似于前述的方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

上述装置中各个单元/模块的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元/模块可以是或者也可以不是物理上分开的,作为单元/模块显示的部件可以是或者也可以不是物理单元/模块,即可以位于一个地方,或者也可以分布到多个网络单元/模块上。可以根据实际的需要选择其中的部分或者全部单元/模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1