一种日志管理方法及装置转让专利

申请号 : CN201610617168.6

文献号 : CN107665219B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 周烜李茂增

申请人 : 华为技术有限公司

摘要 :

本申请涉及数据库技术领域,公开了一种日志管理方法及装置,用于提升数据库管理系统在日志恢复时的性能。该方法包括:根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序;根据从所述至少一个被读数据对象读取的数据,对所述被写数据对象执行所述第一写操作;将所述第一写操作和已确定的所述操作顺序写入所述事务日志,并且将所述被写数据对象携带的顺序标识替换为所述已确定的操作顺序对应的顺序标识。

权利要求 :

1.一种日志管理方法,应用于数据库,其特征在于,所述数据库包括事务日志和数据集合,所述数据集合包括至少两个数据对象,所述数据对象携带顺序标识,所述顺序标识用于表征所述数据对象最后一次被执行写操作时所述写操作的操作顺序,所述事务日志用于记录所述写操作以及所述写操作的操作顺序,所述数据对象包括至少一个被读数据对象和一个被写数据对象,所述方法包括:根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序;

根据从所述至少一个被读数据对象读取的数据,对所述被写数据对象执行所述第一写操作;

将所述第一写操作和已确定的所述操作顺序写入所述事务日志,并且将所述被写数据对象携带的顺序标识替换为所述已确定的操作顺序对应的顺序标识。

2.根据权利要求1所述的方法,其特征在于,所述根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序,包括:遍历所述至少一个被读数据对象携带的所述顺序标识和所述被写数据对象携带的所述顺序标识,从被遍历的所述顺序标识所表征的操作顺序中,选择最后执行的操作顺序;

确定所述最后执行的操作顺序的下一个操作顺序为所述第一写操作的操作顺序。

3.根据权利要求2所述的方法,其特征在于,所述最后执行的操作顺序为N,所述N为任意自然数,所述确定所述最后执行的操作顺序的下一个操作顺序为所述第一写操作的操作顺序,包括:确定所述第一写操作的操作顺序为N+1。

4.根据权利要求1至3任一项所述的方法,其特征在于,所述事务日志包括至少两个子事务日志,任意两个所述子事务日志记录的所述操作顺序相互独立;

所述将所述第一写操作和已确定的所述操作顺序写入所述事务日志,包括:

将所述第一写操作和已确定的所述操作顺序写入用于记录不独立于所述第一写操作的所述子事务日志。

5.根据权利要求1至3任一项所述的方法,其特征在于,所述数据对象包括基本数据单元或者基本数据单元集合,所述基本数据单元集合包括至少两个所述基本数据单元;

对应的,所述数据对象携带顺序标识,所述顺序标识用于表征所述数据对象最后一次被执行写操作时所述写操作的操作顺序,包括:所述基本数据单元携带所述顺序标识,所述顺序标识用于表征所述基本数据单元最后一次被执行写操作时所述写操作的操作顺序,或者,所述基本数据单元集合携带所述顺序标识,所述顺序标识用于表征所述基本数据单元集合中的任一基本数据单元最后一次被执行写操作时所述写操作的操作顺序。

6.根据权利要求5所述的方法,其特征在于,当所述数据对象包括所述基本数据单元集合时,所述根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,所述方法还包括:将所述数据集合拆分为所述基本数据单元集合。

7.根据权利要求6所述的方法,其特征在于,所述数据集合包括所述数据库的表或者分区,所述基本数据单元集合包括所述数据库的桶,所述将所述数据集合拆分为所述基本数据单元集合,包括:对所述表或者所述分区中的所述基本数据单元进行桶操作,分组为至少两个所述桶。

8.根据权利要求7所述的方法,其特征在于,所述根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,所述方法还包括:对所述至少一个被读数据对象和所述被写数据对象对应的所述桶加读锁。

9.根据权利要求7或8所述的方法,其特征在于,所述对所述被写数据对象执行所述第一写操作之前,所述方法还包括:对所述被写数据对象对应的所述桶加写锁。

10.根据权利要求1至3任一项所述的方法,其特征在于,所述顺序标识包括:日志顺序号或者时间戳。

11.一种日志管理装置,应用于数据库,其特征在于,所述数据库包括事务日志和数据集合,所述数据集合包括至少两个数据对象,所述数据对象携带顺序标识,所述顺序标识用于表征所述数据对象最后一次被执行写操作时所述写操作的操作顺序,所述事务日志用于记录所述写操作以及所述写操作的操作顺序,所述数据对象包括至少一个被读数据对象和一个被写数据对象,所述装置包括:标识分配单元,用于根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序;

写入单元,用于根据从所述至少一个被读数据对象读取的数据,对所述被写数据对象执行所述第一写操作;

所述写入单元,还用于将所述第一写操作和已确定的所述操作顺序写入所述事务日志;

所述标识分配单元,还用于将所述被写数据对象携带的顺序标识替换为所述已确定的操作顺序对应的顺序标识。

12.根据权利要求11所述的装置,其特征在于,所述标识分配单元具体用于:遍历所述至少一个被读数据对象携带的所述顺序标识和所述被写数据对象携带的所述顺序标识,从被遍历的所述顺序标识所表征的操作顺序中,选择最后执行的操作顺序;

