一种内存数据库的日志合并方法和系统转让专利

申请号 : CN200910305932.6

文献号 : CN101625703B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 卢正新王非黄本雄王芙蓉吴惠君

申请人 : 华中科技大学

摘要 :

本发明公开了一种内存数据库的日志合并方法和系统,所述方法包括以下步骤:a.执行逻辑相关性判别;b.判断是否执行逻辑合并,若是则执行步骤c,否则转至步骤d;c.执行逻辑合并;d.执行数据对象一致性判别;e.判断是否执行日志数据对象一致合并,若是则执行步骤f,否则执行步骤g;f.执行步骤对象合并;g.日志插入到缓存块中。本发明通过对每条日志进行hash查找匹配可合并的日志然后合并这些日志,不仅减少了内存数据库的日志数量,而且加快了数据库的恢复速度,解决了内存数据库的日志数量大的技术问题,同时降低了部署成本,提高了系统性能。

权利要求 :

1.一种内存数据库的日志合并方法 ,其特征在于,该方法包括以下步骤:a,对新进入缓冲区的日志执行事务逻辑相关性判别,包括以下步骤:a1,对新进入缓冲区的日志,根据日志类型判别是否是其对应事务的最后一个日志且是可合并日志,若是,执行步骤a2,否则结束;

a2,根据日志头中记录的该日志在事务内的逻辑顺序信息,在日志缓存块中查找上一个日志;

a3,判别是否找到日志,若没找到则执行步骤a4,否则转至步骤a5;

a4,合并所查找到的一系列日志,合并然后插入到最后一个日志的位置上,并将原被已经合并的日志删除,然后结束;

a5,判别步骤a2获取的上一个日志是否在最后一个不可合并的日志以前,若是则结束,否则转至步骤a2;

b,判断是否执行逻辑合并,若是则执行步骤c,否则转至步骤d;

c,执行基于事务逻辑的日志合并;

d,对新日志包含的数据对象执行数据对象一致性判别,包括以下步骤:d1,对新进入缓冲区的日志判断日志类型,如果是不可合并日志,执行步骤d2,否则转至步骤d3;

d2,清空hash表,为后面的插入行操作日志做好准备,并转至步骤d8;

d3,取得本日志描述的数据对象的内存地址rAddr;

d4,依据rAddr计算hash值,查找hash表;

d5,判断是否有相同地址的日志,如果有,执行步骤d6,否则转至步骤d7;

d6,执行日志合并,并转至步骤d8;

d7,将本条日志插入hash表;

d8,向缓冲块中插入本条日志;

e,判断是否执行日志数据对象一致合并,若是则执行步骤f,否则执行步骤g;

f,执行基于数据对象的日志合并;

g,将新日志插入到缓存块中。

2.根据权利要求1所述的内存数据库的日志合并方法,其特征在于,所述日志缓存块内采用hash结构组织 。

3.一种用于权利要求1或2所述方法的日志合并系统,其特征在于,包括内存中的日志缓存块、日志管理文件和日志文件,所述日志缓存块由缓存块头和多个缓存块组成,用于缓存日志;所述日志管理文件用于记录日志文件的相应管理信息,由文件头和信息区组成;

所述日志文件用于存储已经经过合并后的日志。

4.根据权利要求3所述的日志合并系统,其特征在于,所述日志合并系统还包括写磁盘日志线程。

5.根据权利要求3所述的日志合并系统,其特征在于,所述文件头用于记录相关管理信息。

6.根据权利要求3所述的日志合并系统,其特征在于,所述信息区用于记录对应数据库映像文件、检查点和日志文件链表信息。

说明书 :

一种内存数据库的日志合并方法和系统

技术领域

[0001] 本发明涉及内存数据库备份和恢复领域,尤其涉及内存数据库日志系统中的缩减日志量的技术领域。

背景技术

