一种处理数据库日志的方法及装置的制造方法

文档序号:8223559阅读:311来源:国知局
一种处理数据库日志的方法及装置的制造方法
【技术领域】
[0001]本发明涉及数据库技术领域,尤其涉及一种处理数据库日志的方法及装置。
【背景技术】
[0002]当前数据库技术中,重做(redo)日志提供了一个对未写入数据库磁盘的数据的进行重做的基础。当数据库更新提交的时候,数据并不会即时写入到磁盘的数据文件中,而是保存在内存当中,这就需要通过redo日志来对该次数据库更新提供一种持久化的支持,避免在故障的情况下,由于内存数据的丢失而导致数据丢失。
[0003]现有技术中,通常通过将数据库更新的动作记录在redo日志中来避免要求每次的数据库更新写入数据文件,从而提高数据库更新的性能;传统的数据库大多采用循环的重做日志缓冲区(redo buffer)的形式来顺序存储redo日志,之后在合适的时刻把buffer中的数据追加到磁盘上的redo文件中进行持久化存储,日志刷出后buffer可以重用,这样在redo日志的写入上通过设置redo日志的缓冲,可减少redo日志写入磁盘的频率;而撤消日志(undo log)记录了数据库变更前的状态,能够把所有没有提交(commit)的事务回滚到事务开始前的状态。同时,系统崩溃时,可能有些事务还没有commit,在系统恢复时,这些没有commit的事务就需要借助undo log来进行回滚。传统的数据库大多采用与数据页一样的存储方式来存储undo日志。但是这样所有的redo都统一存储在redo buffer中,在大并发下redo buffer成为了冲突热点,制约了数据库的可扩展性;且redo需要持久化存储在磁盘上,在事务提交时需要将日志刷新到磁盘,此时会影响事务提交性能,尤其当redo日志和数据存储在同一块磁盘上,对磁盘的争抢更为激烈,这对数据库性能有巨大影响;而undo日志与数据存储处理一致,同样造成了一定程度的存储空间浪费和磁盘竞争。

【发明内容】

[0004]本发明实施例所要解决的技术问题在于,提供一种处理数据库日志的方法及装置。以解决数据库日志操作的热点争用和磁盘争用的问题。
[0005]为了解决上述技术问题,本发明实施例第一方面提供了一种处理数据库日志的方法,包括:
[0006]将按照数据版本变更先后顺序生成的日志保存在非易失存储器中,其中,所述日志包括事务状态表、元数据文件及日志文件,所述事务状态表用于记录各个事务的状态,所述元数据文件用于记录事务对应的日志的位置以及下一个日志记录的位置,所述日志文件用于记录数据的变更版本;
[0007]当恢复内存中的数据时,根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
[0008]在第一方面的第一种可能的实现方式中,在所述恢复内存中的数据之前,还包括:
[0009]标记事务的操作类型,所述操作类型包括回滚和提交。
[0010]结合第一方面或结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述将按照数据版本变更先后顺序生成的日志保存在非易失存储器中,包括:
[0011]当数据更新时,生成新版本的日志文件;
[0012]判断新版本的日志文件对应的历史版本日志文件是否可见;
[0013]若所述新版本的日志文件对应的历史版本日志文件不可见,则保存所述新版本的日志文件;
[0014]若所述新版本的日志文件对应的历史版本日志文件可见,则进一步判断所述新版本的日志文件是否为最后一条日志文件;
[0015]若所述新版本的日志文件是最后一条日志文件,则保存所述新版本的日志文件;
[0016]若所述新版本的日志文件不是最后一条日志文件,则清理所述新版本的日志文件。
[0017]结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,在将按照数据版本变更先后顺序生成的日志保存在非易失存储器中之后,还包括:
[0018]根据预设周期定期清理所述日志文件中的至少一个历史变更版本或者清理除最后一条日志文件之外的其他日志文件。
[0019]结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述当恢复内存中的数据时,根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复,包括:
[0020]读取所述非易失存储器中的日志;
[0021 ] 读取所述日志中的事务状态表;
[0022]根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
[0023]本发明实施例第二方面提供了一种处理处理数据库日志的装置,包括:
[0024]保存单元,用于将按照数据版本变更先后顺序生成的日志保存在非易失存储器中,其中,所述日志包括事务状态表、元数据文件及日志文件,所述事务状态表用于记录各个事务的状态,所述元数据文件用于记录事务对应的日志的位置以及下一个日志记录的位置,所述日志文件用于记录数据的变更版本;
[0025]恢复单元,用于当恢复内存中的数据时,根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
[0026]在第二方面的第一种可能的实现方式中,所述装置还包括:
[0027]标记单元,用于标记事务的操作类型,所述操作类型包括回滚和提交。
[0028]结合第二方面或结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述保存单元具体用于:
[0029]当数据更新时,生成新版本的日志文件;
[0030]判断新版本的日志文件对应的历史版本日志文件是否可见;
[0031 ] 若所述新版本的日志文件对应的历史版本日志文件不可见,则保存所述新版本的日志文件;
[0032]若所述新版本的日志文件对应的历史版本日志文件可见,则进一步判断所述新版本的日志文件是否为最后一条日志文件;
[0033]若所述新版本的日志文件是最后一条日志文件,则保存所述新版本的日志文件;
[0034]若所述新版本的日志文件不是最后一条日志文件,则清理所述新版本的日志文件。
[0035]结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述装置还包括:
[0036]清理单元,用于根据预设周期定期清理所述日志文件中的至少一个历史变更版本或者清理除最后一条日志文件之外的其他日志文件。
[0037]结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述恢复单元具体用于:
[0038]读取所述非易失存储器中的日志;
[0039]读取所述日志中的事务状态表;
[0040]根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
[0041]实施本发明实施例,具有如下有益效果:
[0042]通过利用NVM的特性,按照数据版本变更先后顺序存储对应的日志,使得该日志可同时用来支持undo和redo日志的功能;且通过将日志以历史版本的形式组织起来,这种分布式的组织形式,可消除了并发冲突热点,提高了系统的性能,同时也解决了常规日志操作热点争用的问题,提升了数据操作的并发性;而在日志操作的磁盘争用问题上,也提升了数据操作的性能和并发性。
【附图说明】
[0043]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0044]图1是本发明实施例一种处理数据库日志的方法的流程示意图;
[0045]图2是本发明实施例一种处理数据库日志的方法中更新日志的流程示意图;
[0046]图3是本发明实施例一种处理数据库日志的方法中恢复数据的流程示意图;
[0047]图4是本发明实施例一种处理数据库日志的装置的组成示意图;
[0048]图5是本发明实施例另一种处理数据库日志的装置的组成示意图;
[0049]图6是本发明实施例另一种处理数据库日志的装置的组成示意图。
【具体实施方式】
[0050]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。<
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1