确定所述最后执行的操作顺序的下一个操作顺序为所述第一写操作的操作顺序。

13.根据权利要求12所述的装置,其特征在于,所述最后执行的操作顺序为N,所述N为任意自然数,所述标识分配单元具体用于:确定所述第一写操作的操作顺序为N+1。

14.根据权利要求11至13任一项所述的装置,其特征在于,所述事务日志包括至少两个子事务日志,任意两个所述子事务日志记录的所述操作顺序相互独立;

所述写入单元具体用于:

将所述第一写操作和已确定的所述操作顺序写入用于记录不独立于所述第一写操作的所述子事务日志。

15.根据权利要求11至13任一项所述的装置,其特征在于,所述数据对象包括基本数据单元或者基本数据单元集合,所述基本数据单元集合包括至少两个所述基本数据单元;

对应的,所述数据对象携带顺序标识,所述顺序标识用于表征所述数据对象最后一次被执行写操作时所述写操作的操作顺序,包括:所述基本数据单元携带所述顺序标识,所述顺序标识用于表征所述基本数据单元最后一次被执行写操作时所述写操作的操作顺序,或者,所述基本数据单元集合携带所述顺序标识,所述顺序标识用于表征所述基本数据单元集合中的任一基本数据单元最后一次被执行写操作时所述写操作的操作顺序。

16.根据权利要求15所述的装置,其特征在于,当所述数据对象包括所述基本数据单元集合时,所述装置还包括分组单元;

所述分组单元,用于在所述标识分配单元根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,将所述数据集合拆分为所述基本数据单元集合。

17.根据权利要求16所述的装置,其特征在于,所述数据集合包括所述数据库的表或者分区,所述基本数据单元集合包括所述数据库的桶,所述分组单元具体用于:对所述表或者所述分区中的所述基本数据单元进行桶操作,分组为至少两个所述桶。

18.根据权利要求17所述的装置,其特征在于,所述装置还包括锁定单元;

所述锁定单元,用于在所述标识分配单元根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,对所述至少一个被读数据对象和所述被写数据对象对应的所述桶加读锁。

19.根据权利要求18所述的装置,其特征在于,所述锁定单元,还用于在所述写入单元对所述被写数据对象执行所述第一写操作之前,对所述被写数据对象对应的所述桶加写锁。

20.根据权利要求11至13任一项所述的装置,其特征在于,所述操作顺序标识或者所述顺序标识包括:日志顺序号或者时间戳。

21.一种计算机可用存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至10任一项所述方法的步骤。

说明书 :

一种日志管理方法及装置

技术领域

[0001] 本申请涉及数据库技术领域,特别涉及一种日志管理方法及装置。

背景技术

[0002] 在数据库技术领域,事务是数据库执行数据处理的基本单位。在执行一个事务时,如果把该事务处理从开始到结束所涉及的操作信息作为一个特殊的数据项以二进制的方式记录下来,这就是事务日志。事务日志是以事务为单位进行记录的,每一个日志项详细记录了事务处理的信息,以确保系统在必要的时候,例如数据库故障恢复的时候,能够重演该事务。
[0003] 预写式日志是数据库通常采用的一种事务日志的实现方法,预写式日志保证对数据文件的修改发生在事务日志写入永久存储器之后,即在事务提交时,可以将记录数据文件修改的事务日志全部写入磁盘,而事务修改过的数据库页面不用立即写入磁盘,如果数据库发生故障,可以用已经持久化存储的事务日志来恢复数据库。
[0004] 在对大型的数据库进行管理和维护时,容易出现运行速度缓慢、数据恢复失败等问题。在现代多核架构下,数据库性能的提升适于利用更高程度的并行性来实现。高并行度的事务日志管理方法可以在保证数据可靠恢复的同时,极大地提高数据库的数据处理速度,提升数据库的性能。

发明内容

