CN103270499B - 日志存储方法及*** - Google Patents

日志存储方法及*** Download PDF

Info

Publication number
CN103270499B
CN103270499B CN201180003108.0A CN201180003108A CN103270499B CN 103270499 B CN103270499 B CN 103270499B CN 201180003108 A CN201180003108 A CN 201180003108A CN 103270499 B CN103270499 B CN 103270499B
Authority
CN
China
Prior art keywords
key
journal file
log
disk system
key assignments
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201180003108.0A
Other languages
English (en)
Other versions
CN103270499A (zh
Inventor
周训淼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong Gaohang Intellectual Property Operation Co ltd
Yuying School Yongnian District Handan City
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN103270499A publication Critical patent/CN103270499A/zh
Application granted granted Critical
Publication of CN103270499B publication Critical patent/CN103270499B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9017Indexing; Data structures therefor; Storage structures using directory or table look-up

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

一种日志存储方法及***,应用于信息技术领域。一种日志存储方法包括:获取日志文件的写请求,生成写请求对应的日志序号;将写请求所请求写入的日志文件所属日志对象的标识信息与日志序号作为键,并通过键计算得到写请求所请求写入的日志文件的存储地址;根据日志文件的存储地址将写请求所请求写入的日志文件储存到磁盘***中。实现了日志文件在Key‑Value存储***中的存储。

Description

日志存储方法及***
技术领域
本发明涉及信息技术领域,特别涉及日志存储方法及***。
背景技术
为了保证故障恢复,在通信设备中都会包括日志存储***,用于在进行通信设备的操作时,根据具体的操作生成日志文件进行储存,这样在通信设备故障时就可以根据记录的日志文件来实现故障恢复。传统的日志存储***包括磁盘***和文件操作***,文件操作***可以对磁盘***进行操作来储存或更新或删除日志文件,且在同一时间一个日志文件只能被文件操作***中的一个处理进程来进行处理,即当一个处理进程正处理一个日志文件时,该日志文件需要被加锁来防止其它处理进程处理该日志文件。
上述现有的日志存储***中在写入日志文件到磁盘***时,是按照日志对象来储存日志文件的,比如将每个用户标识对应的日志记录成相应的一个日志文件,这样在对一个日志对象对应的日志文件进行读取或删除操作时,只能由一个处理进程进行处理,使得对日志文件的处理速度受到日志存储方式的限制。
发明内容
本发明实施例提供日志存储方法及***,提高对日志文件的处理速度,从而提升日志存储***的性能。
本发明实施例一方面提供一种日志存储方法,包括:
获取日志文件的写请求,生成所述写请求对应的日志序号;
将所述写请求所请求写入的日志文件所属日志对象的标识信息与所述日志序号作为键,并通过所述键计算得到所述写请求所请求写入的日志文件的存储地址;
根据所述日志文件的存储地址将所述写请求所请求写入的日志文件储存到磁盘***中。
本发明实施例一方面提供一种日志存储***,包括:
序号生成单元,用于获取日志文件的写请求,生成所述写请求对应的日志序号;
地址获取单元,用于将所述写请求所请求写入的日志文件所属日志对象的标识信息与所述序号生成单元生成的日志序号作为键,并通过所述键计算得到所述写请求所请求写入的日志文件的存储地址;
写入单元,用于根据所述日志获取单元获取的日志文件的存储地址将所述写请求所请求写入的日志文件储存到磁盘***中;
磁盘***,用于在键对应的存储地址内储存日志文件。
本实施例的日志存储方法中,通过Key-Value存储***来储存日志文件,具体地,当Key-Value存储***接收到获取日志文件的写请求,生成写请求对应的日志序号,并将写请求所请求写入的日志文件所属日志对象的标识信息与日志序号作为键,通过键计算得到写请求所请求写入的日志文件的存储地址,最后根据日志文件的存储地址将写请求所请求写入的日志文件储存到磁盘***中。和现有技术中通过传统的存储***来储存日志文件,即一个日志对象只对应一个日志文件相比,本发明实施例中通过Key-Value存储***来储存日志文件,即将日志对象标识与动态生成的日志序号作为键,使得一个日志对象对应的多个日志文件可以储存到不同的存储地址,这样可以通过多个处理进程来处理一个日志对象对应的日志文件,提高对日志文件的处理速度,从而提升日志存储***的性能。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种日志存储方法的流程图;
图2是本发明实施例中缓存的日志文件信息与储存的日志文件之间的关系结构示意图;
图3是本发明实施例中对磁盘***中储存的日志文件信息的更新方法流程图;
图4是本发明实施例中一种日志操作方法的流程图;
图5是本发明实施例提供的一种日志存储***的结构示意图;
图6是本发明实施例提供的另一种日志存储***的结构示意图;
图7是本发明实施例提供的另一种日志存储***的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供一种日志存储方法,主要是通过键-数值(Key-Value)存储***来储存日志文件,本实施例的方法是Key-Value存储***(即日志存储***)所执行的方法,流程图如图1所示,包括:
步骤101,获取日志文件的写请求,生成写请求对应的日志序号。
可以理解,Key-Value存储***是用来储存数据即Value的***,每个Value(本实施例中为一个写请求对应的日志文件)的存储地址是通过Key和一定的策略计算得到,可以同时对多个Value进行操作而互不影响,具有高并发高性能优势。
本实施例中采用Key-Value存储***来对日志文件进行储存,且本实施例的方法流程可以是用户通过包括Key-Value存储***的设备提供的界面来触发,也可以在对包括Key-Value存储***的设备进行操作时,触发对操作过程中生成的日志文件进行的储存。
当Key-Value存储***获取了日志文件的写请求后,可以按照递增(或递减)的方式生成日志序号,如果以递增(或递减)的方式来生成日志序号,则为当前写请求分配的日志序号即为:在为上次获取的写请求生成的日志序号的基础上加(或减)m,这里m为正数。Key-Value存储***也可以根据写请求所请求写入的日志文件所属日志对象来生成日志序号,比如写请求是请求写入用户a对应的日志文件,则当前生成的日志序号即为:在为上次获取的关于用户a的写请求(日志文件的写请求)生成的日志序号基础上加(或减)m。
步骤102,将写请求所请求写入的日志文件所属日志对象的标识信息与日志序号作为键,并通过键计算得到写请求所请求写入的日志文件的存储地址。
在Key-Value存储***中用日志对象来区分不同用户(或不同类型,或不同应用等)的日志文件,且可以储存至少一个日志对象的日志文件,这里日志文件所属日志对象的标识信息是能唯一标识一个日志对象的信息,比如通过用户名和应用名来标识一个日志对象,则数据库(Data Base,DB)中某一用户USER的一类比如域名(DOMAIN)类型对应的所有日志文件都可以用“DB_USER_DOMAIN”来标识,而DB_USER_DOMAIN即为一个日志对象的标识信息。
本发明实施例中以日志对象和步骤101中生成的日志序号结合起来作为键,其中该日志序号可以认为是键值,在通过键计算存储地址时,Key-Value存储***可以将键通过哈希散列方法进行计算,还可以通过其它计算进行计算。
步骤103,根据日志文件的存储地址将写请求所请求写入的日志文件储存到Key-Value存储***的磁盘***中。
可见,本实施例的日志存储方法中,通过Key-Value存储***来储存日志文件,具体地,当Key-Value存储***接收到获取日志文件的写请求,生成写请求对应的日志序号,并将写请求所请求写入的日志文件所属日志对象的标识信息与日志序号作为键,通过键计算得到写请求所请求写入的日志文件的存储地址,最后根据日志文件的存储地址将写请求所请求写入的日志文件储存到磁盘***中。和现有技术中通过传统的存储***来储存日志文件,即一个日志对象只对应一个日志文件相比,本发明实施例中通过Key-Value存储***来储存日志文件,即将日志对象标识与动态生成的日志序号作为键,使得一个日志对象对应的多个日志文件可以储存到不同的存储地址,这样可以通过多个处理进程来处理一个日志对象对应的日志文件,提高对日志文件的处理速度,从而提升日志存储***的性能。
在一个具体的实施例中,为了对磁盘***中的日志文件的方便管理,Key-Value存储***除了执行上述步骤101到103外,还可以先在内存中缓存磁盘***中储存的日志对象对应的日志文件信息,该日志文件信息可以包括日志对象的标识信息、日志对象对应的日志文件的最大键值和最小键值(即上述生成的日志序号),并将缓存的日志对象对应的日志文件信息周期性地储存到Key-Value存储***的磁盘***中,即日志文件信息的持久化过程。
由于本发明实施例中是将日志对象的标识信息与分配的日志序号结合起来作为键,则该日志序号则可以认为是对应的键值,如果在上述步骤101中为写请求生成日志序号时以递增方式进行生成,随着Key-Value存储***不断地获取日志文件的写请求,一个日志对象对应的日志文件的最大键值是不断变化的,且该最大键值可以指示Key-Value存储***的磁盘***中下一次待***日志文件的位置。为了使得Key-Value存储***有足够的空间来储存新的日志文件,当***中储存日志文件对应的日志文件的储存时间超过一定阈值,或该日志文件对应保护的业务逻辑或事务已经执行完成,就会删除该日志文件,就会使得一个日志对象对应的日志文件的最小键值随着储存时间的变化而变化,则该最小键值可以指示Key-Value存储***的磁盘***中下一次待删除日志文件的位置。其中,如果将某一个日志对象对应的日志文件储存到磁盘***后,可以根据增加的日志文件对应的存储地址更新该日志对象对应的最大键值,即更新为该增加的日志文件的存储地址对应的键值;如果删除磁盘***中某一个日志对象对应的日志文件时,可以根据删除的日志文件对应的存储地址更新该日志对象对应的最小键值,即更新为大于该删除的日志文件的存储地址对应键值的最小键值。
而如果为写请求生成日志序号时以递减方式生成,随着Key-Value存储***不断地获取日志文件的写请求,一个日志对象对应的日志文件的最小键值是不断变化的,且该最小键值可以指示Key-Value存储***的磁盘***中下一次待***日志文件的位置。且一个日志对象对应的日志文件的最大键值随着储存时间的变化而变化,则该最大键值可以指示Key-Value存储***的磁盘***中下一次待删除日志文件的位置。其中,如果将某一个日志对象对应的日志文件储存到磁盘***后,可以根据增加的日志文件对应的存储地址更新该日志对象对应的最小键值,即更新为该增加的日志文件的存储地址对应的键值;如果删除磁盘***中某一个日志对象对应的日志文件时,可以根据删除的日志文件对应的存储地址更新该日志对象对应的最大键值,即更新为小于该删除的日志文件的存储地址对应键值的最大键值。
且本实施例中,为了管理磁盘***储存的日志文件,还需要在磁盘***中储存每个日志对象对应的日志文件信息,由于其中包括的最大键值和最小键值是随着Key-Value存储***不断接收写请求而不断变化,这就需要Key-Value存储***在接收到每个写请求时,更新相应日志对象对应的日志文件信息。本实施例中将日志文件信息先进行缓存,这样在每次更新日志文件信息时,可以不用去访问磁盘***,为直接在缓存中进行更新,提高了更新速度;而为了增强日志文件信息的可靠性,减少故障恢复时的工作量,需要将缓存的日志文件信息周期性(比如以一定的时间间隔或以一定的频率间隔)地储存到磁盘***中;且可以将日志文件信息在磁盘***中储存成日志元数据(Log Meta Data)。
例如图2所示,在内存中缓存着日志对象的标识、最大键值n和最小键值1等日志文件信息,则在磁盘***中n个键对应的存储地址内分别储存着该日志对象的日志文件1到n,其中日志文件1到n对应的键为该日志对象的标识与日志序号的结合,而日志序号即为从最小键值1到最大键值n。
参考图3所示,在另一具体的实施例中,Key-Value存储***将每个日志对象对应的日志文件信息储存到磁盘***后,可以按照如下步骤来实现故障恢复:
步骤104,从磁盘***中读取第一日志对象对应的用于指示磁盘***中待***日志的位置的第一键值。
如果包括本实施例中Key-Value存储***的设备中应用程序等发生故障时,比如因断电或者其它***底层的原因导致故障或设备停机,则在该故障的应用程序在下次重启或其业务被其他节点接管时,可以从该Key-Value存储***储存的日志对象对应的日志文件信息中读取第一键值。
步骤105,在磁盘***中顺序读取大于或小于第一键值的一轮N个键值所对应的存储地址内储存的数据,其中,N为正整数。
可以理解,如果在步骤101生成日志序号时是按照递增的方式生成的,则这里需要根据键值的顺序,依次读取大于第一键值的N个键值对应存储地址内储存的数据,比如第一键值为0,则读取键值1到N所对应的数据;如果生成日志序号时是按照递减的方式生成的,则依次读取小于第一键值的N个键值对应存储地址内储存的数据,其中N可以根据实际情况预置在磁盘***中,一般为10或100等。且若读取的一轮N个键值对应存储地址内储存的数据都为空,则认为在故障发生时没有日志文件储存到存储***中,可以不用更新***中储存的该第一键值,结束流程;若读取的一轮N个键值对应的存储地址中,至少有一个存储地址内储存的数据非空,则认为在故障发生时,***中正并发地写入日志文件,但是并不是先开始写的日志文件最先写入磁盘***中,而有些后开始写的日志文件最先写入磁盘***中,则需要更新***中储存的第一键值,并执行步骤106。
步骤106,顺序读取大于或小于N个键值的另外至少一轮的N个键值所对应的存储地址内储存的数据,直到当前一轮的N个键值对应存储地址内储存的数据都为空。
如果在步骤101生成日志序号时是按照递增的方式生成的,则这里需要根据键值的顺序,依次读取大于上述N个键值对应存储地址内储存的数据,比如第一键值为0,在步骤105中读取了一轮键值1到N所对应的数据,则在该步骤中读取至少另一轮键值N+1到2N所对应的数据,如果另一轮的N个键值对应的数据都为空,则执行步骤107,如果至少有一个存储地址内储存的数据非空,则继续执行步骤106。如果在步骤101生成日志序号时是按照递减的方式生成的,则本步骤中依次读取小于上述N个键值对应存储地址内储存的数据。
步骤107,用当前一轮的前一轮中读取的N个键值对应的存储地址中,最近读取的一个非空数据的存储地址对应的键值更新第一日志对象对应的第一键值。
比如当前一轮键值2N+1到3N对应的存储地址内储存的数据都为空,而前一轮键值N+1到2N对应的存储地址中,键值N+7对应的存储地址内储存的数据非空,且从该存储地址起,之后的存储地址内储存的数据都为空,则在更新第一键值时更新为N+7。
可见,如果包括本实施例中Key-Value存储***的设备中应用程序等发生故障,导致缓存中的日志文件信息没有及时储存到磁盘***中,可以通过磁盘***中当前储存的日志文件及日志文件的存储地址对应的键值来更新日志文件信息。
在其它的具体实施例中,Key-Value存储***当在执行上述步骤103失败时,可以将步骤102中计算的存储地址对应键的信息(比如键值,和键中包含的日志对象的标识等信息)储存到磁盘***内操作失败的键列表中。
需要说明的是,在存储日志文件的过程中,不一定是由于***底层导致缓存中的日志文件信息没有储存到磁盘***中,也可能由于需要储存的日志文件太大超时等原因导致日志文件没有储存到磁盘***中,而没有更新日志文件信息,则在故障恢复的过程中:
当在上述步骤104中读取了第一键值后,可以先不执行步骤105到107而是先查找磁盘***中操作失败的键列表中是否储存有与第一日志对象对应的,且大于或小于该第一键值的键值,如果不是,说明并不是在日志文件的储存时发生的故障,继续执行上述步骤105到107;如果是,说明在日志文件的储存时发生故障,可以更新该第一键值为该查找的键值,且在更新完键值后,可以以更新后的第一键值来执行步骤105到107。且Key-Value存储***除了可以更新能指示磁盘***中待***日志文件的位置的第一键值,还可以读取指示磁盘***中待删除日志文件的位置的第三键值,并查找磁盘***中操作失败的键列表中是否储存与第一日志对象对应的,且小于或大于该第三键值的键值,如果是,更新该第三键值为查找的键值,如果不是,则不会更新第三键值。
其中如果在步骤101生成日志序号时是以递增方式生成,则这里需要查找操作失败的键列表中是否储存大于该第一键值的键值;而需要查找操作失败的键列表中是否储存小于该第三键值的键值。如果在步骤101生成日志序号时是以递减方式生成,则这里需要查找操作失败的键列表中是否储存小于该第一键值的键值;而需要查找操作失败的键列表中是否储存大于该第三键值的键值。
可见,本实施例中可以通过储存在磁盘***中的日志文件、日志文件的存储地址对应的键值及操作失败的键列表来更新日志文件信息。
参考图4所示,Key-Value存储***在执行完上述步骤102到103中储存日志文件后,可以按照如下的步骤来对Key-Value存储***的磁盘***中的日志文件进行操作,比如读取或删除等操作:
步骤201,获取日志文件的操作请求,在操作请求中包括第二日志对象的标识信息和第二键值。
本实施例中对日志文件的操作流程可以是通过包括Key-Value存储***的设备提供的界面来触发,其中日志文件的操作请求可以是日志文件的读取或删除请求,而操作请求中包括的第二键值可以是在该第二日志对象对应的日志文件进行储存时***为之生成的日志序号。
步骤202,将第二日志对应的标识信息和第二键值作为键,计算得到操作请求所请求操作的日志文件的存储地址。
在进行计算存储地址时,可以按照储存该日志文件过程中进行计算存储地址时所使用的方法一致,这样才能查找到相应的日志文件。
步骤203,根据操作请求对请求操作的存储地址内储存的日志文件进行相应操作。
其中,如果操作请求是删除请求,则可以将该存储地址内储存的日志文件删除,且可以更新***中储存的日志文件信息。
可见,本实施例中如果需要对日志文件进行操作时,需要在操作请求中携带所要操作的日志对象的标识和储存日志文件的存储地址对应键的键值,这样才能找到相应的日志文件并进行相应的操作。
需要说明的是,上述提到的第一键值、第二键值和第三键值并不指示顺序关系,而是为了说明不同的键值。且第一日志对象和第二日志对象也不指示顺序关系,而是为了说明不同的日志对象。
本发明实施例还提供一种日志存储***,即为Key-Value存储***,结构示意图如图5所示,包括:
序号生成单元10,用于获取日志文件的写请求,生成所述写请求对应的日志序号,可以以递增(或递减)的方式来生成日志序号;
地址获取单元11,用于将所述写请求所请求写入的日志文件所属日志对象的标识信息与所述序号生成单元10生成的日志序号作为键,并通过所述键计算得到所述写请求所请求写入的日志文件的存储地址,具体地,可以将键通过哈希散列方法进行计算,还可以通过其它计算进行计算;
写入单元12,用于根据所述日志获取单元获取的日志文件的存储地址将所述写请求所请求写入的日志文件储存到磁盘***13中;
磁盘***13,用于在键对应的存储地址内储存日志文件。
本实施例的日志存储***(即Key-Value存储***)中,当序号生成单元10接收到获取日志文件的写请求,生成写请求对应的日志序号,地址获取单元11将写请求所请求写入的日志文件所属日志对象的标识信息与日志序号作为键,通过键计算得到写请求所请求写入的日志文件的存储地址,最后写入单元12根据日志文件的存储地址将写请求所请求写入的日志文件储存到磁盘***13中。和现有技术中通过传统的存储***来储存日志文件,即一个日志对象只对应一个日志文件相比,本发明实施例中通过Key-Value存储***来储存日志文件,即将日志对象与动态生成的日志序号作为键,使得一个日志对象对应的多个日志文件可以储存到不同的存储地址,这样可以通过多个处理进程来处理一个日志对象对应的日志文件,提高对日志文件的处理速度,从而提升日志存储***的性能。
参考图6所示,在一个具体的实施例中,日志存储***除了可以包括如图5所示的结构外,还可以包括:缓存单元14、储存单元15、键值读取单元16、数据读取单元17、循环读取单元18、更新单元19、列表储存单元20和查找单元21,其中:
缓存单元14,用于缓存所述磁盘***13中日志对象对应的日志文件信息,所述日志文件信息包括日志对象的标识信息、所述日志对象对应的日志文件的最大键值和最小键值(即序号生成单元10生成的日志序号),所述最大键值或最小键值用于指示所述磁盘***13中待***日志文件的位置。
可以理解,如果序号生成单元10为写请求生成日志序号时以递增方式进行生成,则缓存单元14缓存的最大键值可以指示日志存储***的磁盘***13中下一次待***日志文件的位置,而最小键值可以指示日志存储***的磁盘***13中下一次待删除日志文件的位置。如果序号生成单元10为写请求生成日志序号时以递减方式进行生成,则缓存单元14缓存的最小键值可以指示日志存储***的磁盘***13中下一次待***日志文件的位置,而最大键值可以指示日志存储***的磁盘***13中下一次待删除日志文件的位置。
储存单元15,用于将缓存单元14缓存的所述日志对象对应的日志文件信息周期性地(比如以一定的时间间隔或以一定的频率间隔)储存到所述磁盘***中,可以将日志文件信息储存成日志元数据。
键值读取单元16,用于从所述磁盘***13中读取第一日志对象对应的用于指示磁盘***中待***日志的位置的第一键值。
数据读取单元17,用于在所述磁盘***13中顺序读取大于或小于所述键值读取单元16读取的第一键值的一轮N个键值所对应的存储地址内储存的数据,所述N为正整数。如果序号生成单元10是以递增的方式生成日志序号的,则数据读取单元17读取大于第一键值的N个键值对应的数据,如果序号生成单元10是以递减发的方式生成的,则数据读取单元17读取小于第一键值的N各键值对应的数据。
其中如果序号生成单元10为写请求生成日志序号时以递增方式进行生成,则数据读取单元17在磁盘***13中顺序读取大于键值读取单元16读取的第一键值的一轮N个键值所对应的存储地址内储存的数据;如果序号生成单元10为写请求生成日志序号时以递减方式进行生成,则数据读取单元17在磁盘***13中顺序读取小于键值读取单元16读取的第一键值的一轮N个键值所对应的存储地址内储存的数据。
循环读取单元18,用于若所述数据读取单元17读取的所述一轮的N个键值对应存储地址中,至少有一个存储地址内储存的数据非空,顺序读取大于或小于所述N个键值的另外至少一轮的N个键值所对应的存储地址内储存的数据。
其中如果序号生成单元10为写请求生成日志序号时以递增方式进行生成,则循环读取单元18顺序读取大于N个键值的另外至少一轮的N个键值所对应的存储地址内储存的数据;如果序号生成单元10为写请求生成日志序号时以递减方式进行生成,则循环读取单元18顺序读取小于N个键值的另外至少一轮的N个键值所对应的存储地址内储存的数据。
更新单元19,用于所述循环读取单元18读取的当前一轮的N个键值对应存储地址内储存的数据都为空,用所述当前一轮的前一轮中读取的N个键值对应的存储地址中,最近读取的一个非空数据的存储地址对应的键值更新所述第一日志对象对应的第一键值。
列表储存单元20,用于若所述写入单元12根据所述日志文件的存储地址将所述写请求所请求写入的日志文件储存到磁盘***13失败,将所述计算的存储地址对应键的信息储存到磁盘***13中操作失败的键列表中。
查找单元21,用于查找所述磁盘***13中操作失败的键列表中是否储存与所述第一日志对象对应的,且大于或小于所述键值读取单元16读取的第一键值的键值,如果不是,通知所述数据读取单元17读取一轮N个键值所对应的存储地址内储存的数据。
其中如果序号生成单元10为写请求生成日志序号时以递增方式进行生成,则查找单元21查找操作失败的键列表中大于所述键值读取单元16读取的第一键值的键值;如果序号生成单元10为写请求生成日志序号时以递减方式进行生成,则查找单元21查找操作失败的键列表中小于所述键值读取单元16读取的第一键值的键值。
本实施例中,通过序号生成单元10、地址获取单元11和写入单元12可以将日志文件写入到磁盘***13中,如果写入单元12的写入操作失败时,可以通过列表储存单元21将失败的日志文件对应键的信息储存到操作失败的键列表中。
且本实施例中还可以通过缓存单元14将日志文件信息先进行缓存,这样在每次更新日志文件信息时,可以不用去访问磁盘***13,为直接在缓存中进行更新,提高了更新速度;而为了进行故障恢复,需要储存单元15将缓存的日志文件信息周期性地储存到磁盘***13中。
如果该日志存储***中的应用程序发生故障导致缓存单元14缓存的日志文件信息没有及时储存到磁盘***13中,则可以通过键值读取单元16、数据读取单元17、循环读取单元18和更新单元19来更新磁盘***中储存的日志文件信息。其中如果数据读取单元17读取的一轮N个键值对应存储地址内储存的数据都为空,在可以不用更新第一键值。且在键值读取单元16读取第一键值后,查找单元20可以查找操作失败的键列表中是否储存有大于或小于第一键值的键值,如果有,则可以通知更新单元19将第一键值更新为该查找的键值,如果没有,则继续通过数据读取单元17、循环读取单元18和更新单元19来更新第一键值。且查找单元20还可以查找磁盘***13中操作失败的键列表中是否储存与第一日志对象对应的,且小于或大于该第三键值的键值,如果是,更新该第三键值为查找的键值,如果不是,则不会更新第三键值,该第三键值能指示磁盘***13中待删除日志文件的位置。
需要说明的是,上述实施例中的***中,如果序号生成单元10为写请求生成日志序号时以递增方式进行生成,更新单元19还可以用于当将某一个日志对象对应的日志文件储存到磁盘***后,根据增加的日志文件对应的存储地址更新该日志对象对应的最大键值,即更新为该增加的日志文件的存储地址对应的键值;该更新单元19还用于当删除磁盘***中某一个日志对象对应的日志文件时,可以根据删除的日志文件对应的存储地址更新该日志对象对应的最小键值,即更新为大于该删除的日志文件的存储地址对应键值的最小键值。
如果序号生成单元10为写请求生成日志序号时以递减方式进行生成,更新单元19还可以用于当将某一个日志对象对应的日志文件储存到磁盘***后,根据增加的日志文件对应的存储地址更新该日志对象对应的最小键值,即更新为该增加的日志文件的存储地址对应的键值;该更新单元19还用于当删除磁盘***中某一个日志对象对应的日志文件时,根据删除的日志文件对应的存储地址更新该日志对象对应的最大键值,即更新为小于该删除的日志文件的存储地址对应键值的最大键值。
参考图7所示,在其它的具体实施例中,日志存储***除了可以包括如图5所示的结构外,还可以包括:操作请求获取单元30、操作地址获取单元31和操作单元32,其中:
操作请求获取单元30,用于获取日志文件的操作请求(比如读取或删除请求),所述操作请求中包括第二日志对象的标识信息和第二键值,其中第二键值可以是在该第二日志对象对应的日志文件进行储存时序号生成单元10为之生成的日志序号。
操作地址获取单元31,用于将所述操作请求获取单元30获取的操作请求中,第二日志对应的标识信息和第二键值作为键,计算得到所述操作请求所请求操作的日志文件的存储地址;操作地址获取单元31在进行计算存储地址时,可以按照储存该日志文件过程中地址获取单元11进行计算存储地址时所使用的方法一致,这样才能查找到相应的日志文件。
操作单元32,用于根据所述操作请求获取单元31获取的操作请求对所述请求操作的存储地址内储存的日志文件进行相应操作。
如果操作请求是删除请求,则操作单元32可以将该存储地址内储存的日志文件删除,且可以更新***中储存的日志文件信息。
本实施例中如果需要对日志文件进行操作时,需要在操作请求中携带所要操作的日志对象的标识和储存日志文件的存储地址对应键的键值,这样才能找到相应的日志文件并进行相应的操作。
可以理解,上述图5到图7所示的日志存储***中的各个单元之间进行的日志文件的存储方法可以如图1和图3所示,且日志文件的操作方法可以如图4所示,在此不进行赘述。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。
以上对本发明实施例所提供的日志存储方法及***,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (18)

1.一种日志存储方法,其特征在于,包括:
获取日志文件的写请求,生成所述写请求对应的日志序号;
将所述写请求所请求写入的日志文件所属日志对象的标识信息与所述日志序号作为键,并通过所述键计算得到所述写请求所请求写入的日志文件的存储地址;
根据所述日志文件的存储地址将所述写请求所请求写入的日志文件储存到磁盘***中;
所述方法还包括:
缓存所述磁盘***中日志对象对应的日志文件信息,所述日志文件信息包括日志对象的标识信息、所述日志对象对应的日志文件的最大键值和最小键值;
将缓存的所述日志对象对应的日志文件信息周期性地储存到所述磁盘***中;
若所述生成所述写请求对应的日志序号时是以递增方式生成,所述最大键值用于指示所述磁盘***中待***日志文件的位置,所述方法还包括:
从所述磁盘***中读取第一日志对象对应的用于指示磁盘***中待***日志的位置的第一键值;
在所述磁盘***中顺序读取大于所述第一键值的一轮N个键值所对应的存储地址内储存的数据,所述N为正整数;
若读取的所述一轮的N个键值对应存储地址中,至少有一个存储地址内储存的数据非空,顺序读取大于所述N个键值的另外至少一轮的N个键值所对应的存储地址内储存的数据,直到当前一轮的N个键值对应存储地址内储存的数据都为空;
用所述当前一轮的前一轮中读取的N个键值对应的存储地址中,最近读取的一个非空数据的存储地址对应的键值更新所述第一日志对象对应的第一键值。
2.如权利要求1所述的方法,其特征在于,所述最小键值用于指示所述磁盘***中待删除日志文件的位置;
所述方法还包括:若删除所述磁盘***中储存的某一日志对象对应的日志文件,根据所述删除的日志文件对应的存储地址更新所述某一日志对象对应的最小键值。
3.如权利要求1所述的方法,其特征在于,若所述生成所述写请求对应的日志序号时是以递减方式生成,所述最小键值用于指示所述磁盘***中待***日志文件的位置;
所述方法还包括:
从所述磁盘***中读取第一日志对象对应的用于指示磁盘***中待***日志的位置的第一键值;
在所述磁盘***中顺序读取小于所述第一键值的一轮N个键值所对应的存储地址内储存的数据,所述N为正整数;
若读取的所述一轮的N个键值对应存储地址中,至少有一个存储地址内储存的数据非空,顺序读取小于所述N个键值的另外至少一轮的N个键值所对应的存储地址内储存的数据,直到当前一轮的N个键值对应存储地址内储存的数据都为空;
用所述当前一轮的前一轮中读取的N个键值对应的存储地址中,最近读取的一个非空数据的存储地址对应的键值更新所述第一日志对象对应的第一键值。
4.如权利要求3所述的方法,其特征在于,若所述生成所述写请求对应的日志序号时是以递减方式生成,所述最大键值用于指示所述磁盘***中待删除日志文件的位置;
所述方法还包括:若删除所述磁盘***中储存的某一日志对象对应的日志文件,根据所述删除的日志文件对应的存储地址更新所述某一日志对象对应的最大键值。
5.如权利要求1或2所述的方法,其特征在于,还包括:
若所述根据所述日志文件的存储地址将所述写请求所请求写入的日志文件储存到磁盘***失败,将所述计算的存储地址对应键的信息储存到磁盘***中操作失败的键列表中。
6.如权利要求5所述的方法,其特征在于,
若所述生成所述写请求对应的日志序号时是以递增方式生成,所述从所述磁盘***中读取第一日志对象对应的用于指示磁盘***中待***日志的位置的第一键值,之后还包括:
查找所述磁盘***中操作失败的键列表中是否储存与所述第一日志对象对应的,且大于所述第一键值的键值,如果不是,执行所述读取一轮N个键值所对应的存储地址内储存的数据的步骤。
7.如权利要求3或4所述的方法,其特征在于,还包括:
若所述根据所述日志文件的存储地址将所述写请求所请求写入的日志文件储存到磁盘***失败,将所述计算的存储地址对应键的信息储存到磁盘***中操作失败的键列表中。
8.如权利要求7所述的方法,其特征在于,
若所述生成所述写请求对应的日志序号时是以递减方式生成,所述从所述磁盘***中读取第一日志对象对应的用于指示磁盘***中待***日志的位置的第一键值,之后还包括:
查找所述磁盘***中操作失败的键列表中是否储存与所述第一日志对象对应的,且小于所述第一键值的键值,如果不是,执行所述读取一轮N个键值所对应的存储地址内储存的数据的步骤。
9.如权利要求1至4、6及8任一项所述的方法,其特征在于,还包括:
获取日志文件的操作请求,所述操作请求中包括第二日志对象的标识信息和第二键值;
将所述第二日志对应的标识信息和第二键值作为键,计算得到所述操作请求所请求操作的日志文件的存储地址;
根据所述操作请求对所述请求操作的存储地址内储存的日志文件进行相应操作。
10.一种日志存储***,其特征在于,包括:
序号生成单元,用于获取日志文件的写请求,生成所述写请求对应的日志序号;
地址获取单元,用于将所述写请求所请求写入的日志文件所属日志对象的标识信息与所述序号生成单元生成的日志序号作为键,并通过所述键计算得到所述写请求所请求写入的日志文件的存储地址;
写入单元,用于根据所述日志获取单元获取的日志文件的存储地址将所述写请求所请求写入的日志文件储存到磁盘***中;
磁盘***,用于在键对应的存储地址内储存日志文件;
所述的***还包括:
缓存单元,用于缓存所述磁盘***中日志对象对应的日志文件信息,所述日志文件信息包括日志对象的标识信息、所述日志对象对应的日志文件的最大键值和最小键值;
储存单元,用于将所述缓存单元缓存的所述日志对象对应的日志文件信息周期性地储存到所述磁盘***中;
所述序号生成单元生成所述写请求对应的日志序号时以递增方式生成,所述缓存单元缓存的最大键值用于指示所述磁盘***中待***日志文件的位置;
所述***还包括:
键值读取单元,用于从所述磁盘***中读取第一日志对象对应的用于指示磁盘***中待***日志的位置的第一键值;
数据读取单元,用于在所述磁盘***中顺序读取大于所述第一键值的一轮N个键值所对应的存储地址内储存的数据,所述N为正整数;
循环读取单元,用于若所述数据读取单元读取的所述一轮的N个键值对应存储地址中,至少有一个存储地址内储存的数据非空,顺序读取大于所述N个键值的另外至少一轮的N个键值所对应的存储地址内储存的数据;
更新单元,用于所述循环读取单元读取的当前一轮的N个键值对应存储地址内储存的数据都为空,用所述当前一轮的前一轮中读取的N个键值对应的存储地址中,最近读取的一个非空数据的存储地址对应的键值更新所述第一日志对象对应的第一键值。
11.如权利要求10所述的***,其特征在于,
所述缓存单元缓存的最小键值用于指示所述磁盘***中待删除日志文件的位置;
更新单元,还用于当删除所述磁盘***中储存的某一日志对象对应的日志文件,根据所述删除的日志文件对应的存储地址更新所述某一日志对象对应的最小键值。
12.如权利要求11所述的***,其特征在于,若所述序号生成单元生成所述写请求对应的日志序号时以递减方式生成,所述缓存单元缓存的最小键值用于指示所述磁盘***中待***日志文件的位置;
所述数据读取单元,还用于在所述磁盘***中顺序读取小于所述第一键值的一轮N个键值所对应的存储地址内储存的数据,所述N为正整数;
所述循环读取单元,还用于若所述数据读取单元读取的所述一轮的N个键值对应存储地址中,至少有一个存储地址内储存的数据非空,顺序读取小于所述N个键值的另外至少一轮的N个键值所对应的存储地址内储存的数据。
13.如权利要求12所述的***,其特征在于,若所述生成所述写请求对应的日志序号时是以递减方式生成,所述缓存单元缓存的最大键值用于指示所述磁盘***中待删除日志文件的位置;
更新单元,还用于当删除所述磁盘***中储存的某一日志对象对应的日志文件,根据所述删除的日志文件对应的存储地址更新所述某一日志对象对应的最大键值。
14.如权利要求11所述的***,其特征在于,还包括:
列表储存单元,用于若所述写入单元根据所述日志文件的存储地址将所述写请求所请求写入的日志文件储存到磁盘***失败,将所述计算的存储地址对应键的信息储存到磁盘***中操作失败的键列表中。
15.如权利要求14所述的***,其特征在于,还包括:查找单元,
查找单元,用于当所述序号生成单元生成所述写请求对应的日志序号时以递增方式生成,查找所述磁盘***中操作失败的键列表中是否储存与所述第一日志对象对应的,且大于所述键值读取单元读取的第一键值的键值,如果不是,通知所述数据读取单元读取一轮N个键值所对应的存储地址内储存的数据。
16.如权利要求12或13所述的***,其特征在于,还包括:
列表储存单元,用于若所述写入单元根据所述日志文件的存储地址将所述写请求所请求写入的日志文件储存到磁盘***失败,将所述计算的存储地址对应键的信息储存到磁盘***中操作失败的键列表中。
17.如权利要求16所述的***,其特征在于,还包括:查找单元,所述查找单元,用于当所述序号生成单元生成所述写请求对应的日志序号时以递减方式生成,查找所述磁盘***中操作失败的键列表中是否储存与所述第一日志对象对应的,且大于所述键值读取单元读取的第一键值的键值,如果不是,通知所述数据读取单元读取一轮N个键值所对应的存储地址内储存的数据。
18.如权利要求10至14、15及17任一项所述的***,其特征在于,还包括:
操作请求获取单元,用于获取日志文件的操作请求,所述操作请求中包括第二日志对象的标识信息和第二键值;
操作地址获取单元,用于将所述操作请求获取单元获取的操作请求中,第二日志对应的标识信息和第二键值作为键,计算得到所述操作请求所请求操作的日志文件的存储地址;
操作单元,用于根据所述操作请求获取单元获取的操作请求对所述请求操作的存储地址内储存的日志文件进行相应操作。
CN201180003108.0A 2011-12-21 2011-12-21 日志存储方法及*** Active CN103270499B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2011/084255 WO2013091167A1 (zh) 2011-12-21 2011-12-21 日志存储方法及***

Publications (2)

Publication Number Publication Date
CN103270499A CN103270499A (zh) 2013-08-28
CN103270499B true CN103270499B (zh) 2016-10-05

Family

ID=48667629

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201180003108.0A Active CN103270499B (zh) 2011-12-21 2011-12-21 日志存储方法及***

Country Status (2)

Country Link
CN (1) CN103270499B (zh)
WO (1) WO2013091167A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113076060A (zh) * 2021-03-10 2021-07-06 杭州又拍云科技有限公司 一种单点日志存储方法

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105068765A (zh) * 2015-08-13 2015-11-18 浪潮(北京)电子信息产业有限公司 一种基于键值数据库的日志处理方法及***
CN109271277B (zh) * 2017-07-17 2022-03-08 阿里巴巴集团控股有限公司 数据库宕机后的访问方法、装置和***
CN108229154A (zh) * 2017-12-12 2018-06-29 顺丰科技有限公司 敏感数据操作日志记录方法、装置、存储介质及设备
CN110019054B (zh) * 2017-12-29 2023-01-31 阿里巴巴集团控股有限公司 日志去重方法和***、内容分发网络***
CN115658593A (zh) * 2018-07-16 2023-01-31 超聚变数字技术有限公司 一种数据处理方法和装置
CN111339046B (zh) * 2020-02-26 2023-09-19 中国工商银行股份有限公司 针对文件的数据写入、读取和删除方法及装置
CN111475493B (zh) * 2020-06-19 2020-12-04 阿里云计算有限公司 数据读取方法及装置
US11263206B1 (en) * 2021-03-02 2022-03-01 Coupang Corp. Systems and methods for multi-nodal stream processing framework for partitioned database
CN117118824B (zh) * 2023-10-20 2024-02-27 成都卓拙科技有限公司 一种日志数据收集方法及设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102158349A (zh) * 2011-02-09 2011-08-17 中兴通讯股份有限公司 一种日志管理装置及方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100389867B1 (ko) * 2001-06-04 2003-07-04 삼성전자주식회사 플래시 메모리 관리방법
JP4125169B2 (ja) * 2003-04-02 2008-07-30 キヤノン株式会社 ログ取得方法
CN101594342A (zh) * 2008-05-29 2009-12-02 国际商业机器公司 日志记录方法和装置
US8364931B2 (en) * 2009-06-29 2013-01-29 Mediatek Inc. Memory system and mapping methods using a random write page mapping table

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102158349A (zh) * 2011-02-09 2011-08-17 中兴通讯股份有限公司 一种日志管理装置及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王兆永.面向大规模批量日志数据存储方法的研究.《中国优秀硕士学位论文全文数据库》.2011,第24-29、36、43页. *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113076060A (zh) * 2021-03-10 2021-07-06 杭州又拍云科技有限公司 一种单点日志存储方法

Also Published As

Publication number Publication date
CN103270499A (zh) 2013-08-28
WO2013091167A1 (zh) 2013-06-27

Similar Documents

Publication Publication Date Title
CN103270499B (zh) 日志存储方法及***
CN102521269B (zh) 一种基于索引的计算机连续数据保护方法
US8225029B2 (en) Data storage processing method, data searching method and devices thereof
US9513817B2 (en) Free space collection in log structured storage systems
CN102843396B (zh) 一种分布式缓存***中的数据写入及读取方法及装置
US8290994B2 (en) Obtaining file system view in block-level data storage systems
CN103336849B (zh) 一种数据库检索***中提高检索速度的方法及装置
CN103106286B (zh) 元数据的管理方法和装置
US20100146213A1 (en) Data Cache Processing Method, System And Data Cache Apparatus
CN106662981A (zh) 存储设备、程序和信息处理方法
CN103226965B (zh) 基于时间位图的音视频数据存取方法
WO2014015828A1 (zh) 数据存储空间的处理方法、处理***及数据存储服务器
CN107491523A (zh) 存储数据对象的方法及装置
CN104050103B (zh) 一种用于数据恢复的缓存替换方法与***
JP2015505623A (ja) ステージング・エリアを管理するためのコンピュータ実施プロセス、コンピュータ・プログラム製品、装置
CN106503051A (zh) 一种基于元数据分类的贪婪预取型数据恢复***及恢复方法
WO2012083754A1 (zh) 处理脏数据的方法及装置
CN107422989B (zh) 一种Server SAN***多副本读取方法及存储***
CN102033930A (zh) 分布式内存数据库***
CN110196818A (zh) 缓存数据的方法、缓存设备和存储***
CN112131140A (zh) 基于ssd的支持高效存储空间管理的键值分离存储方法
CN109582213A (zh) 数据重构方法及装置、数据存储***
CN111984191A (zh) 一种支持分布式存储的多客户端缓存方法及***
CN106649722A (zh) 一种监控***高频数据的存储及查询方法
CN1940889B (zh) 用于管理访问历史的方法和装置以及信息处理装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20200109

Address after: 056000 south end of Xinming Road, Linmingguan Town, Yongnian District, Handan City, Hebei Province

Patentee after: Yuying school, Yongnian District, Handan City

Address before: 510000 unit 2414-2416, building, No. five, No. 371, Tianhe District, Guangdong, China

Patentee before: GUANGDONG GAOHANG INTELLECTUAL PROPERTY OPERATION Co.,Ltd.

Effective date of registration: 20200109

Address after: 510000 unit 2414-2416, building, No. five, No. 371, Tianhe District, Guangdong, China

Patentee after: GUANGDONG GAOHANG INTELLECTUAL PROPERTY OPERATION Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd.

TR01 Transfer of patent right