发明内容
本发明实施例所要解决的技术问题在于,提供一种处理数据库日志的方法及装置。以解决数据库日志操作的热点争用和磁盘争用的问题。
为了解决上述技术问题,本发明实施例第一方面提供了一种处理数据库日志的方法,包括:
将按照数据版本变更先后顺序生成的日志保存在非易失存储器中,其中,所述日志包括事务状态表、元数据文件及日志文件,所述事务状态表用于记录各个事务的状态,所述元数据文件用于记录事务对应的日志的位置以及下一个日志记录的位置,所述日志文件用于记录数据的变更版本;
当恢复内存中的数据时,根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
在第一方面的第一种可能的实现方式中,在所述恢复内存中的数据之前,还包括:
标记事务的操作类型,所述操作类型包括回滚和提交。
结合第一方面或结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述将按照数据版本变更先后顺序生成的日志保存在非易失存储器中,包括:
当数据更新时,生成新版本的日志文件;
判断新版本的日志文件对应的历史版本日志文件是否可见;
若所述新版本的日志文件对应的历史版本日志文件不可见,则保存所述新版本的日志文件;
若所述新版本的日志文件对应的历史版本日志文件可见,则进一步判断所述新版本的日志文件是否为最后一条日志文件;
若所述新版本的日志文件是最后一条日志文件,则保存所述新版本的日志文件;
若所述新版本的日志文件不是最后一条日志文件,则清理所述新版本的日志文件。
结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,在将按照数据版本变更先后顺序生成的日志保存在非易失存储器中之后,还包括:
根据预设周期定期清理所述日志文件中的至少一个历史变更版本或者清理除最后一条日志文件之外的其他日志文件。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述当恢复内存中的数据时,根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复,包括:
读取所述非易失存储器中的日志;
读取所述日志中的事务状态表;
根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
本发明实施例第二方面提供了一种处理处理数据库日志的装置,包括:
保存单元,用于将按照数据版本变更先后顺序生成的日志保存在非易失存储器中,其中,所述日志包括事务状态表、元数据文件及日志文件,所述事务状态表用于记录各个事务的状态,所述元数据文件用于记录事务对应的日志的位置以及下一个日志记录的位置,所述日志文件用于记录数据的变更版本;
恢复单元,用于当恢复内存中的数据时,根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
在第二方面的第一种可能的实现方式中,所述装置还包括:
标记单元,用于标记事务的操作类型,所述操作类型包括回滚和提交。
结合第二方面或结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述保存单元具体用于:
当数据更新时,生成新版本的日志文件;
判断新版本的日志文件对应的历史版本日志文件是否可见;
若所述新版本的日志文件对应的历史版本日志文件不可见,则保存所述新版本的日志文件;
若所述新版本的日志文件对应的历史版本日志文件可见,则进一步判断所述新版本的日志文件是否为最后一条日志文件;
若所述新版本的日志文件是最后一条日志文件,则保存所述新版本的日志文件;
若所述新版本的日志文件不是最后一条日志文件,则清理所述新版本的日志文件。
结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述装置还包括:
清理单元,用于根据预设周期定期清理所述日志文件中的至少一个历史变更版本或者清理除最后一条日志文件之外的其他日志文件。
结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述恢复单元具体用于:
读取所述非易失存储器中的日志;
读取所述日志中的事务状态表;
根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
实施本发明实施例,具有如下有益效果:
通过利用NVM的特性,按照数据版本变更先后顺序存储对应的日志,使得该日志可同时用来支持undo和redo日志的功能;且通过将日志以历史版本的形式组织起来,这种分布式的组织形式,可消除了并发冲突热点,提高了系统的性能,同时也解决了常规日志操作热点争用的问题,提升了数据操作的并发性;而在日志操作的磁盘争用问题上,也提升了数据操作的性能和并发性。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参照图1,为本发明实施例一种处理数据库日志的方法的流程示意图;在本实施例中,所述方法包括以下步骤:
S101,将按照数据版本变更先后顺序生成的日志保存在非易失存储器中。
其中,所述日志包括事务状态表、元数据文件及日志文件,所述事务状态表用于记录各个事务的状态,所述元数据文件用于记录事务对应的日志的位置以及下一个日志记录的位置,所述日志文件用于记录数据的变更版本;
具体地,在整个系统架构中可包括动态随机存取存储器(Dynamic RandomAccess Memory,简称DRAM)和快速非易失存储(Fast NVM)。其中DRAM即最为常见的系统内存。DRAM只能将数据保持很短的时间。而NVM作为一种新型存储介质,即使断电其保存的数据也不会丢失。且其随机写与顺序写性能差别微小。在NVM中存储了事务状态表(Transaction table),其中每个元组代表了一个事务,它由三种状态:FREE、PENDING和COMMITTED,FREE表示该事务元组可以被回收重用,PENDING表示事务的状态未定,未收到终止(abort)或提交(commit)。COMMITTED则表示事务已提交。同时在事务状态表中海存储了该事务变更的第一条日志文件的位置。元数据文件(Metadata file)存储了表示事务日志的元数据元组,每个元组由固定元素组成,包含其对应日志的位置以及该事务下一个日志记录的位置。日志文件(Log file)则记录了数据的变更版本,其组织形式为元组的变更顺序,每个元组有个指针存储了基于该版本的新版本。
而数据(Data):则存储在内存和磁盘中,其存储了数据的一个已提交的原始版本,同时每个元组有个指针存储了该版本在log file中新发生变更元组的指针。
S102,当恢复内存中的数据时,根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
在内存中存储数据的最新版本,在Fast NVM中则存储了数据自原始版本以来按照变更先后顺序的版本,这里称为日志。这里的日志与传统的日志不同在于:其具有redo和undo两个功能。其中redo是按照事务的发生顺序从头到尾重做,而undo则是根据元组的变更顺序从新到旧来恢复。
内存中的数据的原始版本会逐步被已提交的较新的版本所替代,较旧的NVM中的版本空间则可被收回重用。旧版本的替代回收时机包括后台线程定义清理、选择(select)查询元组获得合适版本记录操作、对元组变更添加新版本到NVM链中。
这种日志结构不同于传统的仅依靠(Append-Only)类型的redo日志与undo日志的组织方式,而是将日志以历史版本的形式组织起来,该日志可同时用来支持undo和redo日志功能;日志采用分布式的方式来组织,从而消除了一个并发冲突热点,提高了性能。
在恢复数据时,只需要将根据指针寻找最新的事务提交后的日志文件进行恢复,从而确保数据库中数据的最新版本。
通过利用NVM的特性,按照数据版本变更先后顺序存储对应的日志,使得该日志可同时用来支持undo和redo日志的功能;且通过将日志以历史版本的形式组织起来,这种分布式的组织形式,可消除了并发冲突热点,提高了系统的性能,同时也解决了常规日志操作热点争用的问题,提升了数据操作的并发性;而在日志操作的磁盘争用问题上,也提升了数据操作的性能和并发性。
请参照图2,为本发明实施例一种处理数据库日志的方法中更新日志的流程示意图;在本实施例中,所述方法包括以下步骤:
S201,当数据更新时,生成新版本的日志文件。
S202,判断新版本的日志文件对应的历史版本日志文件是否可见。若是,则执行步骤S203,若否,则执行步骤S205。
S203,判断所述新版本的日志文件是否为最后一条日志文件。若是,则执行步骤S205,若否,则执行步骤S204。
S204,清理所述新版本的日志文件。
S205,保存所述新版本的日志文件。
由于内存中存储的数据是旧版本数据,为了减少NVM中版本的数量来释放空间和加快操作速度。本实施例会及时的使用新版本来替代旧版本,清理策略可包括但不限于:根据预设周期定期清理所述日志文件中的至少一个历史变更版本或者清理除最后一条日志文件之外的其他日志文件;具体地,后台存在线程对NVM中的记录进行处理,其会定期的把rollback的记录内存和不会再被查询用到的历史版本清理掉。当清理过程掉历史版本,则需用当前记录的最新历史版本替换到内存中。当清理的版本是最后一个版本时,则只有当把该数据存入磁盘上时才可被清理。
针对不同的线程,例如选择(Select)时由于绝大时刻需要访问较新的版本,这个过程中会从内存的历史版本进行查询沿着记录链一直找到合适版本为止,这个过程中也会进行过期历史版本的清理工作。
升级(Update)/删除(delete)操作会找到最新的版本进行操作,这个过程也会对历史版本进行清理。
请参照图3,为本发明实施例一种处理数据库日志的方法中恢复数据的流程示意图;在本实施例中,所述方法包括以下步骤:
S301,读取所述非易失存储器中的日志。
S302,读取所述日志中的事务状态表。
S303,根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
由于恢复时NVM的内容会持久化存储,只需按照事务表的提交顺序来使得提交版本来替换存储的历史版本即可。对于未提交的版本由于没有进行任何持久化,无需处理。当恢复完成后,对于最新版本应该存在两份,即在memory和NVM中各一份,NVM中的空间需等数据持久化后才能释放。
请参照图4,为本发明实施例一种处理数据库日志的装置的组成示意图,在本实施例中,所述装置包括:
保存单元100,用于将按照数据版本变更先后顺序生成的日志保存在非易失存储器中,其中,所述日志包括事务状态表、元数据文件及日志文件,所述事务状态表用于记录各个事务的状态,所述元数据文件用于记录事务对应的日志的位置以及下一个日志记录的位置,所述日志文件用于记录数据的变更版本;
恢复单元200,用于当恢复内存中的数据时,根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
所述保存单元100具体用于:
当数据更新时,生成新版本的日志文件;
判断新版本的日志文件对应的历史版本日志文件是否可见;
若所述新版本的日志文件对应的历史版本日志文件不可见,则保存所述新版本的日志文件;
若所述新版本的日志文件对应的历史版本日志文件可见,则进一步判断所述新版本的日志文件是否为最后一条日志文件;
若所述新版本的日志文件是最后一条日志文件,则保存所述新版本的日志文件;
若所述新版本的日志文件不是最后一条日志文件,则清理所述新版本的日志文件。
所述恢复单元200具体用于:
读取所述非易失存储器中的日志;
读取所述日志中的事务状态表;
根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
请参照图5,为本发明实施例另一种处理数据库日志的装置的组成示意图,在本实施例中,所述装置包括:
保存单元100,用于将按照数据版本变更先后顺序生成的日志保存在非易失存储器中,其中,所述日志包括事务状态表、元数据文件及日志文件,所述事务状态表用于记录各个事务的状态,所述元数据文件用于记录事务对应的日志的位置以及下一个日志记录的位置,所述日志文件用于记录数据的变更版本;
恢复单元200,用于当恢复内存中的数据时,根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
标记单元300,用于标记事务的操作类型,所述操作类型包括回滚和提交.
清理单元400,用于根据预设周期定期清理所述日志文件中的至少一个历史变更版本或者清理除最后一条日志文件之外的其他日志文件。
请参照图5,为本发明实施例另一种处理数据库日志的装置的组成示意图,在本实施例中,所述装置包括:
输入装置500、输出装置600、存储器700、处理器800以及总线,所述输入装置500、输出装置600、存储器700以及处理器800与所述总线连接,其中:
所述存储器700用于存储程序,所述处理器800用于调用所述程序进行以下步骤:
将按照数据版本变更先后顺序生成的日志保存在非易失存储器中,其中,所述日志包括事务状态表、元数据文件及日志文件,所述事务状态表用于记录各个事务的状态,所述元数据文件用于记录事务对应的日志的位置以及下一个日志记录的位置,所述日志文件用于记录数据的变更版本;
当恢复内存中的数据时,根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
可选地,所述处理器800还用于标记事务的操作类型,所述操作类型包括回滚和提交。
可选地,所述处理器800具体用于:
当数据更新时,生成新版本的日志文件;
判断新版本的日志文件对应的历史版本日志文件是否可见;
若所述新版本的日志文件对应的历史版本日志文件不可见,则保存所述新版本的日志文件;
若所述新版本的日志文件对应的历史版本日志文件可见,则进一步判断所述新版本的日志文件是否为最后一条日志文件;
若所述新版本的日志文件是最后一条日志文件,则保存所述新版本的日志文件;
若所述新版本的日志文件不是最后一条日志文件,则清理所述新版本的日志文件。
可选地,所述处理器800还用于根据预设周期定期清理所述日志文件中的至少一个历史变更版本或者清理除最后一条日志文件之外的其他日志文件。
可选地,所述处理器800具体用于:
读取所述非易失存储器中的日志;
读取所述日志中的事务状态表;
根据所述日志中事务状态表的事务提交顺序,使用事务提交后的日志文件版本对内存中的数据进行恢复。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
通过上述实施例的描述,本发明具有以下优点:
通过利用NVM的特性,按照数据版本变更先后顺序存储对应的日志,使得该日志可同时用来支持undo和redo日志的功能;且通过将日志以历史版本的形式组织起来,这种分布式的组织形式,可消除了并发冲突热点,提高了系统的性能,同时也解决了常规日志操作热点争用的问题,提升了数据操作的并发性;而在日志操作的磁盘争用问题上,也提升了数据操作的性能和并发性。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,简称ROM)或随机存储记忆体(Random Access Memory,简称RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。