[0005] 本申请实施例提供一种日志管理方法及装置,用以提高数据库进行数据恢复的并行度。
[0006] 本申请实施例提供的具体技术方案如下:
[0007] 第一方面,提供一种日志管理方法,该方法应用于数据库,所述数据库包括事务日志和数据集合,所述数据集合包括至少两个数据对象,所述数据对象携带顺序标识,所述顺序标识用于表征所述数据对象最后一次被执行写操作时所述写操作的操作顺序,所述事务日志用于记录所述写操作以及所述写操作的操作顺序,所述数据对象包括至少一个被读数据对象和一个被写数据对象,所述方法包括以下实现方式:根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序;根据从所述至少一个被读数据对象读取的数据,对所述被写数据对象执行所述第一写操作;将所述第一写操作和已确定的所述操作顺序写入所述事务日志,并且将所述被写数据对象携带的顺序标识替换为所述已确定的操作顺序对应的顺序标识。
[0008] 本实施例的有益效果为:通过对数据对象分配顺序标识,根据为数据对象携带的顺序标识确定写操作的操作顺序标识,并写进事务日志中,这样,能够将事务日志附加上一个局部有序的操作顺序标识,在故障恢复时,可以通过事务日志中携带的操作顺序标识,确定各个事务日志的偏序关系,从而提高通过事务日志恢复数据的并行度,并保证通过事务日志恢复数据的有效性和正确性,提高数据库的处理速度,提升数据库性能。
[0009] 在一个可能的设计中,所述根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序,通过以下方式实现:遍历所述至少一个被读数据对象携带的所述顺序标识和所述被写数据对象携带的所述顺序标识,从被遍历的所述顺序标识所表征的操作顺序中,选择最后执行的操作顺序;确定所述最后执行的操作顺序的下一个操作顺序为所述第一写操作的操作顺序。
[0010] 本实施例的有益效果为:能够保证事务日志间的逻辑顺序的准确性,在实现通过事务日志恢复数据时保证事务日志间偏序关系的正确性。
[0011] 在一个可能的设计中,所述最后执行的操作顺序为N,所述N为任意自然数,所述确定所述最后执行的操作顺序的下一个操作顺序为所述第一写操作的操作顺序,即确定所述第一写操作的操作顺序为N+1。
[0012] 在一个可能的设计中,所述事务日志包括至少两个子事务日志,任意两个所述子事务日志记录的所述操作顺序相互独立;所述将所述第一写操作和已确定的所述操作顺序写入所述事务日志,通过以下方式实现:将所述第一写操作和已确定的所述操作顺序写入用于记录不独立于所述第一写操作的所述子事务日志。
[0013] 本实施例的有益效果为:去除了日志管理的临界区,使得事务日志不需要再全局有序,有利于提升数据库处理并行度的实现。
[0014] 在一个可能的设计中,所述数据对象包括基本数据单元或者基本数据单元集合,所述基本数据单元集合包括至少两个所述基本数据单元;对应的,所述数据对象携带顺序标识,所述顺序标识用于表征所述数据对象最后一次被执行写操作时所述写操作的操作顺序,包括:所述基本数据单元携带所述顺序标识,所述顺序标识用于表征所述基本数据单元最后一次被执行写操作时所述写操作的操作顺序,或者,所述基本数据单元集合携带所述顺序标识,所述顺序标识用于表征所述基本数据单元集合中的任一基本数据单元最后一次被执行写操作时所述写操作的操作顺序。
[0015] 本实施例的有益效果为:当数据对象包括基本数据单元集合时,每一个基本数据单元集合携带一个顺序标识,能够减少内存的浪费。
[0016] 在一个可能的设计中,当所述数据对象包括所述基本数据单元集合时,所述根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,将所述数据集合拆分为所述基本数据单元集合。
[0017] 在一个可能的设计中,所述数据集合包括所述数据库的表或者分区,所述基本数据单元集合包括所述数据库的桶,所述将所述数据集合拆分为所述基本数据单元集合,通过以下方式实现:对所述表或者所述分区中的所述基本数据单元进行桶操作,分组为至少两个所述桶。
[0018] 本实施例的有益效果为:基于表或分区来实现基本数据单元的分组机制,可以保证事务日志偏序关系实现的通用性和便捷性。
[0019] 在一个可能的设计中,所述根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,对所述至少一个被读数据对象和所述被写数据对象对应的所述桶加读锁。
[0020] 本实施例的有益效果为:保证当前事务能够读取准确的数据对象。
[0021] 在一个可能的设计中,所述对所述被写数据对象执行所述第一写操作之前,对所述被写数据对象对应的所述桶加写锁。
[0022] 本实施例的有益效果为:保证当前事务能够顺利准确的对被写数据对象对应的桶进行写操作。
[0023] 在一个可能的设计中,所述日志序列标识为日志顺序号LSN或时间戳。
[0024] 在一个可能的设计中,所述被读数据对象用于对所述被写数据对象进行所述写操作,具体通过以下方式实现,事务在对被写数据对象执行写操作之前,对被读数据对象执行读取操作。
[0025] 在一个可能的设计中,所述根据所述至少一个被读数据对象携带的所述顺序标识和所述被写数据对象携带的所述顺序标识,确定对所述被写数据对象进行所述写操作对应的所述操作顺序标识,通过以下方式实现:在事务生成后读取第一个被读数据对象时,将所述第一个被读数据对象携带的顺序标识记录为所述操作顺序标识的临时值,后续在所述事务每读取一个被读数据对象或者被写数据对象时,将当前记录的所述操作顺序标识的临时值与当前读取的数据对象携带的顺序标识进行比较,在当前读取的数据对象携带的顺序标识大于当前记录的所述操作顺序标识的临时值时,将当前记录的所述操作顺序标识的临时值替换为当前读取的数据对象携带的顺序标识;将最终更新记录的所述操作顺序标识的临时值的下一个顺序标识确定为所述操作顺序标识。
[0026] 本实施例的有益效果为:可以保证事务日志之间的偏序关系,在故障恢复时,确保正确的事务日志恢复顺序。
[0027] 第二方面,提供一种日志管理装置,该日志管理装置具有实现上述第一方面以及可能的设计方法中的任一种方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块。该日志管理装置能够将事务日志附加上一个局部有序的操作顺序标识,在故障恢复时,可以通过事务日志中携带的操作顺序标识,确定各个事务日志的偏序关系,从而提高通过事务日志恢复数据的并行度,并保证通过事务日志恢复数据的有效性和正确性,提高数据库的处理速度,提升数据库性能。
[0028] 第三方面,提供一种日志管理装置,该日志管理装置包括存储器和处理器,其中,所述存储器用于存储一组程序,所述处理器用于调用所述存储器存储的程序以执行如上述第一方面和可能的设计中的任一种所述的方法。
[0029] 在一个可能的设计中,该日志管理装置应用于数据库,所述数据库包括事务日志和数据集合,所述数据集合包括至少两个数据对象,所述数据对象携带顺序标识,所述顺序标识用于表征所述数据对象最后一次被执行写操作时所述写操作的操作顺序,所述事务日志用于记录所述写操作以及所述写操作的操作顺序,所述数据对象包括至少一个被读数据对象和一个被写数据对象,所述处理器用于:根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序;根据从所述至少一个被读数据对象读取的数据,对所述被写数据对象执行所述第一写操作;将所述第一写操作和已确定的所述操作顺序写入所述事务日志,并且将所述被写数据对象携带的顺序标识替换为所述已确定的操作顺序对应的顺序标识。
[0030] 本实施例的有益效果为:能够将事务日志附加上一个局部有序的顺序标识,在故障恢复时,可以通过事务日志中携带的顺序标识,确定各个事务日志的偏序关系,从而提高通过事务日志恢复数据的并行度,并保证通过事务日志恢复数据的有效性和正确性,提高数据库的处理速度,提升数据库性能。
[0031] 在一个可能的设计中,所述处理器用于:遍历所述至少一个被读数据对象携带的所述顺序标识和所述被写数据对象携带的所述顺序标识,从被遍历的所述顺序标识所表征的操作顺序中,选择最后执行的操作顺序;确定所述最后执行的操作顺序的下一个操作顺序为所述第一写操作的操作顺序。
[0032] 本实施例的有益效果为:能够保证事务日志间的逻辑顺序的准确性,在实现通过事务日志恢复数据时保证事务日志间偏序关系的正确性。
[0033] 在一个可能的设计中,所述最后执行的操作顺序为N,所述N为任意自然数,所述处理器用于:确定所述第一写操作的操作顺序为N+1。
[0034] 在一个可能的设计中,所述事务日志包括至少两个子事务日志,任意两个所述子事务日志记录的所述操作顺序相互独立;所述处理器还用于:将所述第一写操作和已确定的所述操作顺序写入用于记录不独立于所述第一写操作的所述子事务日志。
[0035] 本实施例的有益效果为:去除了日志管理的临界区,使得事务日志不需要再全局有序,有利于提升数据库处理并行度的实现。
[0036] 在一个可能的设计中,所述数据对象包括基本数据单元或者基本数据单元集合,所述基本数据单元集合包括至少两个所述基本数据单元;对应的,所述数据对象携带顺序标识,所述顺序标识用于表征所述数据对象最后一次被执行写操作时所述写操作的操作顺序,包括:所述基本数据单元携带所述顺序标识,所述顺序标识用于表征所述基本数据单元最后一次被执行写操作时所述写操作的操作顺序,或者,所述基本数据单元集合携带所述顺序标识,所述顺序标识用于表征所述基本数据单元集合中的任一基本数据单元最后一次被执行写操作时所述写操作的操作顺序。
[0037] 本实施例的有益效果为:当数据对象包括基本数据单元集合时,每一个基本数据单元集合携带一个顺序标识,能够减少内存的浪费。
[0038] 在一个可能的设计中,所述处理器还用于:当所述数据对象包括所述基本数据单元集合时,所述根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,将所述数据集合拆分为所述基本数据单元集合。
[0039] 在一个可能的设计中,所述数据集合包括所述数据库的表或者分区,所述基本数据单元集合包括所述数据库的桶,所述处理器还用于:对所述表或者所述分区中的所述基本数据单元进行桶操作,分组为至少两个所述桶。
[0040] 本实施例的有益效果为:基于表或分区来实现基本数据单元的分组机制,可以保证事务日志偏序关系实现的通用性和便捷性。
[0041] 在一个可能的设计中,所述处理器还用于:所述根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,对所述至少一个被读数据对象和所述被写数据对象对应的所述桶加读锁。
[0042] 本实施例的有益效果为:保证当前事务能够读取准确的数据对象。
[0043] 在一个可能的设计中,所述处理器还用于:所述对所述被写数据对象执行所述第一写操作之前,所述对所述被写数据对象进行所述写操作之前,对所述被写数据对象对应的所述桶加写锁。
[0044] 本实施例的有益效果为:保证当前事务能够顺利准确的对被写数据对象对应的桶进行写操作。
[0045] 在一个可能的设计中,所述操作顺序标识或者所述顺序标识包括:日志顺序号(LSN)或者时间戳。
[0046] 本申请实施例提出的日志管理方法及装置,通过对数据库中的数据对象附加顺序标识,保证了事务日志的局部顺序关系,提高了数据库故障恢复的并行度,同时保证了日志恢复时的正确性。

