一种数据库恢复方法和装置与流程

文档序号:25543616发布日期:2021-06-18 20:40
一种数据库恢复方法和装置与流程
本申请涉及数据库
技术领域
,尤其涉及一种生成数据库恢复文件的方法、以及恢复数据库的方法。
背景技术
:通常,在数据库系统中通过预写式日志(write-aheadlogging,wal)来确保数据完整性。wal的中心思想是,对数据库文件的修改必须只能发生在这些修改已经记录到日志之后,从而在将这些修改记录到日志之后,便可以返回修改成功,而不需要等到将数据页写入持久性存储介质之后。在出现数据库崩溃的情况下,可通过日志来恢复数据库。另外,在wal技术中,还使用检查点技术(checkpoint,ckpt)来缩短数据库恢复时间。检查点与预设的时间点相对应,检查点技术是在预设的时间点将内存中在该检查点之前被修改的数据写入持久性介质中,从而,在通过日志恢复数据库时,可只对检查点之后数据通过日志进行恢复,从而可减少wal日志的回放量,缩短数据库的恢复时间。目前的存储介质都是以固定粒度为单位读写数据,例如固态硬盘(solidstatedrive,ssd)以页为单位读写数据,而硬盘(harddiskdrive,hdd)以扇区为单位读写数据,但对数据库中的一条记录的修改可能只占用所述固定粒度中的几个字节。以存储在ssd中的数据库为例,在通过日志对对检查点之后被修改的记录进行恢复时,由于ssd以页为单位读写数据,即便是待恢复的记录只占用了一页中的几个字节,也需要把整页数据读出到内存,从而使增加了数据库恢复的时间。技术实现要素:本发明一方面提供一种由数据库服务器执行的数据库恢复方法,所述数据库服务器中存储有恢复文件,所述恢复文件与检查时刻相对应,包括在检查时刻数据表中的每个记录行的数据的存储地址,所述方法包括:在所述数据库服务器故障后,从所述恢复文件中获取在检查时刻所述数据表中每个记录行的数据的存储地址;在所述数据库服务器的内存中生成映射表,该映射表中包括与所述数据表的记录行一一对应的各行,将所述恢复文件中记录的所述数据表的每个记录行的数据的存储地址记录至所述映射表中每个记录行对应的行中。通过该方法生成映射表,可通过映射表找到数据表在所述预设时刻的记录行数据,从而恢复出所述预设时刻的数据表。在一种实施方式中,所述方法还包括,在生成所述第一映射表之后,获取在所述预设时刻之后所述数据表中的记录行的数据变化;基于所述数据表中的记录行的数据变化修改所述第一映射表中与所述记录行对应的行。在一种实施方式中,所述方法还包括,获取在所述检查时刻之后,所述数据表中被更改的记录行的数据的存储地址;用所述被更改的记录行的数据的存储地址替换所述映射表中与所述被更改的记录行对应的行中的存储地址。在一种实施方式中,所述方法还包括,获取在所述检查时刻之后所述数据表中新插入的记录行的数据的存储地址;在所述映射表中与所述新插入的记录行对应的行中记录所述新插入的记录行的数据的存储地址。在一种实施方式中,所述方法还包括,确定在所述检查时刻之后所述数据表中删除的记录行;在所述映射表中与所述删除的记录行对应的行进行标注,以指示该行对应的记录行被删除。在本发明中,通过在恢复文件中记录在检查时刻的数据库各个记录行的数据的存储地址,从而在进行数据库恢复时,通过读取恢复文件可恢复出包括所述各个存储地址的映射表,即恢复出在所述检查时刻的映射表,再通过读取在该检查时刻之后修改、插入、删除的数据表中的数据,从而可恢复出在故障之前的映射表,在恢复出映射表之后,即可通过映射表获取数据表中各个记录行的数据的存储地址,从而可读取各个记录行的数据,也即恢复了数据表。从而,通过与检查时刻对应的恢复文件的方式,不需要从介质中存储的数据表的第一个数据开始读取以恢复出映射表,从而可较快地进行数据表的恢复。另外,对于字节级的持久性介质,通过该方案,可对在检查时刻之后的各个记录行的数据进行字节级的读取,从而加快了数据库恢复速度。在一种实施方式中,在所述数据库服务器故障前,所述方法还包括:每隔一段时间设置一个检查时刻,每到达一个检查时刻,从内存中存储的第二映射表中获取在该检查时刻所述数据表的每个记录行的数据的存储地址;生成全量检查点文件,将获取的在所述检查时刻所述数据表的每个记录行的数据的存储地址记录至全量检查点文件中;在所述数据库服务器故障后,将对应的检查时刻离所述数据库故障的时间最近的全量检查点文件作为所述恢复文件。在该实施方式中,通过每隔一段时间生成全量检查点文件,从而可每隔一段时间生成最新的全量检查点文件,并在数据库恢复时使用该最新的全量检查点文件进行恢复,从而可较快地进行数据表的恢复。在一种实施方式中,在所述数据库服务器故障前,所述方法还包括:在第一个检查时刻,从内存中存储的所述数据表对应的第二映射表中获取所述数据表的每个记录行的数据的存储地址,所述第二映射表为所述数据库服务器故障前用于记录所述数据表中的数据的存储地址,所述第一映射表包括与所述数据表的记录行一一对应的各行,将获取的所述数据表的每个记录行的数据的存储地址记录至全量检查点文件中;在第一个检查时刻之后,每隔一段时间设置一个检查时刻,每到达一个检查刻时,从所述第二映射表中获取在上次检查时刻之间和本次检查时刻之间产生的新数据的存储地址,以及在两次检查时刻之间删除的记录行,并将该记录行对应的第二映射表的行及所述数据的存储地址记录至增量检查点文件,将删除的记录行对应的第二映射表的行及预定标注记录至增量检查点文件;在所述数据库服务器故障后,以所述全量检查点文件及所有的增量检查点文件作为所述恢复文件。在一种实施方式中,在所述数据库服务器故障前,所述方法还包括:每隔一段时间设置一个检查时刻,每到达一个检查时刻,判断所述数据表的热度是否大于一预设值;若所述数据表的热度大于等于所述预设值,则从内存中存储的第二映射表中获取在该检查时刻所述数据表的每个记录行的数据的存储地址;生成全量检查点文件,将获取的在所述检查时刻所述数据表的每个记录行的数据的存储地址记录至全量检查点文件中;若所述数据表的热度小于所述预设值,则从所述第二映射表中获取在上次检查时刻与本次检查时刻之间产生的所述数据表的记录行的新数据的存储地址,并从所述第二映射表中获取在上次检查时刻与本次检查时刻之间删除的数据表的记录行;生成增量检查点文件,将所述新数据对应的第二映射表中的行标识及所述新数据的存储地址记录至增量检查点文件,并将所述删除的记录行对应的第二映射表中的行标识及对其的预定标注记录至增量检查点文件;在所述数据库服务器故障后,将检查时刻离所述数据库故障的时间最近的全量检查点文件、及检查时刻在该全量检查点文件之后的增量检查点文件作为所述恢复文件。在该实施方式中,在每次检查时刻,基于数据表的热度确定是生成全量检查点文件还是增量检查点文件,在热度较低时,也即在上一次检查时刻与本次检查时刻之间数据表的访问较少,通过生成增量检查点文件,使得可以减少对数据地址的重复记录,节省了存储资源,并且也减少了重复工作量和计算资源。在一种实施方式中,所述数据库服务器中还存储有控制文件,所述方法还包括,每到达一个检查时刻,在该检查时刻之后,在所述控制文件中记录数据表中在该检查时刻之后存入的数据的存储地址,其中,在所述数据库服务器故障后,基于所述控制文件获取在所述检查时刻之后,所述数据表中被更改的记录行的数据的存储地址。在该实施方式中,通过控制方式记录检查时刻之后存入的数据的地址,在数据表恢复时,在通过恢复文件恢复映射表之后,可从控制文件读取在该检查时刻之后存入的数据的存储地址,从而可基于该地址直接读取到在检查时刻之后存入的数据,节省了读取时间。在一种实施方式中,在所述数据库服务器故障前,所述数据库服务器的内存中包括第二映射表,所述第二映射表被划分为多个分区,每个分区包括多个行;所述方法还包括:每隔一段时间设置一个检查时刻,每到达一个检查时刻时,判断每个分区对应的数据表的记录行的热度是否大于一预设值;若所述分区对应的数据表的记录行的热度大于等于所述预设值,则从所述分区中获取在该检查时刻所述分区对应的每个记录行的数据的存储地址;生成该分区的全量检查点文件,将获取的在该检查时刻所述分区对应的每个记录行的数据的存储地址记录至所述全量检查点文件中;若所述分区对应的数据表的记录行热度小于所述预设值,则从所述分区中获取在上次检查时刻与本次检查时刻之间产生的数据表的记录行的新数据的存储地址,并从所述分区中获取在上次检查时刻与本次检查时刻之间删除的数据表的记录行;生成该分区的增量检查点文件,将所述新数据对应的第二映射表中的行标识及所述新数据的存储地址记录至增量检查点文件,并将所述删除的记录行对应的第二映射表中的行标识及对其的预定标注记录至增量检查点文件;在所述数据库服务器故障后,将检查时刻离所述数据库故障的时间最近的所述分区的全量检查点文件、及检查时刻在该全量检查点文件之后的所述分区的增量检查点文件作为所述分区的恢复文件。在该实施方式中,通过将映射表分为多个分区,并且相对于每个分区基于该分区的热度生成全量检查点文件或增量检查点文件,从而相对于更小的粒度来生成全量检查点文件或增量检查点文件,每个分区的热度更准确地体现了该分区中各个记录行的访问热度,从而使得增量检查点文件中记录的数据量可进一步减少,从而进一步节省了存储资源、计算资源等。在一种实施方式中,所述数据库服务器中存储有日志文件,所述方法还包括:接收记录行插入请求,所述记录行插入请求包括插入记录行数据;在所述日志文件中生成一条插入行日志,将所述插入记录行数据记录在所述插入行日志中;将所述插入行日志的存储地址记录在所述第二映射表与所述插入记录行对应的行中。在该实施方式中,通过在日志中记录数据表的记录行数据,并将日志地址记录到映射表中与该记录行对应的行中,从而完成了数据下盘的过程,而不需要再将日志中的数据存入到数据文件中,并且在该数据下盘的过程中,对于字节级持久性介质,可进行字节级的写入,节省了存储资源、存储时间和计算资源。在一种实施方式中,所述日志文件中的每个日志被分配有体现时间先后顺序的日志序列号,所述检查时刻以所述日志文件中的一个日志序列号表示,所述方法还包括:在生成所述插入行日志时,为所述插入行日志分配一个日志序列号;其中,将所述日志的存储地址记录在所述第二映射表与所述插入记录行对应的行中包括,在所述映射表中与所述插入记录行对应的行中生成一个节点描述,所述节点描述中包括所述插入行日志的存储地址和日志序列号,以通过所述日志序列号标识所述插入行日志中的数据为所述插入记录行的当前数据。在该实施方式中,通过按时间先后顺序对日志分配日志序列号,并且以与检查时刻对应的一个日志序列号作为检查点序列号,从而可通过在映射表中的节点描述中加入日志序列号,来确定相应的数据的有效性。在一种实施方式中,所述方法还包括:接收记录行修改请求,所述记录行修改请求包括针对记录行的修改信息;在所述日志文件中生成一条修改行日志,将经修改的记录行的记录行在所述修改行日志中;将所述修改行日志的存储地址记录在所述第二映射表中与所述修改的记录行对应的行中。在该实施方式中,通过在日志中记录数据表的修改后的记录行数据,并将日志地址记录到映射表中与该记录行对应的行中,从而完成了数据下盘的过程,而不需要再将日志中的数据存入到数据文件中,并且在该修改的数据下盘的过程中,对于字节级持久性介质,可进行字节级的读取和写入,节省了存储资源、存储时间和计算资源。在一种实施方式中,所述方法还包括:接收记录行读取请求;从所述第二映射表中的与所述记录行对应的行中获取所述记录行数据对应的日志的存储地址;基于所述存储地址读取所述记录行的数据;返回所述记录行的数据。在该实施方式中,对于字节级持久性介质,可通过映射表获取相应记录行的数据的存储地址,并可从该地址进行字节级的读取,加快了读取速度。在一种实施方式中,所述方法还包括:接收记录行删除请求;在所述日志文件中生成一条删除行日志,所述删除行日志中与记录行对应的数据区为空;在所述第二映射表中与所述记录行对应的行中进行删除标记。在该实施方式中,通过在日志中记录数据表的记录行的删除,并在映射表中进行标记,从而完成了记录行的删除,而不需要进行真实的数据删除动作,节省了计算资源。在一种实施方式中,所述方法还包括,在生成所述删除行日志时,为所述删除行日志分配一个日志序列号,其中,在所述第二映射表中与所述记录行对应的行中进行删除标记包括,在所述第二映射表中与所述记录行对应的行中的节点描述中记录所述删除行日志的日志序列号,以标记所述记录行被删除。本发明另一方面提供一种部署于数据库服务器中的数据库恢复装置,所述数据库服务器中存储有恢复文件,所述恢复文件与检查时刻相对应,所述恢复文件包括在检查时刻数据表中的每个记录行的数据的存储地址,所述装置包括:第一获取单元,用于在所述数据库服务器故障后,从所述恢复文件中获取在检查时刻所述数据表中每个记录行的数据的存储地址;第一生成单元,用于在所述数据库服务器的内存中生成第一映射表,所述第一映射表中包括与所述数据表的记录行一一对应的各行,将所述恢复文件中记录的所述数据表的每个记录行的数据的存储地址记录至所述映射表中每个记录行对应的行中。在一种实施方式中,所述数据库恢复装置还包括,第二获取单元,用于获取在所述预设时刻之后所述数据表中的记录行的数据变化;修改单元,用于基于所述数据表中的记录行的数据变化修改所述第一映射表中与所述记录行对应的行。在一种实施方式中,所述装置还包括,第三获取单元,用于获取在所述检查时刻之后,所述数据表中被更改的记录行的数据的存储地址;替换单元,用于用所述被更改的记录行的数据的存储地址替换所述映射表中与所述被更改的记录行对应的行中的存储地址。在一种实施方式中,所述装置还包括,第四获取单元,用于在将所述恢复文件中记录的所述数据表的每个记录行的数据的存储地址记录至所述映射表中每个记录行对应的行中之后,获取在所述检查时刻之后所述数据表中新插入的记录行的数据的存储地址;记录单元,用于在所述映射表中与所述新插入的记录行对应的行中记录所述新插入的记录行的数据的存储地址。在一种实施方式中,所述装置还包括,确定单元,用于在将所述恢复文件中记录的所述数据表的每个记录行的数据的存储地址记录至所述映射表中每个记录行对应的行中之后,确定在所述检查时刻之后所述数据表中删除的记录行;标注单元,用于在所述映射表中与所述删除的记录行对应的行进行标注,以指示该行对应的记录行被删除。在一种实施方式中,在所述数据库服务器故障前,所述装置还包括第一运行模块,所述第一运行模块包括:获取子单元,用于每隔一段时间设置一个检查时刻,每到达一个检查时刻,从内存中存储的所述数据表对应的第二映射表中获取在该检查时刻所述数据表的每个记录行的数据的存储地址;生成子单元,用于生成全量检查点文件,将获取的在所述检查时刻所述数据表的每个记录行的数据的存储地址记录至全量检查点文件中;在所述数据库服务器故障后,将对应的检查时刻离所述数据库故障的时间最近的全量检查点文件作为所述恢复文件。在一种实施方式中,在所述数据库服务器故障前,所述装置还包括第二运行模块,所述第二运行模块包括:判断子单元,用于每隔一段时间设置一个检查时刻,每到达一个检查时刻,判断所述数据表的热度是否大于一预设值;第一获取子单元,用于若所述数据表的热度大于等于所述预设值,则从内存中存储的所述数据表对应的第二映射表中获取在该检查时刻所述数据表的每个记录行的数据的存储地址;第一生成单元,用于生成全量检查点文件,将获取的在所述检查时刻所述数据表的每个记录行的数据的存储地址记录至全量检查点文件中;第二获取子单元,用于若所述数据表的热度小于所述预设值,则从所述第二映射表中获取在上次检查时刻与本次检查时刻之间产生的所述数据表的记录行的新数据的存储地址,并从所述第二映射表中获取在上次检查时刻与本次检查时刻之间删除的数据表的记录行;第二生成单元,用于生成增量检查点文件,将所述新数据对应的第二映射表中的行标识及所述新数据的存储地址记录至增量检查点文件,并将所述删除的记录行对应的第二映射表中的行标识及对其的预定标注记录至增量检查点文件;在所述数据库服务器故障后,将检查时刻离所述数据库故障的时间最近的全量检查点文件、及检查时刻在该全量检查点文件之后的增量检查点文件作为所述恢复文件。在一种实施方式中,所述数据库服务器中还存储有控制文件,所述第二运行模块还包括,记录子单元,用于每到达一个检查时刻,在该检查时刻之后,在所述控制文件中记录数据表中在该检查时刻之后存入的数据的存储地址,其中,所述第二获取单元还用于在所述数据库服务器故障后,基于所述控制文件获取在所述检查时刻之后所述数据表中被更改的记录行的数据的存储地址。在一种实施方式中,在所述数据库服务器故障前,所述数据库服务器的内存中包括第二映射表,所述第二映射表被划分为多个分区,每个分区包括多个行;所述装置还包括第三运行模块,所述第三运行模块包括:判断子单元,用于每隔一段时间设置一个检查时刻,每到达一个检查时刻时,判断每个分区对应的数据表的记录行的热度是否大于一预设值;第一获取子单元,用于若所述分区对应的数据表的记录行的热度大于等于所述预设值,则从所述第二映射表中获取在该检查时刻所述分区对应的每个记录行的数据的存储地址;第一生成子单元,用于生成该分区的全量检查点文件,将获取的在该检查时刻所述分区对应的每个记录行的数据的存储地址记录至所述全量检查点文件中;第二获取子单元,用于若所述分区对应的数据表的记录行热度小于所述预设值,则从所述第二映射表中获取在上次检查时刻与本次检查时刻之间产生的所述分区对应的数据表的记录行的新数据的存储地址;第二生成子单元,用于生成该分区的增量检查点文件并将所述新数据对应的第二映射表中的行标识及所述新数据的存储地址记录至增量检查点文件;在所述数据库服务器故障后,将检查时刻离所述数据库故障的时间最近的所述分区的全量检查点文件、及检查时刻在该全量检查点文件之后的所述分区的增量检查点文件作为所述分区的恢复文件。在一种实施方式中,所述数据库服务器中存储有日志文件,所述装置还包括插入模块,所述插入模块包括:接收子单元,用于接收记录行插入请求,所述记录行插入请求包括插入记录行数据;生成子单元,用于在所述日志文件中生成一条插入行日志,将所述插入记录行数据记录在所述插入行日志中;记录子单元,用于将所述插入行日志的存储地址记录在所述第二映射表与所述插入记录行对应的行中。在一种实施方式中,所述日志文件中的每个日志被分配有体现时间先后顺序的日志序列号,所述检查时刻以所述日志文件中的一个日志序列号表示,所述插入模块还包括:分配子单元,用于在生成所述插入行日志时,为所述插入行日志分配一个日志序列号;其中,所述记录子单元还用于在所述映射表中与所述插入记录行对应的行中生成一个节点描述,所述节点描述中包括所述插入行日志的存储地址和日志序列号,以通过所述日志序列号标识所述插入行日志中的数据为所述插入记录行的当前数据。在一种实施方式中,所述装置还包括修改模块,所述修改模块包括:接收子单元,用于接收记录行修改请求,所述记录行修改请求包括针对记录行的修改信息;生成子单元,用于在所述日志文件中生成一条修改行日志,将经修改的记录行的记录行在所述修改行日志中;记录子单元,用于将所述修改行日志的存储地址记录在所述第二映射表中与所述修改的记录行对应的行中。在一种实施方式中,所述装置还包括读取模块,所述读取模块包括:接收子单元,用于接收记录行读取请求;获取子单元,用于从所述第二映射表中的与所述记录行对应的行中获取所述记录行数据对应的日志的存储地址;读取子单元,用于基于所述存储地址读取所述记录行的数据;返回子单元,用于返回所述记录行的数据。在一种实施方式中,所述装置还包括删除模块,所述删除模块包括:接收子单元,用于接收记录行删除请求;生成子单元,用于在所述日志文件中生成一条删除行日志,所述删除行日志中与记录行对应的数据区为空;标记子单元,用于在所述第二映射表中与所述记录行对应的行中进行删除标记。在一种实施方式中,所述删除模块还包括,分配子单元,用于在生成所述删除行日志时,为所述删除行日志分配一个日志序列号,其中,所述标记子单元还用于在所述第二映射表中与所述记录行对应的行中的节点描述中记录所述删除行日志的日志序列号,以标记所述记录行被删除。本发明另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。本发明另一方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。附图说明图1示意示出根据本申请实施例的数据库服务器100中的架构图;图2示出根据本申请实施例的一种在数据表中插入记录行的方法流程图;图3示意示出了根据本申请实施例的事务日志中包括的内容;图4示出根据本申请实施例的一种在数据表中修改记录行的方法流程图;图5示出根据本申请实施例的一种在数据表中读取记录行的方法流程图;图6示出根据本申请实施例的一种在数据表中删除记录行的方法流程图;图7示出根据本申请实施例的全量检查点文件的生成方法的流程图;图8示意示出了生成全量检查点文件的示意图;图9示意示出多线程的情况中在服务器的持久性介质中存储的多个wal文件的示意图;图10示出本申请实施例中根据全量检查点文件恢复数据库的方法的流程图;图11示出了数据库服务器中在发生异常之后执行图10所示方法过程中包括的数据示意图;图12示出根据本申请另一个实施例的一种生成数据库恢复文件的方法流程图;图13示意示出了相对于映射表1生成全量检查点文件和增量检查点文件的示意图;图14示出本发明另一个实施例中根据全量检查点文件和增量检查点文件恢复数据库的方法流程图;图15示出在执行图14所示方法过程中服务器中包括的数据示意图;图16示出根据本申请实施例的一种生成数据库恢复文件的方法流程图;图17示意示出了相对于映射表1的各个分区生成全量检查点文件和增量检查点文件的示意图;图18示出根据本申请实施例的一种数据库恢复方法流程图;图19示出在执行图18所示方法过程中服务器中包括的数据示意图;图20示出根据本申请实施例的一种部署于数据库服务器中的数据库恢复装置2000;图21示出根据本申请实施例的第一运行模块209;图22示出根据本申请实施例的第二运行模块210;图23示出根据本申请实施例的第三运行模块211;图24示出根据本申请实施例的插入模块212;图25示出根据本申请实施例的修改模块213;图26示出根据本申请实施例的读取模块214;图27示出根据本申请实施例的删除模块215。具体实施方式下面将结合附图详细描述本申请实施例的技术方案。图1示意示出根据本申请实施例的数据库服务器100中的架构图。如图1中所示,所述数据库服务器100中包括处理器11、内存12和持久性介质13。所述持久性介质13优选为字节级持久性存储介质,如存储级内存(storageclassmemory,scm)但也可以为hdd、ssd等。在所述内存12中,包括与多个数据表分别对应的多个映射表,图中示出的其中一个映射表1(以实线框示出的映射表)包括例如n行,该n行中的多个行与数据表1中的多个记录行分别相对应,图1中的映射表1′为在另一个时刻的映射表1。在所述持久性介质13中,存储有wal文件,另外还包括与各个映射表分别对应数据库恢复文件,例如,图1中示出了wal1文件、和与上部的映射表1对应的数据库恢复文件。这里,仅示意示出了一个wal1文件和一个数据库恢复文件,实际中,可能有多个wal文件和与所述映射表1对应的多个恢复文件,在本申请实施例中,仅以一个数据表为例进行说明。基于图1所示的系统架构图,所述数据库服务器在运行时执行如下的过程。图2示出根据本申请实施例的一种在数据表中插入记录行的方法流程图,所述方法包括:步骤s202,接收用户的插入请求,所述插入请求用于请求向数据表1中插入记录行1,并且所述插入请求中包括该记录行1的数据。当用户通过其设备向数据库服务器发送插入记录行1的请求时,从而数据库服务器从用户设备接收到该插入请求。该插入请求中例如包括数据表1的表id,和与插入操作对应的指示符,从而指示向数据表1中插入数据。该记录行1例如可以在数据表1中以行的形式示出,或者以列的形式示出,其表示数据表中的一个对象,包括该对象各个字段的字段值。本发明中虽然以数据表中的记录行进行示例表述,可以理解,在根据本申请实施例的方案中,数据库中的数据记录不限于为记录行,而可以为一列记录、一个键值对记录等等,在此不作限定。例如,在数据记录为记录行1的情况中,该记录行1的数据例如包括对象的预定多个字段各自的字段值,其中该行数据与一个键唯一对应,所述键由所述多个字段中至少一个字段各自的字段值构成。假设,记录行1例如包括小明的各个字段的字段值,所述字段例如包括身份标识、年龄、性别、职业等等,其中,该记录行1的键例如设定为小明的身份标识。步骤s204,生成与所述插入请求对应的操作日志1,为操作日志1分配日志序列号(logsequencenumber,lsn)lsn1,所述lsn1与时间相关联。在接收到该插入请求之后,在服务器内存12中基于时间顺序生成操作日志1,并对该操作日志1分配lsn号,该lsn号从而体现了时间的先后顺序。例如,lsn号可按照各个请求的时间先后顺序从0开始递增,对该插入操作日志1的lsn1例如为lsn1=10。步骤s206,为记录行1分配映射表1中的当前未使用的第0行。由于如参考图1所述,映射表1与数据表1相对应,因此,在接收到上述向数据表1中插入记录行1的请求之后,可将映射表1中未使用的一行(即未分配给其它记录行的)一行分配给该记录行1。例如,假设图1中的映射表1中的第0行当前未使用(即当前还不包括图1中的映射表1中的第0行中的内容),则可将当前未使用的第0行分配给该记录行1。步骤s208,在持久性介质中记录记录行1与所述映射表1中第0行的对应关系。在进行上述分配之后,可在持久性介质13中维护的与该数据表1对应的索引1中记录:记录行1与第0行相对应。具体是,例如,对于上述与小明对应的记录行1,可在索引1中记录:“小明id:第0行行id”,其中小明id例如为小明身份证号。所述行id可包括第0行所在映射表的编号信息以及该行在映射表内的编号,例如,该行id可以包括8个字节,其中,高位的四字节表示映射表的编号,低位的四字节表示该行在映射表内的编号,例如,该行id可以通过十六进制数0x100000000表示,其中高位四字节中的1表示映射表1,低位四字节中的00000000表示在映射表1中的第0行。可以理解,所述行id不限于通过上述方式表示,例如,该行id可以仅仅包括该行在映射表内的编号,即0x0,从而,在需要示出该行所在映射表的编号的场景中,可以“0x1,0x0”来表示该行,即映射表1中的第0行,在不需要示出该行所在映射表编号的场景中,则可以以“0x0”表示该行。在持久性介质13中记录上述对应关系之后,可在内存12中记录所述对应关系,以加快数据存取速度。在一种实施方式中,可在内存12中存入与索引1相同的表。在一种实施方式中,可在所述映射表的第0行中记录所述对应关系。步骤s210,在所述操作日志1中记录所述记录行1的当前数据和所述映射表第0行的行id,并在所述持久性介质13中写入操作日志1。在一种实施方式中,例如在图1中的wal1中的偏移位置0x10处写入与插入请求对应的事务日志1,该事务日志1中包括所述操作日志1。图3示意示出了根据本申请实施例的事务日志1中包括的内容。如图3中所示,事务日志1包括事务日志头和多个操作日志,每个操作日志分别包括操作日志头和数据。在本申请实施例中,事务日志与一个用户请求相对应,为该用户请求分配的lsn号即为该事务日志的lsn号,通常,一个用户请求涉及到多个数据库操作,例如,一个用户请求可以是用小明的数据代替小红的数据,从而,该用户请求包括,插入小明的数据,删除小红的数据,即包括对数据库的两个操作,因此,该两个操作被包括在该同一个事务日志中,以表示其与同一个用户请求相关。在特定情况中,当用户请求包括的操作过多的情况中,可与该用户请求对应地写入多条事务日志,但是每条事务日志的lsn号都是分配给该用户请求的lsn号。其中,事务日志1的日志头中包括事务的lsn号(lsn1)、记录数(即包含的操作日志数量)。在同一个日志文件中,事务日志按照lsn号递增保存。并且事务日志在事务提交时持久化写入到日志文件中。事务日志中的操作日志用于描述对一个记录行的操作,例如在数据库中插入小明的一行数据的操作。如图3中所示,操作日志1中包括操作日志头和数据区。其中,操作日志头中可保存行id、操作码、数据长度等信息,通常还包括数据校验信息,如数据哈希值等。所述行id为上述分配给该记录行1的映射表中的第0行的行id。所述操作码用于指示操作类型。所述数据区中保存了与相应的记录行相关的内容。例如在该数据插入的场景中,与该数据插入对应的操作日志1的日志头中可保存:与该记录行1对应的行id、与数据插入对应的操作码(例如,“insert”)、该记录行的长度等,在数据区中保存该需要插入的记录行1的完整数据,例如上述小明的记录行,即小明各个字段的字段值。其中,所述事务日志1的日志头中包括的事务的lsn号(lsn1),也即为该事务日志中包括的操作日志的序列号,也即该操作日志中包括的记录行数据的生效序列号(下文中以tmin表示)。可以理解,上述对操作日志1的描述仅是示例性的而不是限制性的。例如,在操作日志1中可以不保存操作码和数据长度信息。在一种实施方式中,可以将一个请求相关的多个操作日志分别写入到持久性介质13中,而不需要如上文所述以一个事务日志整体写入介质中。在该情况中,为了保持与一个请求相关的各个操作日志的时间一致性,可使得各个操作日志的lsn号都为分配给该请求的lsn号。从而,在该情况中,可例如在图1中的wal1中的偏移位置0x10处直接写入与所述插入操作对应的上述操作日志1。该操作日志1中也可以包括日志头和数据区。该日志头中保存了分配给所述插入请求的lsn号,另外,该日志头中还可以与上述类似地,包括行id、操作码等信息。步骤s212,获取所述操作日志1在所述持久性介质中的地址1。如图3中所示,通过在wal1中写入事务日志1,从而写入操作日志1。在该情况中,事务日志头、操作日志头具有预定长度,从而将该事务日志1在wal1中的存储地址(即起始偏移位置0x10)加上事务日志1的日志头长度、操作日志0的日志头的长度、操作日志0中日志头中保存的数据长度,从而可获取该操作日志1在wal1中的存储地址(起始偏移位置),例如0x15,从而可获取操作日志1在持久性介质13中的存储地址作为地址1:wal1,0x15。也就是说,在该实施例中,操作日志1在持久性介质13中的存储地址是通过日志文件id和该文件中的偏移地址来表示,可以理解,在不通过日志文件记录日志的情况中,可以以其它形式表示操作日志在持久性介质13中的存储地址,在此不作限定。例如,如上文所述,在wal1中例如0x10处直接写入所述操作日志1,从而,可直接获取该操作日志1在持久性介质13中的存储地址作为地址1:wal1,0x10。在该实施例中,在映射表中记录的地址为操作日志的地址,当需要读取记录行的数据时,通过映射表中的地址找到相应的操作日志,从而通过读取操作日志而读取到其中包括的记录行的数据。可以理解,本发明不限于此,在一种实施方式中,映射表1中的地址1例如为所述操作日志1中的记录行数据的存储地址。在如上文所述获取操作日志1的存储地址之后,基于操作日志1中的日志头的大小,可计算出操作日志1中的记录行数据的存储地址,作为地址1。步骤s214,在映射表1中记录与操作日志1中的记录行数据对应的节点描述1,节点描述1中包括tmin=10和地址1。如图1中所示,在图中以实线框示出的映射表1第0行中,示出节点描述1,该节点描述1与操作日志1中的记录行数据相对应,该节点描述1包括操作日志1中记录行数据的生效序列号tmin=10,和地址1,其中,所述生效序列号即为操作日志1的序列号,表示该操作日志1中的记录行数据开始生效的时间。“地址1”即为通过上述步骤获取的操作日志1的存储地址,或者为操作日志1中的记录行数据的存储地址。在一种实施方式中,可在节点描述1中包括操作日志1中记录行数据的失效序列号:tmax=max,失效序列号可表示该操作日志1的记录行数据被删除从而失效的时间,这里,由于在该插入操作之后尚未出现对记录行1的修改,因此,将tmax表示为max,以表示该操作日志1中的记录行数据当前是有效的。这样,对于数据表的每个记录行都可以通过所述映射表和所述wal表示,所以只需要通过所述映射表和所述wal文件中的日志即可表示一个数据表,而不需要在scm中再另外存储一份数据表。图4示出根据本申请实施例的一种在数据表中修改记录行的方法流程图,所述方法包括:步骤s402,接收用户的修改请求,所述修改请求用于请求对数据表1中的记录行1进行修改,并且,所述修改请求中包括针对所述记录行1的修改信息。当用户希望将数据表1中小明的职业从教师修改为律师,该用户通过其设备向数据库服务器发送修改请求。该修改请求中例如通过包括数据表1的表id和与修改操作对应的指示符,来指示向数据表1中修改记录行。另外,该修改请求中还包括与记录行1对应的键,例如小明的身份证号,以及修改内容,例如,职业:律师。步骤s404,生成与修改请求对应的操作日志5,为操作日志5分配lsn号,lsn2。该步骤可参考上文中对步骤s204的描述,在此不再赘述,其中,例如,lsn2=60。步骤s406,基于所述服务器中的记录确定记录行1与映射表1中的第0行相对应。如上文中所述,服务器在内存12和持久性介质13中都记录了记录行1与映射表1第0行的对应关系,通常,可从内存12中直接获取该对应关系,从而确定记录行1与第0行对应。当在映射表1中记录了各行对应的键的情况中,可通过映射表1直接确定,记录行1与第一0行相对应。当仅在例如图1中的索引1中记录了所述对应关系的情况中,可通过读取所述索引1而确定所述对应关系。步骤s408,从第0行中读取最新的节点描述1,以读取其中包括的地址1。由于第0行中当前最新的节点描述为节点描述1,即与上述操作日志1中的记录行数据对应的节点描述,从而,从该节点描述1可读取操作日志1或其中的记录行数据的存储地址,即地址1。步骤s410,基于地址1读取操作日志1中的记录行数据。如上文所述,地址1即为操作日志1的存储地址,可基于地址1读取操作日志1,从而顺序读取到该操作日志1中包括的记录行1的记录行数据。这里,可从持久性介质13中的地址1直接读取操作日志1。或者,在基于内存映射的方式进行数据读取时,当内存12中缓存了所述操作日志1时,可以基于地址1与内存12中的地址的映射关系,从内存12中的缓存中读取所述操作日志1,当内存12中尚未缓存所述操作日志1时,可基于内存映射的机制通过地址1进行对操作日志1的读取。其中,基于地址1从内存12缓存中读取操作日志1的记录行数据的方法不限于内存映射的方法,而可以为其它地址对应方法,在此不作限定。在一种实施方式中,在地址1为操作日志1中的记录行数据的存储地址的情况中,可基于地址1直接读取操作日志1中的记录行数据。步骤s412,在所述持久性介质中写入操作日志5,操作日志5中记录了记录行1的当前数据和所述第0行的行id,其中,所述当前数据基于所述修改信息和所述操作日志1的记录行数据获取。步骤s412与上文中的步骤s208基本相同,不同在于,操作日志5中的记录行1的当前数据基于该记录行的历史数据和上述修改信息获取,例如,所述修改信息为对小明的记录行数据中的“职业”字段的修改,从而,将通过步骤s410获取的小明的记录行的历史数据中的职业从教师修改为律师,从而可获取该记录行的当前数据。步骤s414,获取操作日志5在持久性介质中的地址5,该步骤可参考上文中对步骤s210的描述。步骤s416,在所述映射表1的第0行中依据时间顺序记录与操作日志5中的记录行数据对应的节点描述5,所述节点描述5中包括tmin=60和地址5。如图1中所示,相比于映射表1,在以虚线框示出的映射表1′中的第0行中,添加与操作日志5对应的节点描述5,该节点描述5包括:tmin=60,tmax=max,以及地址5;同时,在该步骤中,还修改第0行中在节点描述5之前的节点描述1中的tmax,即将节点描述1中的tmax修改为节点描述5对应的操作日志5的lsn号,即tmax=60,表示节点描述1对应的记录行数据在lsn=60时被修改,也即在lsn=60时失效。更新后的映射表如映射表1′,第0行中的与同一记录行对应的多个节点描述可以通过如图1所示的链表表示,该链表显示出了该多个节点描述对应的多个操作日志的时间先后顺序。图5示出根据本申请实施例的一种在数据表中读取记录行的方法流程图,所述方法包括:步骤s502,接收用户的用于请求读取数据表1中的记录行1的读取请求。例如,用户希望读取小明的记录行数据,从而通过其设备向服务器发送读取请求,该读取请求例如包括数据表1的表id和与读取操作对应的指示符,以指示读取数据表1中的记录行,另外,该读取请求中还包括与记录行1对应的键(例如小明的身份id),以指示读取记录行1。步骤s504,基于服务器中的记录确定记录行1与映射表1中第0行相对应。数据库服务器在从用户设备接收到该读取请求之后,同样地,可基于内存12(或索引1)中的键与映射表行id的对应关系,确定小明身份证号与映射表1中的第0行相对应。步骤s506,如图3中映射表1′所示,从映射表1的第0行中读取最新的节点描述5,以读取其中包括的地址5。步骤s508,基于地址5读取操作日志5中的记录行数据作为记录行1的当前数据。如上文所述,地址5为图1中的操作日志5或其中的记录行数据在持久性介质13中的存储地址,从而可基于地址5读取操作日志5中的记录行数据,由于,操作日志5对应的节点描述是第0行中最新的节点描述,这就表示,操作日志5为记录行1的最新数据,即为记录行1的当前数据。其中,基于地址5读取操作日志5中的记录行数据的具体方式可参考上文中对步骤s410的描述,在此不再赘述。步骤s510,向用户设备返回记录行1的当前数据。图6示出根据本申请实施例的一种在数据表中删除记录行的方法流程图,所述方法包括:步骤s602,接收用户的用于请求删除数据表1中的记录行2的删除请求。例如,记录行2为小红的记录行,该删除请求包括数据表1的表id、与删除操作对应的指示符和记录行2的键,以指示删除数据表1中的记录行2,该键例如为小红的身份证号。步骤s604,生成操作日志7,为操作日志7分配lsn3。步骤s606,基于所述服务器中的记录确定记录行2与映射表1中第1行相对应。步骤s608,在所述持久性介质中写入操作日志7,所述操作日志7中的与记录行2对应的数据区为空,并且操作日志7中还包括所述第1行的行id。步骤s610,将第1行中的最新的节点描述6的tmax修改为lsn3,从而在映射表1中第1行中标记该行对应的记录行2被删除。所述节点描述6例如与wal1中的操作日志6相对应,该操作日志6例如与对记录行2的插入或修改相对应。步骤s612,在服务器中删除记录行2与映射表1中第1行的对应关系。在对映射表1′中第1行进行上述标记之后,在该第1行中将不增加新的节点描述。由于在服务器中删除了记录行2与映射表1第1行的对应关系,从而第1行成为未使用的行,从而在插入其它记录行时,有可能将第1行分配给其它记录行,从而,该第1行中已有的节点描述(例如节点描述6)将被删除,以用于记录与其它记录行对应的节点描述。如图1中所示,在持久性介质13中还存储有数据库恢复文件,该数据库恢复文件用于在数据库服务器出现异常的情况下恢复数据库。本申请实施例中,由于通过映射表和日志文件表示数据表,所以只要恢复内存中的数据表对应的映射表,即可恢复数据库。在本申请实施例中,仍然以对一个数据表的映射表的恢复为例进行说明。在数据库正常运行期间,每隔预定时段设置一个检查时刻,每到达一个检查时刻,生成一个数据库恢复文件,该数据库恢复文件与数据表中在该检查时刻的数据相对应,以用于在当服务器出现故障时恢复数据表在该检查时刻的数据。其中,数据库恢复文件包括全量检查点文件和增量检查点文件。在本申请实施例中,由于如上文所述,lsn号与时间相关联,因此,所述检查时刻可以以在该时刻日志文件中的最大lsn号表示,在下文中,将该最大lsn号表示为检查点lsn号。另外,在本申请实施例中,提供两种恢复数据库的方式,一种是基于全量检查点文件恢复数据库的方法,一种是基于全量检查点文件、增量检查点文件恢复数据库的方法。下文中,将首先介绍基于全量检查点文件恢复数据库的方法。图7示出根据本申请实施例的全量检查点文件的生成方法的流程图,所述方法包括:步骤s702,当到达预设的检查时刻,从日志文件中获取当前最大的lsn号,即检查点lsn;步骤s704,对于所述映射表中的每一行,逐行确定是否包括生效lsn小于等于所述检查点lsn、失效lsn大于所述检查点lsn的节点描述;步骤s706,生成全量检查点文件,对于包括生效lsn小于等于所述检查点lsn、失效lsn大于所述检查点lsn的节点描述的行,将该行中的所述节点描述中的存储地址记录至全量检查点文件中与该行对应的位置中,对于不包括生效lsn小于等于所述检查点lsn、失效lsn大于所述检查点lsn的节点描述的行,在所述全量检查点文件中与该行对应的位置中进行标注,例如,标记为“0”。所述全量检查点文件的位置与所述映射表中的相同顺序的行一一对应,在所述全量检查点文件中,每个位置为固定大小的一段地址空间。对于包括生效lsn小于等于所述检查点lsn、失效lsn大于所述检查点lsn的节点描述的行,说明在当前的检查点之前,日志文件中存储的该行的数据没有被更新,而对于不包括生效lsn小于等于所述检查点lsn、失效lsn大于所述检查点lsn的节点描述的行,则说明在当前的检查点之前,该行对应的数据已经失效,例如被删除。步骤s708,将所生成全量检查点文件存入所述持久性介质中。图8示意示出了生成全量检查点文件的示意图。如图8中所示,在服务器内存12中的映射表1中例如包括0到n-1行共n行,从而可相对于该n行生成与该映射表1对应的全量检查点文件。在所述n行中示意示出了第0到3行的4行中的内容。其中,例如第0行包括两个节点描述,其中,较老的节点描述中包括:相应操作日志中记录行数据的生效lsn号tmin(即tmin=10)、该操作日志中记录行数据的失效lsn号tmax=60、以及该操作日志(或其中的记录行数据)的存储地址(地址1),较新的节点描述中包括:tmin=60、tmax=max、以及地址5,其中,tmax=max表示该较新的日志当前仍为有效的。第1行中不包括节点描述,或者包括如图1所示的节点描述7,即表示该行对应的记录行数据已被删除。第2行中包括1个节点描述,包括:tmin=12、tmax=max、以及地址2。第3行中包括2个节点描述,其中,较老的节点描述包括:tmin=15、tmax=50、以及地址3,较新的节点描述包括:tmin=50、tmax=max、以及地址4。下文中将基于图8中的示例描述图7中的各个步骤。首先,在步骤s702,当到达预设的检查时刻时,从日志文件中获取当前最大的lsn号,即检查点lsn。如前文参考图1所述,在服务器的持久性介质13中存储有至少一个日志文件,该至少一个日志文件中记录了多个日志,该多个日志在生成时在内存12中被顺序分配一个lsn号,例如,对于多个日志,可先后对其分配0、1、2…100、101等等作为lsn号,从而,每个日志的lsn号都是唯一的,并且,所述多个日志的lsn号是线性增大的。可每隔预定时段设定检查时刻,从而当到达预设的检查时刻,可从所述多个操作日志获取当前最大的序列号用作检查点序列号。例如,在到达预设的检查时刻时,获取日志文件中当前最大lsn号为50,则可设定lsn1=50作为检查点lsn。在步骤s704,对于所述映射表中的每一行,逐行确定是否包括生效lsn小于等于所述检查点lsn、失效lsn大于所述检查点lsn的节点描述。也就是说,相对于作为当前检查点lsn的lsn1,确定每行是否包括生效序列号tmin和失效序列号tmax满足如公式(1)所示的不等式的节点描述:tmin≤lsn1<tmax(1)如上文所述,例如检查点lsn为lsn1=50,则对于该行中的每个节点描述确定是否满足tmin≤50<tmax,在满足的情况中,表示该节点描述对应的日志在检查点之前已经生成,并且在检查点时尚未失效。例如,对于图8中映射表的第0行,基于公式(1),可确定第0行中的较早节点描述(如图8中第0行中的灰色节点描述所示)满足公式(1),即,tmin=10≤50,tmax=60>50。类似地,可确定第2行的节点描述、第3行中的较新的节点描述都满足公式(1)。在步骤s706,生成全量检查点文件,对于包括生效lsn小于等于所述检查点lsn、失效lsn大于所述检查点lsn的节点描述的行,将该行的所述节点描述中的存储地址记录至全量检查点文件中与该行对应的位置中,对于不包括生效lsn小于等于所述检查点lsn、失效lsn大于所述检查点lsn的节点描述的行,在所述全量检查点文件中与该行对应的位置中进行预定标注。所述全量检查点文件中的位置与所述映射表中的相同顺序的行一一对应。例如,参考图8中所示,图8下部示出了基于检查点lsn1=50生成的全量检查点文件。由于映射表包括n行,从而,与该映射表对应的全量检查点文件可包括顺序排列的n个位置,所述每个位置例如为文件中具有预定大小的一个地址,其中,所述n个位置与所述n个映射表行分别对应。例如,从上部开始的第0个位置对应于映射表中的第0行,在上文中,已经确定了第0行的较早的节点描述为满足公式(1)的节点描述,因此,在第0个位置中记录该节点描述中的存储地址,即“地址1”。全量检查点文件中的第1个位置对应于映射表中的第1行,如上文所述,第1行中不包括满足公式(1)的节点描述,因此,可在第1个位置中进行预定标注(例如记录“0”),以表示该映射表行不与记录行相对应。第2个位置对应于映射表中的第2行,如上文所述,第2行中的节点描述满足公式(1),因此,在第2个位置中记录该节点描述中的存储地址,即“地址2”。第3个位置对应于映射表中的第3行,如上文所述,第3行中的较新节点描述满足公式(1),因此,在第3个位置中记录该节点描述中的存储地址,即“地址4。通过类似的方法,可在该全量检查点文件的n个位置中顺序记录了n个映射表行的情况,即,如果该映射表行与记录行相对应,则在全量检查点文件相应的位置中记录该映射表行中满足公式(1)的节点描述中的地址,如果该映射表行不对应于记录行,则在全量检查点文件相应的位置中进行预定标注。当在确定检查点lsn(即lsn1)之后并在持久性介质13中存入生成的全量检查点文件的同时,在wal文件中还继续在不断增加操作日志,并相应地修改映射表。因此,在后续服务器出现异常之后恢复映射表的过程中,除了通过全量检查点文件恢复映射表之外,还需要读取wal文件中序列号在lsn1之后的操作日志,以进一步恢复映射表。在一种实施方式中,在服务器中仅通过一个线程在wal文件中顺序记录多个操作日志,因此,在全量检查点文件中记录的最大地址对应的操作日志被包括在该wal文件中,从而通过该最大地址读取相应的操作日志,可顺序读取到该wal文件中序列号在检查点之后的操作日志。在一种实施方式中,在服务器中通过多个线程在多个wal文件中并发记录操作日志。图9示意示出多线程的情况中在服务器的持久性介质13中存储的多个wal文件的示意图。如图9中所示,假设有三个线程(线程1~3)并发地将操作日志分别记录到3个wal文件(wal1~wal3)中,其中,每个wal文件中的方框中的数字表示相应操作日志的lsn号。由于各个操作日志的lsn号是线性连续的,因此,检查点对应的操作日志只能记录在其中一个wal文件中(假设为wal1),假设检查点为lsn1=50,如图9中所示,在wal1中,在检查点之后的第一个操作日志的lsn号为52,在wal2中,在检查点之后的第一个操作日志的lsn号为54,在wal3中,在检查点之后的第一个操作日志的lsn号为51。在该情况中,在全量检查点文件中记录的最大地址为多个wal文件中的一个wal文件中的与检查点对应的操作日志的存储地址,通过该地址并不能确定其它wal文件中在序列号在检查点之后的操作日志的存储地址。从而,在生成全量检查点文件的同时,还可以在所述持久性介质13中维护控制文件。该控制文件中包括各个wal文件的文件id,以及与各个wal文件中序列号在检查点之后的第一个操作日志相关的存储地址,即该操作日志的存储地址,或者该操作日志所在的事务日志的存储地址。例如,上述线程1在确定上述检查点之后,在控制文件中记录其正在处理的日志文件的标识“wal1”,并在控制文件中与wal1对应地记录与wal1中在该检查点之后的第一个操作日志相关的存储地址(例如地址6),即,控制文件中记录了“wal1,地址6”,从而便于后续的映射表恢复过程。在一种实施方式中,所述控制文件中还可以包括检查点lsn,以用于后续的映射表恢复过程。在一种实施方式中,在通过上述方法生成所述与lsn1对应的全量检查点文件之后,即可将服务器的持久性介质13中存储的在上一个检查点生成的全量检查点文件删除,以节省介质存储空间。在通过上述方法在服务器的持久性介质13中维护全量检查点文件和控制文件作为数据库恢复文件之后,当服务器出现异常,例如,由于断电、硬件故障、软件漏洞等原因导致数据库中止运行,从而可通过所述数据库恢复文件将数据库恢复到一致性的状态。图10示出本申请实施例中根据全量检查点文件恢复数据库的方法的流程图,所述方法包括:步骤s1002,在数据库服务器故障后恢复时,读取最新全量检查点文件中的n个位置,生成映射表,所述映射表中包括与所述n个位置一一对应的n行,其中,对于全量检查点文件中的每个位置,如果该位置中记录了地址,则在映射表与该位置对应的行中添加节点描述,所述节点描述包括从该位置读取的地址,如果该位置进行了预定标注,则将映射表中与该位置对应的行保持为空行;步骤s1004,读取日志文件中的lsn号在检查点lsn1之后的每个操作日志,如果该操作日志为插入或修改记录行的日志,则读取该操作日志中的行id、并获取该操作日志的序列号、和该操作日志或其中的记录行数据在所述持久性介质13中的存储地址,如果该操作日志为删除记录行的日志,则读取该操作日志中的行id,并获取该操作日志的序列号;步骤s1006,按照lsn号在检查点lsn1之后各个操作日志的lsn的从小到大的顺序,基于lsn号在lsn1之后的每个操作日志,修改映射表。如果该操作日志为修改记录行的日志,则在映射表中对该操作日志对应的行中的节点描述进行修改,以使得该节点描述中包括:该操作日志中记录行数据的生效序列号、及所述存储地址,其中,所述生效序列号为该操作日志的序列号,如果该操作日志为插入记录行的日志,则在映射表中对该操作日志对应的行中增加节点描述,并使得该节点描述中包括:该操作日志中记录行数据的生效序列号、及所述存储地址,如果该操作日志为删除记录行的日志,则在映射表中对该操作日志对应的行中的节点描述进行修改,以使得该节点描述中包括相应的记录行数据的失效序列号,其中,所述失效序列号为该操作日志的序列号。图11示出了数据库服务器中在发生异常之后执行图10所示方法过程中包括的数据示意图。假设,服务器系统在检查点lsn1=50之后发生异常,在发生该异常之后,在服务器的持久性介质13中存储有全量检查点文件(即该方法中的与lsn1对应的全量检查点文件),并且所述持久性介质13中还存储有在异常之前通过wal文件记录的多个日志,与图8所不同的是,当前在服务器内存12中已经没有图8中所示的内存12中的映射表,从而,将基于持久性介质13中的全量检查点文件和多个日志来恢复出与发生异常之前的映射表一致的映射表。在步骤s1002,读取最新全量检查点文件中的n个位置,生成映射表,所述映射表中包括与所述n个位置一一对应的n行,其中,对于全量检查点文件中的每个位置,如果该位置中记录了地址,则在映射表的相同顺序的行中添加节点描述,所述节点描述包括从该位置读取的地址,如果该位置进行了预定标注,则将映射表的相同顺序的行保持为空行。在如上文所述,在每次生成全量检查点文件之后都将之前生成的全量检查点文件都删除的情况中,则在持久性介质13中仅存储有一个全量检查点文件,并且该全量检查点文件即为最新的全量检查点文件。图11中由①标识的箭头示意示出了该步骤的通过全量检查点文件恢复映射表的过程。由于如上文所述,全量检查点文件中的各个位置与映射表中相同顺序的行分别一一对应,从而,通过读取该全量检查点文件的每个位置,可恢复出映射表的每行。另外如上文所述,如果映射表行与记录行相对应,则在全量检查点文件中的相应位置记录有为与该记录行相对应的在检查点之前的最新操作日志(或其中的记录行数据)的存储地址,从而可在该映射表行中填入该存储地址作为节点描述。如果映射表行不与数据库中的记录行相对应,则在全量检查点文件中的相应位置中记录了0,从而,在该映射表行中可不添加任何信息,即维持为空行,以表示该映射行不与数据库中的一条记录行相对应。图11中内存12中以虚线框绘出的映射表1示出了通过该步骤恢复的映射表1,该初步恢复的映射表1的多行与全量检查点文件中的顺序排列的多个位置分别对应,体现了数据表1在检查点lsn1对应的检查时刻的各个记录行的数据的存储地址。从而,用户可通过该映射表找到数据表在该检查时刻的数据。在步骤s1004,读取日志文件中的lsn号在检查点lsn1之后的每个操作日志,如果该操作日志为插入或修改记录行的日志,则读取该操作日志中的行id、并获取该操作日志的序列号、和该操作日志或其中的记录行数据在所述持久性介质13中的存储地址,如果该操作日志为删除记录行的日志,则读取该操作日志中的行id,并获取该操作日志的序列号。图11中以②标识的箭头示意示出了通过读取lsn号在lsn1之后的日志恢复映射表的过程。如上文所述,当在确定lsn1之后并在持久性介质13中存入生成的全量检查点文件的同时,在wal文件中还继续在不断增加日志,并相应地修改映射表。因此,在后续恢复日志的过程中,除了通过全量检查点文件恢复映射表之外,还需要读取wal文件中lsn号在lsn1之后的日志,以进一步恢复映射表。在一种实施方式中,在服务器中仅通过一个线程在wal文件中顺序记录多个日志,因此,在全量检查点文件中记录的最大地址对应的操作日志(即lsn=lsn1的操作日志)被包括在该wal文件中,通过在该wal文件中从该最大地址开始读取,从而可顺序读取到该wal文件中序列号在lsn1之后的日志,该日志可以为事务日志或操作日志。例如,如图11中所示,在介质中的wal文件中,以lsn的顺序记录了各个操作日志。假设lsn1=50,则所述最大地址(例如地址4)对应于图中的lsn=50的操作日志的地址,从而,可从地址4开始读取,在读取了lsn=50的操作日志之后,即可开始读取lsn=51的操作日志。从而可获取该操作日志(或其中的记录行数据)的存储地址(例如地址5),并且,通过读取该操作日志(或者与该操作日志对应的事务日志),可包括该操作日志中包括的序列号(即51),通过读取该操作日志,可获取该操作日志对应的行id。在对lsn=51的操作日志进行读取之后,可依次对其后面的每个日志进行同样的读取,以获取其各自对应的行id、lsn号和存储地址。在一种实施方式中,如上文所述,在服务器中通过多个线程在多个wal文件中并发记录日志。例如,仍然如图9所示,假设有三个线程(线程1~3)并发地将日志分别记录到3个wal文件(wal1~wal3)中。在该情况中,在持久性介质13中还维护有控制文件,该控制文件中记录了与各个wal文件对应的序列号在lsn1之后的第一个日志(事务日志或操作日志)的存储地址。从而,通过读取所述控制文件,可分别在每个wal文件中找到lsn号在lsn1之后的第一个日志,并在每个wal文件中与上文类似地依次读取lsn号在lsn1之后的每个操作日志,以读取该操作日志中的行id,并获取该操作日志的序列号、和该操作日志(或其中的记录行数据)在所述持久性介质13中的存储地址。在一种实施方式中,在控制文件中还记录了检查点lsn号,从而,在基于控制文件中的存储地址读取之后,可通过将读取的日志中的lsn号与检查点lsn号进行比较,以验证是否读取了各个wal文件对应的序列号在lsn1之后的第一个日志。可以理解,本申请实施例对于读取检查时刻之后存入的操作日志(即,序列号大于检查点序列号的操作日志)的方式不限于通过上述方式,例如,可通过从日志文件中依次读取的方式从而读取到序列号大于检查点序列号的操作日志,或者,可通过搜索检查点序列号,从而可读取到序列号大于检查点序列号的操作日志等等,在此不作限定。如果所读取的操作日志为插入或修改记录行的日志,则在映射表中需要添加或修改节点描述,从而需要获取该操作日志中的行id、序列号和存储地址。如果所读取的操作日志为删除记录行的日志,则需要修改节点描述,该修改过程需要该操作日志中的行id和序列号。在步骤s1006,按照lsn号在检查点lsn1之后各个操作日志的lsn的从小到大的顺序,基于lsn号在lsn1之后的每个操作日志,修改映射表。如果该操作日志为修改记录行的日志,则在映射表中对该操作日志对应的行中的节点描述进行修改,以使得该节点描述中包括:该操作日志中记录行数据的生效序列号、及所述存储地址,其中,所述生效序列号为该操作日志的序列号,如果该操作日志为插入记录行的日志,则在映射表中对该操作日志对应的行中增加节点描述,并使得该节点描述中包括:该操作日志中记录行数据的生效序列号、及所述存储地址,如果该操作日志为删除记录行的日志,则在映射表中对该操作日志对应的行中的节点描述进行修改,以使得该节点描述中包括相应的记录行数据的失效序列号,其中,所述失效序列号为该操作日志的序列号。例如,对于图11中lsn=51的操作日志,该操作日志对应于映射表中的第0行,从而对图11中以虚线框绘出的映射表1中的第0行的节点描述进行修改,即,使得该节点描述中包括该操作日志中记录行数据的生效序列号,即tmin=51,及该操作日志(或其中的记录行数据)的存储地址,即“地址5”,从而获取了如图11中以实线框绘出的映射表1′中第0行中的节点描述。在一种实施方式中,还可以在映射表1′中第0行中的节点描述中添加所述操作日志中记录行数据的失效序列号,这里,因为还没有读到下一个与第0行对应的操作日志,因此,可将该操作日志中记录行数据的失效序列号记为tmax=max。如果在对后续的日志读取中,仍然存在与第0行对应的操作日志,则仍然类似地对第0行的节点描述进行修改。也就是说,在恢复的映射表的过程中,例如对于第0行,需要在发生异常之前的lsn在lsn1之后的全部日志中找出最新的与第0行对应的操作日志,并记录与该操作日志中记录行数据对应的节点描述,从而用户在数据库恢复运行之后可从数据库查询到异常之前的第0行的最新的数据。例如,对于图11中lsn=52的操作日志,该操作日志对应于映射表中的第1行,假设该操作日志为插入记录行的日志,从而相对于图11中以虚线框绘出的映射表1中的第1行添加节点描述,使得该节点描述中包括该操作日志中记录行数据的生效序列号,即tmin=52,及该操作日志(或其中的记录行数据)的存储地址,即“地址6”,从而获取了如图11中以实线框绘出的映射表1′中第1行中的节点描述。例如,对于图11中lsn=53的操作日志,该操作日志对应于映射表中的第2行,假设该操作日志为删除记录行的日志,从而对图11中以虚线框绘出的映射表1中的第0行的节点描述进行修改,使得该节点描述中包括该操作日志中的序列号作为失效序列号,即tmax=53,从而获取了如图11中以实线框绘出的映射表1′中第2行中的节点描述,以指示该行对应的记录行被删除。上文中描述了基于全量检查点文件的数据库运行和恢复过程。通过基于字节级持久性介质实施该方案,在数据库恢复期间,可对数据库进行字节级的读写,从而避免了现有技术中的读写放大和恢复时间过长的问题。在持久性介质不是字节级介质的情况中,可通过设置地址映射层将页id和页内偏移映射为上文中的日志的存储地址,从而实施该方案。即使在非字节级的介质中实施该方案,在数据库恢复的过程中,可通过数据库恢复文件快速恢复映射表,从而恢复数据库,同样可以起到缩短数据库恢复时间的有益效果。在上述实施例方案中,仅通过全量检查点文件来恢复映射表。然而,在映射表中,一些行对应的数据表中的记录行可能访问热度非常低,也就是说,该记录行的数据可能是很久之前修改过一次,在内存12中已经没有对该记录行数据的存储,仅在介质的操作日志中存储有该数据,而在映射表中的对应的行中只包括非常少的几个节点描述,并且其中最新的节点描述的生效序列号为较早的lsn号,失效序列号为max,这表示,该行在很久之前修改之后已经很久没有再次修改,因此至今是有效的,这样的映射行对应的数据可以称为冷数据,该映射表行可以视为低热度的行。在映射表存在低热度行的情况中,如果每隔预定时段生成全量检查点文件,在这些全量检查点文件中与该低热度行对应的存储地址信息都将是相同的、不变化的,即上述很久之前的修改对应的操作日志的存储地址,因此,对于这些低热度映射表行来说,这些全量检查点文件中记录的数据存在了大量重复数据,并且在生成这些全量检查点文件的过程中也包括大量重复工作。为此,相对于这些低热度的映射表行,可生成增量检查点文件来克服上述问题。下面将详细说明基于全量检查点文件和增量检查点文件的数据库运行和恢复过程。图12示出根据本申请另一个实施例的一种生成数据库恢复文件的方法流程图,所述方法包括:步骤s1202,当到达预设的检查时刻,从日志文件中获取当前最大的lsn号,即检查点lsn;步骤s1204,确定所述映射表在所述检查时刻的热度。该步骤针对对数据表从正常运行开始之后从第二个检查时刻开始的每个检查时刻。通常,对于数据表从正常运行开始的第一个检查时刻,生成全量检查点文件,并从第二个检查时刻开始,确定映射表的热度,再根据映射表的热度来确定是生成全量检查点文件还是增量检查点文件。所述映射表的热度是指所述映射表对应的数据表在上一个检查点至当前检查点之间的一段时间内被访问的次数,若所述次数大于一个阈值,则说明这段时间内数据表被访问的频率比较高,即热度比较高。步骤s1206,在确定所述热度大于等于预定阈值的情况中,则对所述映射表生成全量检查点文件。如果热度大于等于预定阈值,则说明数据表中被修改的数据比较多,可以生成全量检查点文件来记录被修改的数据。在生成全量检查点文件之后,对于包括生效lsn小于等于检查点lsn、失效lsn大于检查点lsn的节点描述的行,将该行的所述节点描述中的存储地址记录至全量检查点文件中与该行对应的位置中,对于不包括生效lsn小于等于检查点lsn、失效lsn大于检查点lsn的节点描述的行,在所述全量检查点文件中与该行对应的位置中进行预定标注,所述全量检查点文件的位置与所述映射表中的相同顺序的行一一对应,然后将所述全量检查点文件存入所述持久性介质中;步骤s1208,在确定所述热度小于预定阈值的情况中,则对所述映射表生成增量检查点文件。如果热度小于预定阈值,则说明数据表中被修改的数据比较少,所以可以生成增量检查点文件来记录被修改的数据,这样可以减少文件大小,节省存储空间,同时也节省生成检查点文件的时间。在生成增量检查点文件时,对于包括生效序列号大于上一次检查点lsn、且小于等于本次检查点lsn、并且失效序列号大于本次检查点lsn的节点描述的行,在增量检查点文件中记录:该行行id、和该行的所述节点描述中包括的地址,对于包括生效序列号大于上一次检查点lsn且小于等于本次检查点lsn、并且失效序列号小于等于本次检查点lsn的节点描述的行,在增量检查点文件中记录,该行行id,和对该行的标注,例如“0”。然后将所生成的增量检查点文件存入所述持久性介质13中。图13示意示出了相对于映射表1生成全量检查点文件和增量检查点文件的示意图。如图13中所示,假设内存12中的映射表1共包括n行,图中仅示意示出了第0~3行。图13中的映射表1为在确定一个检查点lsn(例如,lsn1=50)之后与数据表对应的映射表中包括的内容,映射表1′为在确定另一个检查点lsn(例如lsn2=100)之后与数据表对应的映射表中包括的内容。假设,lsn1为lsn2的上一个检查点lsn。下文中,将基于图13中的示例描述图12中的各个步骤。在步骤s1202,当到达预设的检查时刻,从日志文件中获取当前最大的lsn号,即检查点lsn。该步骤的具体实施可参考上文中对步骤s702的描述。在该实施例中,例如,通过该步骤获取了连续的两个检查点lsn,即lsn1和lsn2,其中,lsn1为lsn2的上一个检查点lsn。在步骤s1204,确定所述映射表在所述检查时刻的热度。在一种实施方式中,所述映射表的在与lsn1对应的检查时刻的热度可基于在该时刻之前的预定时段内该映射表中各个行中的节点描述数目总数确定。如上文所述,所述节点描述与对该行进行修改(或插入)的日志相对应,从而,该行中在预定时段内的节点描述的数目也即体现了在预定时段内与该映射表行对应的记录行的访问次数,访问次数越高,说明该映射表行的热度越高,该映射表行的热度也即体现了该映射表行对应的记录行的访问热度。从而,可通过统计该映射表中每行在该lsn1对应的时刻之前预定时段内的节点描述的数目,确定该映射表的热度。在一种实施方式中,可在节点描述中包括相应日志的操作字节数,从而在计算映射表1的热度时,可基于lsn1之前的预定时段内的多个映射表行中每个映射表行中的节点描述的数目、以及各个节点描述中包括的相应日志的操作字节数,来确定该多个映射表行的热度。所述映射表的在与lsn2对应的检查时刻的热度可通过与上述同样地方式获取。在步骤s1206,在确定所述热度大于等于预定阈值的情况中,则对所述映射表生成全量检查点文件。例如,假设在lsn1对应的检查时刻,确定图13中的映射表1的热度大于等于预定阈值,则可基于映射表1生成全量检查点文件,该过程可参考上文中对图8所示方法的相应描述,在此不再赘述。从而可获得如下面的表1所示的全量检查点文件:地址10地址2地址4…表1如图13中所示,在生成所述全量检查点文件之后,在服务器的持久性介质13中与映射表1对应地存入该全量检查点文件,并且在存入该全量检查点文件之后,可将相对于之前的检查点lsn生成的映射表1的全量检查点文件和增量检查点文件都删除。在步骤s1208,在确定所述热度小于预定阈值的情况中,则对所述映射表生成增量检查点文件。例如,假设在lsn2对应的检查时刻,确定图13中映射表1′的热度小于预定阈值,则可基于映射表1′生成增量检查点文件。具体是,在确定所述热度小于预定阈值的情况中,对于映射表1′中的每个映射表行,逐行确定是否包括:生效序列号大于lsn1、且小于等于lsn2、并且失效序列号大于lsn2的节点描述、以及生效序列号大于lsn1、且小于等于lsn2、并且失效序列号小于等于lsn2的节点描述。也就是说,首先,对于映射表1′中的每行,确定是否包括生效序列号tmin和失效序列号tmax满足如公式(2)所示的不等式的节点描述:lsn1<tmin≤lsn2<tmax(2)假设lsn1=50,lsn2=100,参考映射表1′中第0~3行,对其中每行中包括的每个节点描述基于公式(2)进行判断,可以确定,在第0行中较早的节点描述中,50<tmin=60≤100<tmax=105,因此,该节点描述满足公式(2)。可以理解,满足公式(2)的节点描述表示该映射表行对应的记录行在两个检查时刻之间被修改或插入。另外,对于映射表1′中的每行,确定是否包括生效序列号tmin和失效序列号tmax满足如公式(3)所示的不等式的节点描述:lsn1<tmin≤lsn2,且tmax≤lsn2(3)参考映射表1′中第0~3行,可以确定,在第2行中的节点描述中,50<tmin=90≤100,且tmax=95≤100,因此,该节点描述满足公式(3)。可以理解,满足公式(3)的节点描述表示该映射表行对应的记录行在两个检查时刻之间被删除。对于每个包括满足公式(2)的节点描述的行,在增量检查点文件中的一个位置中记录:该行行id、和该行相应的节点描述中包括的地址。对于每个包括满足公式(3)的节点描述的行,在增量检查点文件中的一个位置中记录:该行行id、和预定标注(例如“0”)。例如,对于上述确定的所述映射表中存在的满足公式(2)和(3)的节点描述之后,可生成如下面的表2所示的增量检查点文件1:100000000,地址5100000002,0表2参考表2,在表2第一行中,100000000为映射表行id,如前文所述,该行id表示映射表1第0行,地址5为图10中虚线框所示的映射表1′中第0行中的较早节点描述中包括的地址,在表2第二行中,100000002为另一映射表行id,该行id表示映射表1中第2行,在该地址后面的“0”表示映射表1′中第2行中在上述两个检查时刻之间被删除。在生成该增量检查点文件1之后,可将该增量检查点文件1与映射表1关联地存入持久性介质13中。存入增量检查点文件1之后,并不需要删除其之前的全量检查点文件,该全量检查点文件和增量检查点文件1用于在数据库恢复时结合恢复映射表。在检查点lsn2之后的下一个检查点时,当通过基于热度进行确定,有可能仍生成增量检查点文件2,从而,在进行数据库恢复时,可结合与映射表1对应的全量检查点文件、增量检查点文件1和增量检查点文件2用于恢复映射表1。在一种实施方式中,除了如上所述生成全量检查点文件和增量检查点文件之外,还在持久性介质13中维护控制文件。在每次到达检查时刻之后,在控制文件中记录日志文件中lsn号在lsn1之后的第一个日志的存储地址。与上文所述类似地,当在确定检查点lsn之后并在持久性介质13中存入生成的全量检查点文件或增量检查点文件的同时,在wal文件中还继续在不断增加日志,并相应地修改映射表。因此,在后续恢复映射表的过程中,除了通过全量检查点文件和增量检查点文件恢复映射表之外,还需要读取wal文件中lsn号在最新的检查点lsn之后的日志,以进一步恢复映射表。在该情况中,为了获取wal文件中lsn号在最新的检查点lsn之后的日志的存储地址,可以在每次到达检查时刻之后,在控制文件中记录wal文件中lsn号在该时刻的检查点lsn之后的日志的存储地址。在一种实施方式中,在服务器中仅通过一个线程在wal文件中顺序记录多个日志,该线程在确定lsn1之后,可在控制文件中记录该wal文件中lsn号在lsn1之后的第一个日志的存储地址。在一种实施方式中,在服务器中通过多个线程在多个wal文件中并发记录日志。与上文中所述类似地,在确定lsn1之后,每个线程在控制文件中记录其处理wal文件的文件id,以及各个wal文件中lsn号在lsn1之后的第一个日志的存储地址。在通过上述方法在服务器的持久性介质13中维护与各个分区分别对应的全量检查点文件和增量检查点文件,以及全局的控制文件作为数据库恢复文件之后,当服务器出现异常,例如,由于断电、硬件故障、软件漏洞等原因导致数据库中止运行,从而可通过所述数据库恢复文件将数据库恢复到一致性的状态。图14示出本发明另一个实施例中根据全量检查点文件和增量检查点文件恢复数据库的方法流程图,所述方法包括:步骤s1402,在数据库服务器故障后恢复时,读取最新的全量检查点文件中的n个位置,生成映射表,所述映射表中包括与所述n个位置一一对应的n行,其中,对于n个位置中的每个位置,如果该位置中记录了地址,则在映射表中与该位置对应的行中添加节点描述,所述节点描述包括从该位置读取的地址,如果该位置进行了预定标注,则将映射表中与该位置对应的行保持为空行;步骤s1404,读取增量检查点文件中包括的多个位置,修改映射表。对于多个位置中的每个位置,如果该位置记录了行id和相应的地址,则对映射表中的与该位置中的该行id对应的行中的节点描述进行修改,以使得该节点描述中包括从该位置获取的地址,如果该位置记录了行id和“0”,则将映射表中的与该位置中的该行id对应的行中的节点描述删除;步骤s1406,读取日志文件中的lsn号在lsn2之后的每个操作日志,如果该操作日志为插入或修改记录行的日志,则读取该操作日志中的行id、并获取该操作日志的序列号、和该操作日志或其中的记录行数据在所述持久性介质13中的存储地址,如果该操作日志为删除记录行的日志,则读取该操作日志中的行id,并获取该操作日志的序列号;步骤s1408,按照lsn号在检查点lsn2之后各个操作日志的lsn的从小到大的顺序,基于lsn号在lsn2之后的每个操作日志,修改映射表。如果该操作日志为修改记录行的日志,则在映射表中对该操作日志对应的行中的节点描述进行修改,以使得该节点描述中包括:该操作日志中记录行数据的生效序列号、及所述存储地址,其中,所述生效序列号为该操作日志的序列号,如果该操作日志为插入记录行的日志,则在映射表中对该操作日志对应的行中增加节点描述,并使得该节点描述中包括:该操作日志中记录行数据的生效序列号、及所述存储地址,如果该操作日志为删除记录行的日志,则在映射表中对该操作日志对应的行中的节点描述进行修改,以使得该节点描述中包括相应的记录行数据的失效序列号,其中,所述失效序列号为该操作日志的序列号。图15示出在执行图14所示方法过程中服务器中包括的数据示意图。假设,服务器系统在检查点lsn2=100之后发生异常,在发生该异常之后,在服务器的持久性介质13中存储有与数据表1对应的全量检查点文件和增量检查点文件1,如图15中持久性介质13中所示,另外,所述持久性介质13中还存储有在发送异常之前通过图15中的wal文件记录的多个日志,此时,服务器内存12中已经没有图13所示的映射表,在下面的步骤中,将通过介质中存储的全量检查点文件、增量检查点文件1、和所述wal文件来恢复出内存12中在发生异常之前的映射表。在步骤s1402,参考图15中以①标识的箭头,该箭头示意示出了通过全量检查点文件恢复映射表1的过程,通过该过程可在内存12中生成如图15中所示的映射表1。该步骤的具体实施可参考上文中对步骤s1002的具体描述,在此不再赘述。在步骤s1404,参考图15中以②标识的箭头,该箭头示意示出了通过增量检查点文件1恢复映射表的过程。通过读取该增量检查点文件1,在该增量检查点文件1中的第一个位置,行id100000000与地址5对应,从而对于在上一个步骤中恢复的映射表1,将其中第0行中的“地址1”替换为相应的“地址5”。在该增量检查点文件1中的第二个位置,行id100000002与“0”相对应,从而将映射表1中第2行中的“地址2”删除,以表示该行对应的记录行被删除。从而获取通过该步骤进一步恢复的映射表,如该图中的中间的映射表1′所示。可以理解图15中示出的映射表1、映射表1′和映射表1″都是与数据表1对应的映射表,其中的1、1′、1″用于区分该映射表在不同恢复阶段的形式。图15中虽然仅示意示出了增量检查点文件1,如上文所述,对于映射表1,在全量检查点文件之后,可能存在多个增量检查点文件,例如,在增量检查点文件1之后还有增量检查点文件2,在该情况中,则针对增量检查点文件2再次执行该步骤,以进一步恢复映射表。步骤s1406可参考上文对步骤s1004的描述。同样地,在一种实施方式中,在持久性介质13中维护控制文件,以记载在日志文件中在最新检查点之后的日志的存储地址。例如,在确定检查点lsn2之后,在控制文件中例如记录了与图15中wal文件对应的lsn号为101的操作日志相关的地址(例如地址7)。从而,在执行该步骤时,通过读取控制文件,可获取wal文件中的地址7,并基于该地址进行读取,从而可获取lsn=101的操作日志对应的行id,以及该操作日志中记录行数据的生效序列号、和该操作日志(或其中的记录行数据)在所述持久性介质13中的存储地址。通过顺序读取wal文件中从地址7开始的每个日志,从而可获取序列号在lsn2之后的每个操作日志对应的行id、序列号、和该操作日志(或其中的记录行数据)在所述持久性介质13中的存储地址。步骤s1408的实施可参考上述对步骤s1006的描述,在读取到lsn=101的日志之后,可获取lsn=101的操作日志的lsn号,即lsn=101,从而可在映射表1′中将第3行的“地址4”替换为右侧的映射表1″中的第3行的节点描述,其中包括所述操作日志中记录行数据的生效序列号tmin=101和该操作日志或其中的记录行数据的存储地址“地址7”,在一个实施例中,也可以包括该操作日志中记录行数据的失效序列号,此时,由于在恢复过程中刚读取到该操作日志,因此可将其失效序列号暂时记为“tmax=max”。对于所读取的操作日志为插入记录行的日志或删除记录行的日志的情况可参考针对步骤s1006的描述,在此不再赘述。可以理解,在通过单线程在wal文件中记录日志的情况中,在最新检查点之后的多个日志顺序记录在相同的wal文件中,从而,在通过读取控制文件获取所述wal文件中在最新检查点之后的第一个日志的存储地址之后,可从该日志开始顺序读取每个日志,以对映射表进行恢复。在通过多个线程在多个wal文件中并发记录日志的情况中,在最新检查点之后的多个日志分散记录在所述多个wal文件中,则可依据所述多个wal文件中的该多个日志的lsn号的顺序从各个wal文件中读取相应的操作日志,以对映射表进行修改,从而使得最终恢复的映射表与发生异常之前的映射表是一致的。在该实施例另一种实施方式中,所述映射表被划分为多个分区,每个分区包括多个映射表行。在生成检查点文件时,可逐个分区生成检查点文件,对于每个分区,判断每个分区的映射表行对应的数据表的记录行的热度,如果热度大于等于预设值,则生成该分区的全量检查点文件,如果热度小于预设值,则生成该分区的增量检查点文件。这样,在通过检查点文件进行数据库恢复时,可逐个分区进行恢复。图16示出一种生成数据库恢复文件的方法流程图,所述方法包括:步骤s1602,当到达预设的检查时刻,从日志文件中获取当前最大的lsn号,即检查点lsn;步骤s1604,确定所述映射表每个分区在所述检查时刻的热度。步骤s1606,在确定所述分区的热度大于等于预定阈值的情况中,则对所述分区生成全量检查点文件。如果分区的热度大于等于预定阈值,则说明该分区对应的数据表的记录行中被修改的数据比较多,可以生成全量检查点文件来记录被修改的数据。在生成全量检查点文件之后,对于包括生效lsn小于等于检查点lsn、失效lsn大于检查点lsn的节点描述的行,将该行的所述节点描述中的存储地址记录至全量检查点文件中与该行对应的位置中,对于不包括生效lsn小于等于检查点lsn、失效lsn大于检查点lsn的节点描述的行,在所述全量检查点文件中与该行对应的位置中进行预定标注,所述全量检查点文件的位置与所述映射表中的相同顺序的行一一对应,然后将所述全量检查点文件存入所述持久性介质13中;步骤s1608,在确定所述热度小于预定阈值的情况中,则对所述分区生成增量检查点文件。如果热度小于预定阈值,则说明数据表中被修改的数据比较少,可以生成增量检查点文件来记录被修改的数据,这样可以减少文件大小,节省存储空间,同时也节省生成检查点文件的时间。在生成增量检查点文件时,对于包括生效序列号大于上一次检查点lsn、且小于等于本次检查点lsn、并且失效序列号大于本次检查点lsn的节点描述的行,在增量检查点文件中记录:该行行id、和该行的所述节点描述中包括的地址,对于包括生效序列号大于上一次检查点lsn且小于等于本次检查点lsn、并且失效序列号小于等于本次检查点lsn的节点描述的行,在增量检查点文件中记录,该行行id,和对该行的标注,例如“0”。然后将所述增量检查点文件存入所述持久性介质13中。图17示意示出了相对于映射表1的各个分区生成全量检查点文件和增量检查点文件的示意图。如图17中所示,假设将内存12中的映射表1每隔连续的四行划分为一个分区,例如将其中到第0~3行划分为分区1,将其中的第4~7行划分为下一个分区(未示出)。可以理解,这里以四行划分为一个分区仅仅是示意性的,在实际操作中,每个分区将包括较多(如几百、几千等)行。其中,以实线框绘出的映射表1为映射表1在lsn1时包括的内容,以虚线框绘出的映射表1′为映射表1在lsn2时包括的内容。在该方案中,相对于各个分区分别生成检查点文件,因此,在服务器的持久性介质13中分别维护与各个分区分别对应的检查点文件夹,在该检查点文件夹中存入与相应分区对应的检查点文件,其中包括全量检查点文件和增量检查点文件。下文中,将基于图17中的示例描述图15中的各个步骤。步骤s1602的具体实施可参考上文中对步骤s1202的描述,在此不再赘述。在步骤s1604,在一种实施方式中,所述映射表1中分区1的在与lsn1对应的检查时刻的热度可基于在该时刻之前的预定时段内该分区1中各个行中的节点描述数目总数确定。在一种实施方式中,可在节点描述中包括相应日志的操作字节数,从而在计算各个分区的热度时,可基于lsn1之前的预定时段内的分区1中每行中的节点描述的数目、以及各个节点描述中包括的相应日志的操作字节数,来确定分区1的热度。在步骤s1606,在确定所述分区的热度大于等于预定阈值的情况中,则对所述分区生成全量检查点文件。例如,假设在lsn1对应的检查时刻,确定图17中的分区1的热度大于等于预定阈值,则可基于分区1生成全量检查点文件,该过程可参考上文中对图8所示方法的相应描述,在此不再赘述。从而可获得如下面的表3所示的全量检查点文件:地址10地址2地址4表3如图17中所示,在生成所述全量检查点文件之后,在服务器的介质中的与分区1对应的文件夹中存入该全量检查点文件,并且在存入该全量检查点文件之后,可将该文件夹中之前存入的与之前的检查点lsn对应的全量检查点文件和增量检查点文件都删除。步骤s1608,在确定所述热度小于预定阈值的情况中,则对所述分区生成增量检查点文件。例如,假设在lsn2对应的检查时刻,确定图17中映射表1′的热度小于预定阈值,则可基于映射表1′中的分区1生成增量检查点文件。具体是,在确定所述热度小于预定阈值的情况中,对于映射表1′的分区1中的每个映射表行,逐行确定是否包括:生效序列号大于lsn1、且小于等于lsn2、并且失效序列号大于lsn2的节点描述、以及生效序列号大于lsn1、且小于等于lsn2、并且失效序列号小于等于lsn2的节点描述。也就是说,首先,对于映射表1′的分区1中的每行,确定是否包括生效序列号tmin和失效序列号tmax满足如公式(2)所示的不等式的节点描述:lsn1<tmin≤lsn2<tmax(2)假设lsn1=50,lsn2=100,参考图17中的虚线框中的映射表1′中分区1中的第0~3行,对其中每行中包括的每个节点描述基于公式(2)进行判断,可以确定,在第0行中较早的节点描述中,50<tmin=60≤100<tmax=105,因此,该节点描述满足公式(2)。可以理解,满足公式(2)的节点描述表示该映射表行对应的记录行在两个检查时刻之间被修改或插入。另外,对于映射表1′中的每行,确定是否包括生效序列号tmin和失效序列号tmax满足如公式(3)所示的不等式的节点描述:lsn1<tmin≤lsn2,且tmax≤lsn2(3)参考映射表1′中的分区1中的第0~3行,可以确定,在第2行中的节点描述中,50<tmin=90≤100,且tmax=95≤100,因此,该节点描述满足公式(3)。可以理解,满足公式(3)的节点描述表示该映射表行对应的记录行在两个检查时刻之间被删除。对于分区1中每个包括满足公式(2)的节点描述的行,在增量检查点文件中的一个位置中记录:该行行id、和该行相应的节点描述中包括的地址。对于分区1中每个包括满足公式(3)的节点描述的行,在增量检查点文件中的一个位置中记录:该行行id、和预定标注(例如“0”)。例如,对于上述确定的所述分区1中存在的满足公式(2)和(3)的节点描述之后,可生成如下面的表4所示的分区1的增量检查点文件1:100000000,地址5100000002,0表4参考表4,在表4第一行中,100000000为映射表行id,如前文所述,该行id表示映射表1第0行,地址5为图10中虚线框所示的映射表1′中第0行中的较早节点描述中包括的地址,在表2第二行中,100000002表示映射表1中第2行,在该地址后面的“0”表示映射表1′中第2行中在上述两个检查时刻之间被删除。图17中示意示出了在存入该增量检查点文件1之后在与分区1对应的检查点文件夹中包括的文件,在该文件夹中包括全量检查点文件和增量检查点文件1。在该文件夹中存入增量检查点文件1之后,并不需要删除其之前的全量检查点文件,该全量检查点文件和增量检查点文件1用于在数据库恢复时结合恢复映射表1中的分区1。在检查点lsn2之后的下一个检查点时,当通过基于热度进行确定,有可能仍对分区1生成增量检查点文件2,从而,在进行数据库恢复时,可结合该文件夹中的全量检查点文件、增量检查点文件1和增量检查点文件2用于恢复映射表1中的分区1。图18示出一种数据库恢复方法流程图,所述方法包括:步骤s1802,在数据库服务器故障后恢复时,读取每个分区的最新的全量检查点文件中的n个位置,生成映射表的每个分区,所述映射表的每个分区中包括与所述n个位置一一对应的n行,其中,对于n个位置中的每个位置,如果该位置中记录了地址,则在分区中与该位置对应的行中添加节点描述,所述节点描述包括从该位置读取的地址,如果该位置进行了预定标注,则将分区中与该位置对应的行保持为空行;步骤s1804,读取每个分区的增量检查点文件中包括的多个位置,修改映射表的每个分区,对于多个位置中的每个位置,如果该位置记录了行id和相应的地址,则对分区中的与该位置中的该行id对应的行中的节点描述进行修改,以使得该节点描述中包括从该位置获取的地址,如果该位置记录了行id和“0”,则将分区中的与该位置中的该行id对应的行中的节点描述删除;步骤s1806,读取日志文件中的lsn号在lsn2之后的每个操作日志,如果该操作日志为插入或修改记录行的日志,则读取该操作日志中的行id、并获取该操作日志的序列号、和该操作日志或其中的记录行数据在所述持久性介质13中的存储地址,如果该操作日志为删除记录行的日志,则读取该操作日志中的行id,并获取该操作日志的序列号;步骤s1808,按照lsn号在检查点lsn1之后各个操作日志的lsn的从小到大的顺序,基于lsn号在lsn2之后的每个操作日志,修改映射表,如果该操作日志为插入或修改记录行的日志,则在映射表中对该操作日志对应的行中的节点描述进行修改,以使得该节点描述中包括:该操作日志中记录行数据的生效序列号、及所述存储地址,其中,所述生效序列号为该操作日志的序列号,如果该操作日志为插入记录行的日志,则在映射表中对该操作日志对应的行中增加节点描述,并使得该节点描述中包括:该操作日志中记录行数据的生效序列号、及所述存储地址,如果该操作日志为删除记录行的日志,则在映射表中对该操作日志对应的行中的节点描述进行修改,以使得该节点描述中包括相应的记录行数据的失效序列号,其中,所述时效序列号为该操作日志的序列号。图19示出在执行图18所示方法过程中服务器中包括的数据示意图。假设,服务器系统在检查点lsn2=100之后发生异常,并且图19中的映射表1的分区1中包括的四行,在发生该异常之后,在服务器的持久性介质13中存储的与该分区1对应的全量检查点文件和增量检查点文件1如图19中持久性介质13中所示,另外,所述持久性介质13中还存储有在发送异常之前通过图19中的wal文件记录的多个日志,此时,服务器内存12中已经没有图17所示的映射表,在下面的步骤中,将通过介质中存储的各个分区的全量检查点文件、增量检查点文件、和所述wal文件来恢复出内存12中在发生异常之前的映射表。在步骤s1802,参考图19中以①标识的箭头,该箭头示意示出了通过分区1的全量检查点文件恢复映射表1中的分区1的过程,通过该过程可在内存12中生成如图19中所示的映射表1中的分区1。该步骤与上文中的步骤s1402基本相同,不同之处在于,在步骤s1402中,通过映射表1的全量检查点文件恢复映射表1,而在步骤s1802中,通过各个分区的全量检查点文件恢复出各个分区,从而恢复出映射表1。在步骤s1804,参考图19中以②标识的箭头,该箭头示意示出了通过分区1的增量检查点文件1恢复映射表1′中分区1的过程。该步骤与上文中的步骤s1404基本相同,不同之处在于,在步骤s1404中,通过映射表1的增量检查点文件1恢复映射表1′,而在步骤s1804中,通过各个分区的增量检查点文件恢复出各个分区,从而恢复出映射表1′。图19中虽然仅示意示出了增量检查点文件1,对于各个分区,在该分区的全量检查点文件之后,可能存在多个增量检查点文件,例如,在增量检查点文件1之后还有增量检查点文件2,在该情况中,则针对增量检查点文件2再次执行该步骤,以进一步恢复该分区。步骤s1806和步骤s1808的实施可参考上述对步骤s1406和步骤s1408的描述,在此不再赘述。上文中的实施例描述了基于全量检查点文件、增量检查点文件的数据库运行和恢复过程。通过基于字节级持久性介质实施该方案,在数据库恢复期间,可对数据库进行字节级的读写,从而避免了现有技术中的读写放大和恢复时间过长的问题。在持久性介质不是字节级介质的情况中,可通过设置地址映射层将页id和页内偏移映射为上文中的日志的存储地址,从而实施该方案。即使在非字节级的介质中实施该方案,在数据库恢复的过程中,可通过数据库恢复文件快速恢复映射表,从而恢复数据表,同样可以起到缩短数据库恢复时间的有益效果。另外,在该方案中,通过相对于映射表中的冷分区生成与检查点对应的增量检查点文件,减少了重复工作量和文件中的重复数据,节省了存储空间和计算资源。可以理解,根据本申请实施例的基于全量检查点文件和增量检查点文件的数据库运行和恢复方案不限于上述方式,例如,在一种实施方式中,在数据库正常运行之后的第一个检查时刻,生成全量检查点文件,在从第二个检查时刻的每个时刻,生成增量检查点文件,从而,在通过恢复文件进行数据库恢复时,可结合所述全量检查点文件和其之后的多个增量检查点文件进行数据库恢复。可以理解,虽然在上述实施例中,将数据表的记录行数据记录在日志中,并在映射表中的每个节点描述中使用日志的日志序列号来标识相应的数据当前是否有效,并且使用检查点lsn来表示检查时刻,然而,在本发明中,数据表的数据的记录形式不限于日志的形式,而可以采用其它形式,如按顺序记录到介质的预定地址段中等等,并且用于判断数据是否有效的参数不限于使用日志的日志序列号,例如可通过时间参数(如数据存入时间,数据删除时间)等等,来确定数据当前是否有效,另外,可使用其它参数来标识检查时刻,如数据下盘时间等等。图20示出根据本申请实施例的一种部署于数据库服务器中的数据库恢复装置2000,所述数据库服务器中存储有恢复文件,所述恢复文件与检查时刻相对应,所述恢复文件包括在检查时刻数据表中的每个记录行的数据的存储地址,所述装置包括:第一获取单元201,用于在所述数据库服务器故障后,从所述恢复文件中获取在检查时刻所述数据表中每个记录行的数据的存储地址;第一生成单元202,用于在所述数据库服务器的内存中生成第一映射表,所述第一映射表中包括与所述数据表的记录行一一对应的各行,将所述恢复文件中记录的所述数据表的每个记录行的数据的存储地址记录至所述映射表中每个记录行对应的行中;第二获取单元203,用于获取在所述预设时刻之后所述数据表中的记录行的数据变化;修改单元204,用于基于所述数据表中的记录行的数据变化修改所述第一映射表中与所述记录行对应的行。在一种实施方式中,所述第二获取单元还用于获取在所述检查时刻之后,所述数据表中被更改的记录行的数据的存储地址;所述修改单元还用于用所述被更改的记录行的数据的存储地址替换所述映射表中与所述被更改的记录行对应的行中的存储地址。在一种实施方式中,所述第二获取单元还用于在将所述恢复文件中记录的所述数据表的每个记录行的数据的存储地址记录至所述映射表中每个记录行对应的行中之后,获取在所述检查时刻之后所述数据表中新插入的记录行的数据的存储地址;所述修改单元还用于在所述映射表中与所述新插入的记录行对应的行中记录所述新插入的记录行的数据的存储地址。在一种实施方式中,所述第二获取单元还用于在将所述恢复文件中记录的所述数据表的每个记录行的数据的存储地址记录至所述映射表中每个记录行对应的行中之后,确定在所述检查时刻之后所述数据表中删除的记录行;所述修改单元还用于在所述映射表中与所述删除的记录行对应的行进行标注,以指示该行对应的记录行被删除。在一种实施方式中,在所述数据库服务器故障前,所述装置还包括第一运行模块205,图21示出根据本申请实施例的第一运行模块205,包括:获取子单元2051,用于每隔一段时间设置一个检查时刻,每到达一个检查时刻,从内存中存储的所述数据表对应的第二映射表中获取在该检查时刻所述数据表的每个记录行的数据的存储地址;生成子单元2052,用于生成全量检查点文件,将获取的在所述检查时刻所述数据表的每个记录行的数据的存储地址记录至全量检查点文件中;在所述数据库服务器故障后,将对应的检查时刻离所述数据库故障的时间最近的全量检查点文件作为所述恢复文件。在一种实施方式中,在所述数据库服务器故障前,所述装置还包括第二运行模块206,图22示出根据本申请实施例的第二运行模块206,包括:判断子单元2061,用于每隔一段时间设置一个检查时刻,每到达一个检查时刻,判断所述数据表的热度是否大于一预设值;第一获取子单元2062,用于若所述数据表的热度大于等于所述预设值,则从内存中存储的所述数据表对应的第二映射表中获取在该检查时刻所述数据表的每个记录行的数据的存储地址;第一生成子单元2063,用于生成全量检查点文件,将获取的在所述检查时刻所述数据表的每个记录行的数据的存储地址记录至全量检查点文件中;第二获取子单元2064,用于若所述数据表的热度小于所述预设值,则从所述第二映射表中获取在上次检查时刻与本次检查时刻之间产生的所述数据表的记录行的新数据的存储地址,并从所述第二映射表中获取在上次检查时刻与本次检查时刻之间删除的数据表的记录行;第二生成子单元2065,用于生成增量检查点文件,将所述新数据对应的第二映射表中的行标识及所述新数据的存储地址记录至增量检查点文件,并将所述删除的记录行对应的第二映射表中的行标识及对其的预定标注记录至增量检查点文件;在所述数据库服务器故障后,将检查时刻离所述数据库故障的时间最近的全量检查点文件、及检查时刻在该全量检查点文件之后的增量检查点文件作为所述恢复文件。在一种实施方式中,所述数据库服务器中还存储有控制文件,所述第二运行模块还包括,记录子单元2066,用于每到达一个检查时刻,在该检查时刻之后,在所述控制文件中记录数据表中在该检查时刻之后存入的数据的存储地址,其中,所述第二获取单元203还用于在所述数据库服务器故障后,基于所述控制文件获取在所述检查时刻之后所述数据表中被更改的记录行的数据的存储地址。在一种实施方式中,在所述数据库服务器故障前,所述数据库服务器的内存中包括第二映射表,所述第二映射表被划分为多个分区,每个分区包括多个行;所述装置还包括第三运行模块207,图23示出根据本申请实施例的第三运行模块207,包括:判断子单元2071,用于每隔一段时间设置一个检查时刻,每到达一个检查时刻时,判断每个分区对应的数据表的记录行的热度是否大于一预设值;第一获取子单元2072,用于若所述分区对应的数据表的记录行的热度大于等于所述预设值,则从所述第二映射表中获取在该检查时刻所述分区对应的每个记录行的数据的存储地址;第一生成子单元2073,用于生成该分区的全量检查点文件,将获取的在该检查时刻所述分区对应的每个记录行的数据的存储地址记录至所述全量检查点文件中;第二获取子单元2074,用于若所述分区对应的数据表的记录行热度小于所述预设值,则从所述第二映射表中获取在上次检查时刻与本次检查时刻之间产生的所述分区对应的数据表的记录行的新数据的存储地址;第二生成子单元2075,用于生成该分区的增量检查点文件并将所述新数据对应的第二映射表中的行标识及所述新数据的存储地址记录至增量检查点文件;在所述数据库服务器故障后,将检查时刻离所述数据库故障的时间最近的所述分区的全量检查点文件、及检查时刻在该全量检查点文件之后的所述分区的增量检查点文件作为所述分区的恢复文件。在一种实施方式中,所述数据库服务器中存储有日志文件,所述装置还包括插入模块208,图24示出根据本申请实施例的插入模块208,包括:接收子单元2081,用于接收记录行插入请求,所述记录行插入请求包括插入记录行数据;生成子单元2082,用于在所述日志文件中生成一条插入行日志,将所述插入记录行数据记录在所述插入行日志中;记录子单元2083,用于将所述插入行日志的存储地址记录在所述第二映射表与所述插入记录行对应的行中。在一种实施方式中,所述日志文件中的每个日志被分配有体现时间先后顺序的日志序列号,所述检查时刻以所述日志文件中的一个日志序列号表示,所述插入模块还包括:分配子单元2084,用于在生成所述插入行日志时,为所述插入行日志分配一个日志序列号;其中,所述记录子单元2083还用于在所述映射表中与所述插入记录行对应的行中生成一个节点描述,所述节点描述中包括所述插入行日志的存储地址和日志序列号,以通过所述日志序列号标识所述插入行日志中的数据为所述插入记录行的当前数据。在一种实施方式中,所述装置还包括修改模块209,图25示出根据本申请实施例的修改模块209,包括:接收子单元2091,用于接收记录行修改请求,所述记录行修改请求包括针对记录行的修改信息;生成子单元2092,用于在所述日志文件中生成一条修改行日志,将经修改的记录行的记录行在所述修改行日志中;记录子单元2093,用于将所述修改行日志的存储地址记录在所述第二映射表中与所述修改的记录行对应的行中。在一种实施方式中,所述装置还包括读取模块210,图26示出根据本申请实施例的读取模块210,包括:接收子单元2101,用于接收记录行读取请求;获取子单元2102,用于从所述第二映射表中的与所述记录行对应的行中获取所述记录行数据对应的日志的存储地址;读取子单元2103,用于基于所述存储地址读取所述记录行的数据;返回子单元2104,用于返回所述记录行的数据。在一种实施方式中,所述装置还包括删除模块211,图27示出根据本申请实施例的删除模块211,包括:接收子单元2111,用于接收记录行删除请求;生成子单元2112,用于在所述日志文件中生成一条删除行日志,所述删除行日志中与记录行对应的数据区为空;标记子单元2113,用于在所述第二映射表中与所述记录行对应的行中进行删除标记。在一种实施方式中,所述删除模块还包括,分配子单元2114,用于在生成所述删除行日志时,为所述删除行日志分配一个日志序列号,其中,所述标记子单元2113还用于在所述第二映射表中与所述记录行对应的行中的节点描述中记录所述删除行日志的日志序列号,以标记所述记录行被删除。本发明另一方面提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行上述任一项方法。本发明另一方面提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现上述任一项方法。需要理解,本文中的“第一”,“第二”等描述,仅仅为了描述的简单而对相似概念进行区分,并不具有其他限定作用。本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令处理器完成,所述的程序可以存储于计算机可读存储介质中,所述存储介质是非短暂性(英文:non-transitory)介质,例如随机存取存储器,只读存储器,快闪存储器,硬盘,固态硬盘,磁带(英文:magnetictape),软盘(英文:floppydisk),光盘(英文:opticaldisc)及其任意组合。以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域
的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。当前第1页1 2 3 
再多了解一些
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1