[0002] 内存数据库因其快速的访问性能,被越来越广泛的使用在电信、金融、电力等行业。在内存数据库复杂的应用领域中,它承担处理的数据越来越多,接收的事务越来越多,扮演的角色也越来越重要。正因为内存数据库在现代应用中越来越重要的应用,它的数据安全性越来越被重视,作为记录数据库工作的日志也被重视起来。然而内存数据库承担的事务越来越多,事务越来越复杂,记录事务的日志也越来越多,日志数量变得十分的庞大。如此大量的日志不仅增加了数据库的负担,而且也加长了数据库恢复的时间,是对内存数据库的应用十分不利的。
[0003] 现有的内存数据库记录的日志一般是物理日志,对于数据库记录的日志一般按照直接的内存映像存储,或者通过压缩技术存储。通过压缩技术存储日志需要在备份和恢复阶段都要对日志进行大量的运算(在备份阶段需要压缩日志然后存储,在恢复阶段需要解压缩日志然后执行恢复),虽然这种方法压缩了日志的大小,减少了日志存储的空间,但是这种方法增加了系统负担,耗费了大量时间,不适用于对时间要求较高的内存数据库的应用场合;另外,这种方法并没有从日志数量上进行缩减,在恢复阶段仍然有恢复同样数量的日志。减少日志量的另一方法是通过事务协议来减少记录日志,这种方法对事务处理提出了要求,导致事务处理变得复杂,对于不同的事务协议没有通用性,这种减少日志的方法只适用在采用能够减少记录日志的事务协议的数据库中。

发明内容

[0004] 本发明所要解决的技术问题是提供一种有效缩减日志量的日志合并方法及系统。
[0005] 为解决上述技术问题,本发明提供了一种日志合并方法,包括以下步骤:a,对新进入缓冲区的日志执行事务逻辑相关性判别,包括以下步骤:
[0006] a1,对新进入缓冲区的日志,根据日志类型判别是否是其对应事务的最后一个日志且是可合并日志,若是,执行步骤a2,否则结束;
[0007] a2,根据日志头中记录的该日志在事务内的逻辑顺序信息,在日志缓存块中查找上一个日志;
[0008] a3,判别是否找到日志,若没找到则执行步骤a4,否则转至步骤a5;
[0009] a4,合并所查找到的一系列日志,合并然后插入到最后一个日志的位置上,并将原被已经合并的日志删除,然后结束;
[0010] a5,判别步骤a2获取的上一个日志是否在最后一个不可合并的日志以前,若是则结束,否则转至步骤a2;
[0011] b,判断是否执行逻辑合并,若是则执行步骤c,否则转至步骤d;
[0012] c,执行基于事务逻辑的日志合并;
[0013] d,对新日志包含的数据对象执行数据对象一致性判别,包括以下步骤:
[0014] d1,对新进入缓冲区的日志判断日志类型,如果是不可合并日志,执行步骤d2,否则转至步骤d3;
[0015] d2,清空hash表,为后面的插入行操作日志做好准备,并转至步骤d8;
[0016] d3,取得本日志描述的数据对象的内存地址rAddr;
[0017] d4,依据rAddr计算hash值,查找hash表;
[0018] d5,判断是否有相同地址的日志,如果有,执行步骤d6,否则转至步骤d7;
[0019] d6,执行日志合并,并转至步骤d8;
[0020] d7,将本条日志插入hash表;
[0021] d8,向缓冲块中插入本条日志;
[0022] e,判断是否执行日志数据对象一致合并,若是则执行步骤f,否则执行步骤g;
[0023] f,执行基于数据对象的日志合并;
[0024] g,将新日志插入到缓存块中。
[0025] 按上述方案,所述日志缓存块内采用hash结构组织。
[0026] 另一方面,本发明提供一种对应于上述方法的日志合并系统,包括内存中的日志缓存块、日志管理文件和日志文件,所述日志缓存块由缓存块头和多个缓存块组成,用于缓存日志;所述日志管理文件用于记录日志文件的相应管理信息,由文件头和信息区组成;所述日志文件用于存储已经经过合并后的日志。
[0027] 按上述方案,所述日志合并系统还包括写磁盘日志线程。
[0028] 按上述方案,所述文件头用于记录相关管理信息。
[0029] 按上述方案,所述信息区用于记录对应数据库映像文件、检查点和日志文件链表信息。
[0030] 实施本发明具有如下有益效果:
[0031] 在本发明所提出的一种内存数据库的日志合并方法及系统中,通过对每条日志进行hash查找匹配可合并的日志然后合并这些日志,不仅减少了内存数据库的日志数量,而且加快了数据库的恢复速度,解决了内存数据库的日志数量大的技术问题,同时降低了部署成本,提高了系统性能。