附图说明

[0047] 图1为本申请实施例中数据库系统示意图;
[0048] 图2为本申请实施例中数据库系统架构图;
[0049] 图3为本申请实施例中的一种示例性的日志管理方法的流程图;
[0050] 图4为本申请实施例中的一种示例性数据分组方式示意图;
[0051] 图5为本申请实施例中的另一种示例性的日志管理方法的流程图;
[0052] 图6为本申请实施例中的一种示例性事务日志管理架构图;
[0053] 图7为本申请实施例中的一种示例性日志管理装置结构图;
[0054] 图8为本申请实施例中的另一种示例性日志管理装置结构图。

具体实施方式

[0055] 为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
[0056] 鉴于现有技术中,在按照事务日志实现数据库故障恢复时,很难提升并行度从而阻碍数据库处理速度的提高的问题,本申请实施例提出了一种日志管理方法及装置,通过对数据库中的数据对象附加一个局部有序的顺序标识,实现事务日志的非全序关系的排序功能(非全序关系也可称为偏序关系)。本发明实施例基于事务日志的偏序关系来实现数据库故障恢复的并行度的提升,同时保证了日志恢复时的正确性。
[0057] 本申请实施例提供的方法适用于典型的数据库系统,可包括单机和分布式数据库系统。
[0058] 如图1所示,本申请实施例中一种可能的数据库系统架构包括客户端101、数据库102和磁盘103。应理解,客户端101可以有多种形式,比如台式机、笔记本电脑、人机交互界面等,可以以远程控制方式或者本地控制方式接入,不作限定。在一种实现方式中,客户端
101和数据库102处于同一硬件装置中,在另一种实现方式中,数据库102和磁盘103处于同一硬件装置中,在另一种实现方式中,客户端101、数据库102和磁盘103都处于同一硬件装置中,不作限定。具体的,以单机数据库系统为例,如图2所示,本申请实施例中的数据库102具备实现数据库管理系统可实现的功能,数据库102中包括执行器104、锁表模块105、数据缓存模块106、日志缓存模块107和其他管理模块108,磁盘103代表一种永久存储器,包括数据存储区域109和日志存储区域110。
[0059] 客户端101与数据库102进行数据交互,例如对数据库102中的数据进行查找、修改、插入、或删除等操作;执行器104用于执行数据库102的功能所对应的操作;锁表模块105用于实现数据库页面的加锁管理机制;数据缓存模块106用于缓存数据,日志缓存模块107用于缓存事务日志;数据存储区域109用于存储来自数据缓存模块106缓存的数据,日志存储区域110用于存储来自日志缓存模块107缓存的事务日志。
[0060] 基于图2所示的系统架构,一种可能的数据库工作过程为:数据库102在执行时,会在数据缓存模块106和日志缓存模块107中分别缓存数据和事务日志,在事件提交时会将事务日志写入磁盘103中的日志存储区域110,也会定期将数据写入磁盘中的数据存储区域109。但为了保证数据库102的性能,数据的写入是延后的,因为事务日志的连续集中写盘比数据的分散写盘要快得多。如果数据库102异常宕断,等下次启动时,为了保持数据的一致性,需要进行故障恢复,也就是需要将尚未写入磁盘的数据依据日志进行恢复。
[0061] 为了保证数据库故障时依据事务日志恢复数据的效率,本申请实施例中采用并行的方式进行日志恢复,下面将结合附图对本申请优选的实施例进行详细说明。
[0062] 本申请实施例提供的日志管理方法应用于数据库102,数据库102中包括事务日志和数据集合,分别缓存于数据缓存模块106和日志缓存模块107中。
[0063] 数据集合为从数据存储区域109加载来的数据,包括至少两个数据对象。该至少两个数据对象包括至少一个被读数据对象和一个被写数据对象,其中,被读数据对象和被写数据对象根据事务对数据对象的操作属性来确定,例如,事务执行读取操作的数据对象称为被读数据对象,事务执行写入操作的数据对象称为被写数据对象。被读数据对象用于对被写数据对象进行写操作,例如,事务在对被写数据对象进行写入操作前读取了被读数据对象,根据读取的被读数据对象的内容执行对被写数据对象的写入操作。应理解,任意一次事务中的被读数据对象所指代的数据对象可能成为另一次事务中的被写数据对象,任意一次事务中的被写数据对象所指代的数据对象也可能成为另一次事务中的被读数据对象。
[0064] 数据对象携带顺序标识,顺序标识用于表征数据对象最后一次被执行写操作时,该写操作的操作顺序。
[0065] 事务日志用于记录对上述数据对象进行的写操作以及写操作对应的操作顺序。应理解,每一次执行写操作的操作顺序,和在该写操作执行时,被执行的被写数据对象所携带的顺序标识存在对应关系;在本发明实施例中,可以用操作顺序标识表征对数据对象进行的写操作对应的顺序标识。该操作顺序可以用来确定所有写操作的相对逻辑顺序,以下方法流程中会具体介绍。上述顺序标识包括:日志顺序号(英文:Log Sequence Number,缩写:LSN)或者时间戳。LSN标识特定事务日志在事务日志文件中的位置。无论是LSN还是时间戳,都能够在根据事务日志恢复数据时确定事务日志的恢复顺序。
[0066] 如图3所示,本申请实施例提供的日志管理方法的流程如下所述。
[0067] 步骤201:根据所述至少一个被读数据对象携带的顺序标识和所述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序;
[0068] 步骤202:根据从所述至少一个被读数据对象读取的数据,对所述被写数据对象执行所述第一写操作;
[0069] 步骤203:将所述第一写操作和已确定的所述操作顺序写入所述事务日志,并且将所述被写数据对象携带的顺序标识替换为所述已确定的操作顺序对应的顺序标识。
[0070] 在步骤201中,可以遍历上述被读数据对象和被写数据对象携带的顺序标识,从被遍历的顺序标识所表征的操作顺序中,选择最后执行的操作顺序;分配最后执行的操作顺序的下一个操作顺序作为第一写操作的操作顺序。
[0071] 例如,上述最后执行的操作顺序为N,N为任意自然数,则第一写操作的操作顺序即为N+1。
[0072] 具体地,第一次选择被读数据对象时,确定所选择的被读数据对象携带的顺序标识并记录为操作顺序标识的临时值,后续每选择一个被读数据对象,将选择的被读数据对象携带的顺序标识与记录的操作顺序标识的临时值进行比较,若当前选择的被读数据对象携带的顺序标识所记录的操作顺序标识的临时值,则将所记录操作顺序标识的临时值替换为当前选择的被读数据对象携带的顺序标识,将更新记录的操作顺序标识的临时值与被写数据对象携带的顺序标识进行比较,将两者之间的较大值的下一个顺序标识记录为操作顺序标识。
[0073] 举个例子说明,假设事务T在对被写数据对象G1执行写操作之前,对若干个被读数据对象G2、G3……Gn分别执行的读取操作,每一个数据对象均携带一个顺序标识,假设G1、G2、G3……Gn携带的顺序标识分别用Gs1、Gs2、Gs3……Gsn表示,Gs1在G1被执行写操作后将被更新,更新后的Gs1与事务T对被写数据对象G1执行的写操作对应的操作顺序标识相同,该操作顺序标识=max{Gs1、Gs2、Gs3……Gsn}+△s,max为取最大值的运算,△s为每更新一个数据组合对应的事务产生的日志序列标识的增量。例如Gs1、Gs2、Gs3……Gsn为自然数时,△s=1。事务T在提交时,将事务T对被写数据对象G1执行的写操作以及写操作对应的操作顺序标识写入事务日志,根据这个写操作对应的操作顺序标识,可以确定事务T对被写数据对象G1执行的写操作的事务日志与其他事务日志之间的相对逻辑顺序。
[0074] 可选的,数据对象包括基本数据单元或者基本数据单元集合,其中,基本数据单元集合包括至少两个基本数据单元;对应的,数据对象携带顺序标识,顺序标识用于表征该数据对象最后一次被执行写操作时该写操作的操作顺序,包括:基本数据单元携带顺序标识,顺序标识用于表征该基本数据单元最后一次被执行写操作时该写操作的操作顺序,或者,基本数据单元集合携带顺序标识,顺序标识用于表征该基本数据单元集合中的任一基本数据单元最后一次被执行写操作时该写操作的操作顺序。
[0075] 具体的讲,上述数据对象可以为一个基本数据单元,例如一个数据项,那么每一个基本数据单元可以携带一个顺序标识,顺序标识为对这个基本数据单元执行最后一次写操作对应的顺序。但是,一个基本数据单元携带一个顺序标识难免会有些浪费存储空间,因此,为了节省存储空间,上述数据对象也可以为基本数据单元集合,例如,一个基本数据单元集合包括若干个数据项,一个基本数据单元集合携带一个顺序标识,这个基本数据单元集合中的任意一个基本数据单元被执行写操作时都会对应的更新这个基本数据单元集合的顺序标识。
[0076] 在数据对象为基本数据单元集合这种情况时,在根据上述至少一个被读数据对象携带的顺序标识和被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,将数据集合拆分为基本数据单元集合。也就是,根据一定的原则将数据集合拆分为若干个基本数据单元集合。一种可能的实现方式是利用现有数据库中的表机制或者分区机制来实现。
[0077] 具体地,数据集合包括数据库的表(即table)或者分区(即partition),基本数据单元集合包括数据库的桶(即bucket),对表或者分区中的基本数据单元进行桶操作(即hive),分组为至少两个桶,一个桶代表一个基本数据单元集合,包括若干个基本数据单元。第一基本数据单元集合可以称为第一桶,第二基本数据单元集合可以称为第二桶。例如,如图4所示,在现有的数据库管理系统中,表301已经将数据进行了分组,每个桶302代表一个基本数据单元集合。
[0078] 可选的,在这种情况下,上述步骤201中,在根据上述至少一个被读数据对象携带的顺序标识和被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,对上述至少一个被读数据对象和被写数据对象对应的桶加读锁,即对第一桶和第二桶加读锁,从而使事务读取第一桶和第二桶中的数据;
[0079] 可选的,在这种情况下,上述步骤202中,根据从上述至少一个被读数据对象读取的数据,对被写数据对象执行第一写操作之前,对被写数据对象对应的桶加写锁,即第二桶加写锁,从而使事务对第二桶中的数据执行写操作。
[0080] 下面结合数据集合包括数据库的表、基本数据单元集合包括数据库的桶这种具体的应用场景对本申请实施例提供的日志管理方法作进一步详细的说明。
[0081] 参阅图5所示,日志管理方法的流程如下所述。
[0082] 步骤401:判断事务是否提交,若是,则执行步骤408;否则执行步骤402。
[0083] 步骤402:判断事务是否读取第一桶中的数据,若是,则执行步骤403,否则执行步骤406。
[0084] 步骤403:记录读取的第一桶携带的顺序标识。
[0085] 步骤404:比较该第一桶携带的顺序标识是否比针对当前事务所记录的操作顺序标识的临时值大,若是,则执行步骤405;否则,返回执行步骤402。
[0086] 步骤405:将当前事务所记录的操作顺序标识的临时值替换为第一桶携带的顺序标识。
[0087] 步骤406:判断事务是否对第二桶执行写入操作,若是,则执行步骤407,否则返回步骤401。
[0088] 这里的写入操作包括更改、删除等的操作。
[0089] 步骤407:比较当前事务所记录的操作顺序标识的临时值与第二桶携带的顺序标识的大小,将两者中较大者的下一个顺序标识替换为当前事务所记录的操作顺序标识,继续返回执行401。
[0090] 步骤408:将事务对第二桶执行写操作以及记录的操作顺序标识写入事务日志,并在事务提交时,将事务日志写入磁盘对应的日志存储区域。其中,将记录的操作顺序标识添加在事务日志的头部。
[0091] 可选的,上述步骤202中所述的事务日志包括至少两个子事务日志,任意两个子事务日志记录的操作顺序标识相互独立;当对被写数据对象进行写操作时,将写操作以及写操作对应的操作顺序标识写入对应的子事务日志。应理解,该对应的子事务日志只记录与上述写操作存在依赖关系,即不独立于上述写操作的其它写操作。去除了日志管理的临界区,使得事务日志不需要再全局有序,有利于提升数据库处理并行度的实现。
[0092] 参阅图6所示,三个不同的用户通过不同的客户端101与数据库102进行数据交互,假设分别为客户端1、客户端2和客户端3表示,分别产生事务1、事务2、事务3,每个事务在日志存储区域110中拥有独立的日志记录空间,假设分别用日志存储区域1、日志存储区域2和日志存储区域3表示,每个事务将处理的事务日志分别写到对应的日志存储区域110中,彼此不冲突,可以做到日志操作的完全并行化,最大程度地保证了日志缓存的并发扩展能力。在根据事务日志恢复数据时,从不同的日志存储区域中读出的事务日志,根据它们中携带的操作顺序标识确定日志重放的先后次序。
[0093] 基于同一发明构思,本申请实施例还提供了一种日志管理装置,该日志管理装置具有实现上述日志管理方法的功能,该功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。
[0094] 参阅图7所示,一种可能的实现方式为,该日志管理装置600包括:写入单元601和标识分配单元602。
[0095] 写入单元601,用于根据从至少一个被读数据对象读取的数据,对被写数据对象执行第一写操作;
[0096] 标识分配单元602,用于根据上述至少一个被读数据对象携带的顺序标识和上述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序;
[0097] 写入单元601,还用于将上述第一写操作和已确定的操作顺序写入事务日志;
[0098] 标识分配单元602,还用于将上述被写数据对象携带的顺序标识替换为已确定的操作顺序对应的顺序标识。
[0099] 可选的,标识分配单元602用于:
[0100] 遍历上述至少一个被读数据对象携带的顺序标识和上述被写数据对象携带的顺序标识,从被遍历的顺序标识所表征的操作顺序中,选择最后执行的操作顺序;
[0101] 确定上述最后执行的操作顺序的下一个操作顺序为第一写操作的操作顺序。
[0102] 可选的,若最后执行的操作顺序为N,N为任意自然数,标识分配单元602用于:确定第一写操作的操作顺序为N+1。
[0103] 可选的,事务日志包括至少两个子事务日志,任意两个子事务日志记录的操作顺序相互独立;写入单元601用于:将第一写操作和已确定的操作顺序写入用于记录不独立于第一写操作的子事务日志。
[0104] 可选的,数据对象包括基本数据单元或者基本数据单元集合,其中,基本数据单元集合包括至少两个基本数据单元;
[0105] 对应的,数据对象携带顺序标识,顺序标识用于表征数据对象最后一次被执行写操作时该写操作的操作顺序,包括:基本数据单元携带顺序标识,顺序标识用于表征基本数据单元最后一次被执行写操作时该写操作的操作顺序,或者,基本数据单元集合携带顺序标识,顺序标识用于表征基本数据单元集合中的任一基本数据单元最后一次被执行写操作时该写操作的操作顺序。
[0106] 可选的,当数据对象包括基本数据单元集合时,装置600还包括分组单元603;
[0107] 分组单元603,用于在标识分配单元602根据上述至少一个被读数据对象携带的顺序标识和上述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,将数据集合拆分为基本数据单元集合。
[0108] 可选的,数据集合包括数据库的表或者分区,基本数据单元集合包括数据库的桶,分组单元603用于:对表或者分区中的基本数据单元进行桶操作,分组为至少两个桶。
[0109] 可选的,所述装置600还包括锁定单元604;
[0110] 锁定单元604,用于在标识分配单元602根据上述至少一个被读数据对象携带的顺序标识和上述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,对上述至少一个被读数据对象和上述被写数据对象对应的桶加读锁。
[0111] 可选的,锁定单元604,还用于在写入单元601对上述被写数据对象执行第一写操作之前,对上述被写数据对象对应的桶加写锁。
[0112] 可选的,操作顺序标识或者顺序标识包括:日志顺序号或者时间戳。
[0113] 基于同一发明构思,参阅图8所示,本申请实施例还提供一种日志管理装置700,该日志管理装置700应用于数据库,数据库包括事务日志和数据集合,数据集合包括至少两个数据对象,数据对象携带顺序标识,顺序标识用于表征数据对象最后一次被执行写操作时该写操作的操作顺序,事务日志用于记录写操作以及该写操作的操作顺序,数据对象包括至少一个被读数据对象和一个被写数据对象,该日志管理装置700包括存储器701和处理器702,其中,存储器701用于存储一组程序,处理器702用于调用存储器701存储的程序以执行如上述日志管理方法。处理器702用于:根据上述至少一个被读数据对象携带的顺序标识和上述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序;根据从至少一个被读数据对象读取的数据,对被写数据对象执行第一写操作;将第一写操作和已确定的操作顺序写入事务日志,并且将被写数据对象携带的顺序标识替换为已确定的操作顺序对应的顺序标识。这样,能够将事务日志附加上一个局部有序的操作顺序标识,在故障恢复时,可以通过事务日志中携带的操作顺序标识,确定各个事务日志的偏序关系,从而提高通过事务日志恢复数据的并行度,并保证通过事务日志恢复数据的有效性和正确性,提高数据库的处理速度,提升数据库性能。
[0114] 可选的,处理器702用于:遍历上述至少一个被读数据对象携带的顺序标识和上述被写数据对象携带的顺序标识,从被遍历的顺序标识所表征的操作顺序中,选择最后执行的操作顺序;确定最后执行的操作顺序的下一个操作顺序为第一写操作的操作顺序。这样,能够保证事务日志间的逻辑顺序的准确性,在实现通过事务日志恢复数据时保证事务日志间偏序关系的正确性。
[0115] 可选的,最后执行的操作顺序为N,N为任意自然数,处理器702用于:确定第一写操作的操作顺序为N+1。
[0116] 可选的,事务日志包括至少两个子事务日志,任意两个子事务日志记录的操作顺序相互独立;处理器702还用于:将第一写操作和已确定的操作顺序写入用于记录不独立于第一写操作的子事务日志。这样,去除了日志管理的临界区,使得事务日志不需要再全局有序,有利于提升数据库处理并行度的实现。
[0117] 可选的,数据对象包括基本数据单元或者基本数据单元集合,基本数据单元集合包括至少两个基本数据单元;对应的,数据对象携带顺序标识,顺序标识用于表征数据对象最后一次被执行写操作时该写操作的操作顺序,包括:基本数据单元携带顺序标识,顺序标识用于表征基本数据单元最后一次被执行写操作时该写操作的操作顺序,或者,基本数据单元集合携带顺序标识,顺序标识用于表征基本数据单元集合中的任一基本数据单元最后一次被执行写操作时该写操作的操作顺序。当数据对象包括基本数据单元集合时,每一个基本数据单元集合携带一个顺序标识,能够减少内存的浪费。
[0118] 可选的,处理器702还用于:当数据对象包括基本数据单元集合时,根据上述至少一个被读数据对象携带的顺序标识和上述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,将数据集合拆分为基本数据单元集合。
[0119] 可选的,数据集合包括数据库的表或者分区,基本数据单元集合包括数据库的桶,处理器702还用于:对表或者分区中的基本数据单元进行桶操作,分组为至少两个桶。这样,基于表或分区来实现基本数据单元的分组机制,可以保证事务日志偏序关系实现的通用性和便捷性。
[0120] 可选的,处理器702还用于:根据上述至少一个被读数据对象携带的顺序标识和上述被写数据对象携带的顺序标识,确定待执行的第一写操作的操作顺序之前,对至少一个被读数据对象和被写数据对象对应的桶加读锁。保证当前事务能够顺利准确的读取数据对象。
[0121] 可选的,处理器702还用于:对上述被写数据对象执行第一写操作之前,对被写数据对象对应的桶加写锁。保证当前事务能够顺利准确的对被写数据对象对应的桶进行写操作。
[0122] 可选的,操作顺序标识或者顺序标识包括:日志顺序号(LSN)或者时间戳。
[0123] 处理器702可以是中央处理器(英文:central processing unit,缩写:CPU),网络处理器(英文:network processor,缩写:NP)或者CPU和NP的组合。
[0124] 处理器702还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(英文:application-specific integrated circuit,缩写:ASIC),可编程逻辑器件(英文:programmable logic device,缩写:PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(英文:complex programmable logic device,缩写:CPLD),现场可编程逻辑门阵列(英文:
field-programmable gate array,缩写:FPGA),通用阵列逻辑(英文:generic array logic,缩写:GAL)或其任意组合。
[0125] 存储器701可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM);存储器701也可以包括非易失性存储器(英文:non-volatile memory),例如快闪存储器(英文:flash memory),硬盘(英文:hard disk drive,缩写:HDD)或固态硬盘(英文:solid-state drive,缩写:SSD);存储器701还可以包括上述种类的存储器的组合。
[0126] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0127] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0128] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0129] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0130] 尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
[0131] 显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请实施例的精神和范围。这样,倘若本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。