附图说明

[0032] 下面结合附图和具体实施方式对本发明的技术方案作进一步具体说明。
[0033] 图1为内存数据库的日志系统功能模块示意图。
[0034] 图2为缓冲区中日志逻辑关系示例。
[0035] 图3为逻辑相关性判别算法流程图。
[0036] 图4为一个日志缓存块的组织结构图。
[0037] 图5为数据对象一致性判别算法流程图。
[0038] 图6为整体的日志合并方法流程图。

具体实施方式

[0039] 如图1所示,本发明提供的日志系统包括内存中的日志缓存区,日志管理文件和日志文件。日志系统拥有自己的内存日志缓存区,自己管理磁盘日志文件,并拥有自己的写磁盘日志线程。其中日志缓冲区缓存日志,由缓冲区头和多个缓存块组成,在缓存块上建立hash索引,提供日志合并功能。缓冲区采用多个缓冲块的策略,当一个缓存块被充满并继续往日志系统增添日志时,另一个空闲的块就作为当前日志缓存块。当收到检查点日志的时候,将所有缓存区的日志写入磁盘日志文件。日志管理文件管理日志文件,记录日志文件的相应管理信息,由文件头和信息区组成:文件头记录相关管理信息,负责管理信息区,记录当前最近有效信息区(恢复的时候根据这个变量定位最近有效恢复点)等信息;信息区用来记录对应数据库映像文件、检查点和日志文件链表等信息。日志文件是日志数据文件,存储已经经过合并后的日志。写磁盘操作和增日志函数并行进行,使得写日志对数据库操作的影响减到最小。
[0040] 在缓冲区中的每个日志都属于某个事务,并且由日志头中的信息被串成一个链如图2例示。
[0041] 日志系统维护一个标识最后一个不可合并日志的信息,用以在合并时用来判别合并的可行性。当插入日志时执行日志逻辑相关性判别算法,具体流程如图3所示,包括:
[0042] 步骤31,根据日志类型判别是该事务的最后一个日志且是可合并日志,若是,执行步骤32,否则结束。
[0043] 步骤32,根据日志头中记录的该日志在事务内的逻辑顺序信息,在日志缓存块中查找上一个日志。
[0044] 步骤33,判别是否找到日志,若没找到则执行步骤34,否则转至步骤35。
[0045] 步骤34,合并所查找到的一系列日志,合并然后插入到最后一个日志的位置上,并将原被已经合并的日志删除,然后结束。
[0046] 步骤35,判别该日志是否在最后一个不可合并的日志以前,若是则结束,否则转至步骤32。
[0047] 日志缓存块结构如图4所示,在缓存块内采用hash结构组织,并整合日志合并技术,降低了日志量,提高了日志缓存块的利用效率。
[0048] 当向缓存块内插入一条日志时,数据库借助hash表判断是否有可以合并的日志,如果有则合并,否则直接插入缓存块中。数据对象一致性判别算法的日志合并流程如图5所示,具体包括:
[0049] 步骤51,对本日志判断日志类型,如果是不可合并日志,执行步骤52,否则转至步骤53。
[0050] 步骤52,清空hash表,为后面的插入行操作日志做好准备。转至步骤58。
[0051] 步骤53,取得本日志描述的内存地址rAddr。
[0052] 步骤54,依据rAddr计算hash值,查找hash表。
[0053] 步骤55,判断是否有同地址的日志,如果有,执行步骤56,否则转至步骤57。
[0054] 步骤56,合并日志,转至步骤58。
[0055] 步骤57,将本条日志插入hash。
[0056] 步骤58,向缓冲块中插入本条日志。日志合并结束。
[0057] 对每一条日志插入,日志合并的总体流程如图6所示,包括:
[0058] 步骤61,执行逻辑相关性判别。
[0059] 步骤62,判断是否执行逻辑合并,若是则执行步骤63,否则转至步骤64。
[0060] 步骤63,执行逻辑合并。
[0061] 步骤64,执行数据对象一致性判别。
[0062] 步骤65,判断是否执行日志数据对象一致合并,若是则执行步骤66,否则执行步骤67。
[0063] 步骤66,执行步骤对象合并。
[0064] 步骤67,日志插入到缓存块中。
[0065] 最后所应说明的是,以上具体实施方式仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。