CN110737547B - 使用非易失性存储器nvm恢复内存数据库的方法和设备 - Google Patents

使用非易失性存储器nvm恢复内存数据库的方法和设备 Download PDF

Info

Publication number
CN110737547B
CN110737547B CN201911006523.6A CN201911006523A CN110737547B CN 110737547 B CN110737547 B CN 110737547B CN 201911006523 A CN201911006523 A CN 201911006523A CN 110737547 B CN110737547 B CN 110737547B
Authority
CN
China
Prior art keywords
data
nvm
memory
sequence
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201911006523.6A
Other languages
English (en)
Other versions
CN110737547A (zh
Inventor
杨俊�
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
4Paradigm Beijing Technology Co Ltd
Original Assignee
4Paradigm Beijing Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 4Paradigm Beijing Technology Co Ltd filed Critical 4Paradigm Beijing Technology Co Ltd
Priority to CN201911006523.6A priority Critical patent/CN110737547B/zh
Publication of CN110737547A publication Critical patent/CN110737547A/zh
Application granted granted Critical
Publication of CN110737547B publication Critical patent/CN110737547B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1458Management of the backup or restore process
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Quality & Reliability (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

提供了一种使用非易失性存储器NVM恢复内存数据库的方法和设备,所述方法包括:在对动态随机存取存储器DRAM中的内存数据库执行基本操作的同时,将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列;将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区;并且将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化。

Description

使用非易失性存储器NVM恢复内存数据库的方法和设备
技术领域
本申请总体说来涉及内存数据库恢复的技术领域,更具体地讲,涉及使用非易失性存储器NVM恢复内存数据库的方法和设备。
背景技术
现有的内存数据库恢复方法普遍依赖于(1)快照/检查点(snapshot/checkpointing)、(2)日志(log)或者(3)前述两者。其中,方法(1)会把一个时间点的数据库内的所有数据以某种预先定义好的格式存入持久化设备,如磁盘(Hard disk)或者固态硬盘(Flash SSD)。为了保证数据的一致性,在将内存数据库写入持久化设备的过程中,虽然内存数据库仍然可以支持读取操作,但是该写入过程对读取性能(延迟及带宽)会有非常大的影响,而且通常不允许同时进行数据更新操作(虽然某些技术可以支持同时进行数据更新操作,但是会大幅影响性能并占用额外内存空间)。由于持久化设备的性能远低于内存,因此在大数据时代的今天,往往一次snapshot/checkpointing的时间会以10分钟甚至小时计。对于许多使用内存数据库的低延迟高带宽场景而言,方法(1)带来的性能影响无法被接受。同时为了保证数据恢复时的新鲜度,不得不频繁地进行snapshot/checkpointing,因此会对性能造成更严重的影响。因此,为了减少snapshot/checkpointing的时间及频率,可以使用方法(2)将部分数据的持久化设备写入进行均分,即,以日志的形式记录数据的更新,并且在恢复数据时,通过日志重放(redo-log)将最近的一次snapshot中的数据恢复到最新状态。为了保证数据的一致性,必须在保证日志真正写入持久化设备之后才能返回写入成功。然而,此类被称为“同步写”(synchronized write)的操作在持久性设备上的代价非常高,大幅延长了内存数据库数据写入的延迟。鉴于日志写入的代价不可忽略,随着数据写入量和写入频率的日益增加,内存数据库的持久性策略往往在恢复数据时的新鲜度(是不是最新的数据)及运行时的性能之间做取舍。
另外,即使用最先进的方法(3)(即方法(1)和方法(2)相结合的方法),恢复内存数据库的时间仍然很长。根本原因在于方法(1)必须先从持久化设备中读取最新snapshot的全部数据,并且这些数据的数据格式并非读取到内存后即时可用,而是必须以内存数据库的格式对这些数据进行重构,然而此过程非常耗时。此外,方法(2)接着进行的日志重放相当于重新执行最新snapshot之后所有的数据库更新操作,如果snapshot间隔比较长,那么日志重放也将非常耗时。
发明内容
本申请的示例性实施例在于提供一种使用非易失性存储器NVM恢复内存数据库的方法和设备,以至少解决现有技术存在的上述问题。
根据本申请的示例性实施例,提供一种使用非易失性存储器NVM恢复内存数据库的方法,所述方法可包括:在对动态随机存取存储器DRAM中的内存数据库执行基本操作的同时,将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列;将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区;并且将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化。
可选地,将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列的步骤可包括:将所述内存数据库中被执行了所述基本操作的数据封装成基本组成单元,其中,基本组成单元包括用于标识基本组成单元的开始的起始标识符、用于标识基本组成单元的结束的结束标识符以及至少一个序列;并且将封装后的基本组成单元插入到DRAM中的存储器操作队列。
可选地,所述至少一个序列中的每一个序列可具有由地址偏移量、数据长度以及数据所定义的特定格式。
可选地,将NVM中的与所述存储器队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区的步骤可包括:按照预定顺序搜索所述存储器操作队列中的相继出现的一对起始标识符和终止标识符;依次读取NVM中的与所述一对起始标识符和终止标识符之间的每一个序列中的地址偏移量对应的位置处的数据;依次将读取的数据写入到所述回滚区中的由所述回滚区的尾部指针所指向的位置处并固化;并且将所述尾部指针指向所述回滚区的所有数据的末尾的地址并对所述尾部指针进行固化。
可选地,依次将读取的数据写入到所述回滚区中的由所述回滚区的尾部指针所指向的位置处并固化的步骤可包括:按照所述特定格式将读取的数据组成新序列;并且将组成的新序列写入到所述回滚区中的由所述尾部指针所指向的位置处并固化。
可选地,将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化的步骤可包括:将所述每一个序列中的数据写入NVM中与所述每一个序列中的地址偏移量对应的位置处并固化;在一个基本组成单元中的所有序列中的数据被写入NVM中并被固化之后,将所述回滚区的头部指针设置为所述尾部指针的值并对所述头部指针进行固化,并从所述存储器操作队列删除所述一个基本单元。
可选地,可直到从存储器操作队列中删除与内存数据库中被执行了所述基本操作的数据对应的所有基本组成单元之后才使所述基本操作返回。
可选地,如果所述基本操作针对内存数据库中的特定数据,则可直到从存储器操作队列中删除了与所述特定数据对应的所有基本组成单元之后才使所述基本操作返回。
所述基本操作可不与将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区的步骤和将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化的步骤中的任何一个同步。
可选地,所述方法还可包括:在所述内存数据库重新启动后,检查所述回滚区的尾部指针和头部指针是否一致;如果所述尾部指针和所述头部指针不一致,则从所述头部指针指向的位置开始逐一地获取所述回滚区中存储的序列,将获取的序列中的数据写入到NVM中的与获取的序列中的地址偏移量相应的位置处并固化,并将所述尾部指针设置为所述头部指针的值并固化以使得所述尾部指针和所述头部指针一致。
可选地,所述方法还可包括:在所述尾部指针和所述头部指针一致之后:在DRAM中重新分配用于存储关键数据基地址的第一存储空间以及用于存储用户数据基地址的第二存储空间;并且使用NVM中存储的关键数据基地址和用户数据基地址分别对第一存储空间和第二存储空间进行赋值。
可选地,所述方法还可包括:在DRAM中重新分配用于存储关键数据的第三存储空间和用于存储用户数据的第四存储空间,并确定与第三存储空间相应的基地址和与第四存储空间相应的基地址;根据NVM中存储的关键数据基地址和用户数据基地址,按顺序将NVM中的关键数据和用户数据分别复制到DRAM的第三存储空间和第四存储空间;并且使用与第三存储空间相应的基地址和与第四存储空间相应的基地址分别对第一存储空间和第二存储空间进行赋值。
根据本申请的示例性实施例,提供一种使用非易失性存储器NVM恢复内存数据库的设备,所述设备可包括:NVM;动态随机存取存储器DRAM;以及处理器,被配置为:在对DRAM中的内存数据库执行基本操作的同时,将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列;将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区;并且将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化。
可选地,处理器可通过以下操作将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列:将所述内存数据库中被执行了所述基本操作的数据封装成基本组成单元,其中,基本组成单元包括用于标识基本组成单元的开始的起始标识符、用于标识基本组成单元的结束的结束标识符以及至少一个序列;并且将封装后的基本组成单元插入到DRAM中的存储器操作队列。
可选地,所述至少一个序列中的每一个序列可具有由地址偏移量、数据长度以及数据所定义的特定格式。
可选地,处理器可通过以下操作将NVM中的与所述存储器队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区:按照预定顺序搜索所述存储器操作队列中的相继出现的一对起始标识符和终止标识符;依次读取NVM中的与所述一对起始标识符和终止标识符之间的每一个序列中的地址偏移量对应的位置处的数据;依次将读取的数据写入到所述回滚区中的由所述回滚区的尾部指针所指向的位置处并固化;并且将所述尾部指针指向所述回滚区的所有数据的末尾的地址并对所述尾部指针进行固化。
可选地,处理器可通过以下操作依次将读取的数据写入到所述回滚区中的由所述回滚区的尾部指针所指向的位置处并固化:按照所述特定格式将读取的数据组成新序列;并且将组成的新序列写入到所述回滚区中的由所述尾部指针所指向的位置处并固化。
可选地,处理器可通过以下操作将NVM中的与所述存储器队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区:按照预定顺序搜索所述存储器操作队列中的相继出现的一对起始标识符和终止标识符;依次读取NVM中的与所述一对起始标识符和终止标识符之间的每一个序列中的地址偏移量对应的位置处的数据;依次将读取的数据写入到所述回滚区中的由所述回滚区的尾部指针所指向的位置处并固化;并且将所述尾部指针指向所述回滚区的所有数据的末尾的地址并对所述尾部指针进行固化。
可选地,处理器可通过以下操作依次将读取的数据写入到所述回滚区中的由所述回滚区的尾部指针所指向的位置处并固化:按照所述特定格式将读取的数据组成新序列;并且将组成的新序列写入到所述回滚区中的由所述尾部指针所指向的位置处并固化。
可选地,处理器可通过以下操作将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化:将所述每一个序列中的数据写入NVM中与所述每一个序列中的地址偏移量对应的位置处并固化;并且在一个基本组成单元中的所有序列中的数据被写入NVM中并被固化之后,将所述回滚区的头部指针设置为所述尾部指针的值并对所述头部指针进行固化,并从所述存储器操作队列删除所述一个基本单元。
可选地,直到从存储器操作队列中删除与内存数据库中被执行了所述基本操作的数据对应的所有基本组成单元之后,处理器才可使所述基本操作返回。
可选地,如果所述基本操作针对内存数据库中的特定数据,则直到从存储器操作队列中删除了与所述特定数据对应的所有基本组成单元之后,处理器才可使所述基本操作返回。
可选地,处理器可不保持所述基本操作与将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区的操作和将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化的操作中的任何一个同步。
可选地,处理器还可被配置为:在所述内存数据库重新启动后,检查所述回滚区的尾部指针和头部指针是否一致;如果所述尾部指针和所述头部指针不一致,则从所述头部指针指向的位置开始逐一地获取所述回滚区中存储的序列,将获取的序列中的数据写入到NVM中的与获取的序列中的地址偏移量相应的位置处并固化,并将所述尾部指针设置为所述头部指针的值并固化以使得所述尾部指针和所述头部指针一致。
可选地,处理器还可被配置为在所述尾部指针和所述头部指针一致之后进行以下操作:在DRAM中重新分配用于存储关键数据基地址的第一存储空间以及用于存储用户数据基地址的第二存储空间;并且使用NVM中存储的关键数据基地址和用户数据基地址分别对第一存储空间和第二存储空间进行赋值。
可选地,处理器还可被配置为:在DRAM中重新分配用于存储关键数据的第三存储空间和用于存储用户数据的第四存储空间,并确定与第三存储空间相应的基地址和与第四存储空间相应的基地址;根据NVM中存储的关键数据基地址和用户数据基地址,按顺序将NVM中的关键数据和用户数据分别复制到DRAM的第三存储空间和第四存储空间;并且使用与第三存储空间相应的基地址和与第四存储空间相应的基地址分别对第一存储空间和第二存储空间进行赋值。
由于本申请可以利用高性能NVM作为内存数据库的备份设备,采用新的镜像法在不依赖于snapshot和log的情况下实现内存数据库的实时数据持久化。同时,本申请也可以不进行内存数据库恢复时的重构过程,实现内存数据库的即时快速恢复。此外,本申请还能够针对追求极限性能的情况允许一定数据新鲜度的损失,并能够在完全不影响内存数据库性能的情况下实现持久化功能。
将在接下来的描述中部分阐述本申请总体构思另外的方面和/或优点,还有一部分通过描述将是清楚的,或者可以经过本申请总体构思的实施而得知。
附图说明
从下面结合附图对本申请实施例的详细描述中,本申请的这些和/或其他方面和优点将变得更加清楚并更容易理解,其中:
图1是示出根据本申请的示例性实施例的DRAM和NVM的示意图;
图2是示出根据本申请的示例性实施例的使用非易失性存储器NVM恢复内存数据库的设备的框图;
图3是示出根据本申请的示例性实施例的使用NVM恢复内存数据库的方法的流程图;
图4是示出根据本申请的示例性实施例的将NVM中的原始数据写入到NVM的回滚区的方法的流程图;
图5是示出根据本申请的示例性实施例的使用NVM提供内存数据库的服务的方法的流程图;
图6是示出根据本申请的另一示例性实施例的使用NVM提供内存数据库的服务的方法的流程图。
具体实施方式
现在将详细参照本申请的实施例,所述实施例的示例在附图中示出。以下将通过参照附图来说明所述实施例,以便解释本申请。
这里,为了便于更好的理解本申请,首先参照图1对本申请中利用的DRAM和NVM的数据存储方式和存储结构进行说明。
在现有技术中,内存数据库中的数据结构之间通常使用内存指针(pointer)建立联系,由于内存数据库通常都是针对高性能的易失性存储器(如DRAM)设计的,系统掉电或者重启后数据必然已经丢失,故所在地址已无意义,所以此类指针都是使用虚拟存储地址来实现的(即程序每次执行时,所取得的虚拟存储地址都会不同)。然而,本申请使用的NVM在系统掉电或重启后,数据仍然存在,因此基于虚拟存储地址的指针将不再适用于本申请。为了正确且有效地定位数据,本发明使用基于基地址+偏移量而实现的持久性指针来取代内存数据库中的所有指针。也就是说,在本发明中,DRAM和NVM中的所有的“指针”都不是传统内存数据库使用的虚拟存储地址,而是该数据相对其所在存储空间的基地址的偏移量。
此外,内存数据库在存储器中存储的数据通常可分为元数据(meta-data)与用户数据(user-data)两部分,其中,元数据属于重要且不可丢失的关键数据(critical data),用户数据可根据需要适当允许丢失部分数据(但是未丢失数据不得损坏)。本发明针对用户数据和关键数据这两部分数据分别在DRAM和NVM中各预先分配一块连续的存储空间。此后,对于各部分数据的存储空间分配请求都将在各自预先分配好的那一块存储空间中分配,而用于指向在DRAM和NVM中的存储地址处所存放的数据的指针则由基地址(即,预先分配好的大块连续内存空间首地址)和偏移量(即,离基地址的距离)组合而成。
如图1中所示,DRAM可被划分为用于存储关键数据基地址(Critical Baseaddress)的存储空间、用于存储用户数据基地址(User Base address)的存储空间、用于存储关键数据(Critical Data)的存储空间、用于存储用户数据(User Data)的存储空间、以及用于存储存储器操作队列(Mem-op Queue)的存储空间。NVM可被划分为用于存储关键数据基地址(Critical Base address)的存储空间、用于存储用户数据基地址(User Baseaddress)的存储空间、用于存储关键数据(Critical Data)的存储空间、用于存储用户数据(User Data)的存储空间、以及用于暂存NVM中的正被操作改变的关键数据和/或用户数据的原始数据的回滚区(roll-back ring-buffer)。在本发明中,DRAM中的关键数据基地址与用户数据基地址在每次启动时才会确定,而NVM中的关键数据基地址与用户数据基地址都是固定的,用于确保系统重启时仍然可以直接定位NVM中存储的数据。在下面的描述中将参照图2至图6对图1中涉及的DRAM和NVM中的各个存储空间进行说明。
图2是示出根据本申请示例性实施例的使用NVM 100恢复内存数据库的设备10的框图。
如图2中所示,设备10包括DRAM 100、NVM 200和处理器300。
处理器300可被配置为在对DRAM 100中的内存数据库执行基本操作的同时,将所述内存数据库中被执行了所述基本操作的数据插入到DRAM 100中的存储器操作队列。
具体地讲,处理器300可通过以下操作将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列:将所述内存数据库中被执行了所述基本操作的数据封装成基本组成单元,并将封装后的基本组成单元插入到DRAM中的存储器操作队列。
具体地讲,在本申请中,任何用于修改内存数据库的基本操作(例如put操作)在对DRAM 100中的内存数据库的数据进行修改的同时,还会将该基本操作对内存数据库的数据进行的每个修改以预定形式封装成基本组成单元,并将封装好的基本组成单元插入到DRAM100中的存储器操作队列中,其中,如图1中所示,基本组成单元包括用于标识基本组成单元的开始的起始标识符op-start、用于标识基本组成单元的结束的结束标识符op-end以及至少一个序列,其中,每个序列具有由地址偏移量offset、数据长度len以及数据data所定义的特定格式(offset,len,data)。
此外,处理器300可将NVM 200中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM 200的回滚区,在下文中,为了便于描述,从NVM 200中读取的被写入到回滚区的数据可被称为原始数据。其中,处理器300可执行与以上描述的将数据插入到DRAM 100中的存储器操作队列的进程相独立的独立进程来完成该操作。
具体地讲,首先,处理器300需要检查存储器操作队列是否为空,如果存储器操作队列为空,则处理器300继续进行检查操作,如果存储器操作队列不为空,则处理器300可按照预定顺序(例如,按照存储器操作队列的先进先出的顺序)搜索存储器操作队列中的相继出现的一对起始标识符op-start和终止标识符op-end,进而获得完整的一个基本组成单元。
此后,处理器300可依次读取NVM 200中的与所述一对起始标识符op-start和终止标识符op-end之间的每一个序列(offset,len,data)中的地址偏移量offset对应的位置处的原始数据original-data。具体地讲,处理器300首先确定所述一个基本组成单元中包括的序列(offset,len,data)中的数据data是关键数据还是用户数据,然后根据确定的结果选择存储在NVM 200中的关键数据基地址和用户数据基地址之一(例如,如果数据data是关键数据,则选择存储在NVM 200中的关键数据基地址,反之则选择存储在NVM 200中的用户数据基地址),然后从NVM 200中读取位于将选择的基地址和序列(offset,len,data)中的地址偏移量offset相加而确定的地址处的长度为len的原始数据original-data。
此后,处理器300可依次将从NVM 200中读取的原始数据original-data写入到NVM200的回滚区中的由回滚区的尾部指针tail所指向的位置处并固化。具体地讲,处理器300首先按照特定格式将读取的长度为len的原始数据original-data组成新序列(offset,len,original-data),其中,特定格式与存储器操作队列中的基本组成单元中包括的序列的存储格式(offset,len,data)相同,新序列(offset,len,original-data)中的offset是原始数据original-data在NVM200中所在的存储空间相对于该存储空间的基地址的地址偏移量,例如,如果原始数据original-data是关键数据,则该offset是NVM 200中用于存储关键数据的存储空间相对于关键数据基地址的地址偏移量。此后,处理器300可将组成的新序列写入到NVM 200的回滚区中的由尾部指针tail所指向的位置处并将该序列固化在该位置处。例如,处理器300可使用clflush、clflushopt、clwb等命令之一来确保将该序列固化到NVM 200中,进而即使在掉电后,该序列仍然存在于NVM 200中。
此后,处理器300可将回滚区的尾部指针tail指向回滚区的所有数据的末尾的地址并对尾部指针tail进行固化。具体地讲,在针对存储器操作队列中的一个基本组成单元中的所有序列完成了NVM 200中的相应数据的读取和固化之后,处理器300需要将回滚区的尾部指针tail移动到回滚区的所有数据的末尾,并利用特定命令(例如clflush、clflushopt、clwb等命令之一)将尾部指针tail固化到NVM 200的用于存储尾部指针tail的存储空间中。
此后,处理器300可将在存储器操作队列中的基本组成单元中包括的每一个序列(offset,len,data)写入到NVM 200中的与所述每一个序列(offset,len,data)中的地址偏移量offset对应的位置处并固化。其中,处理器300可执行与以上描述的将数据插入到DRAM100中的存储器操作队列的进程相独立的独立进程来完成该操作。
具体地讲,处理器300可将所述每一个序列(offset,len,data)中的数据data写入NVM 200中与所述每一个序列(offset,len,data)中的地址偏移量offset对应的位置处并固化,具体地讲,处理器300可首先确定所述每一个序列(offset,len,data)中的数据data是关键数据还是用户数据,然后根据确定的结果选择存储在NVM 200中的关键数据基地址和用户数据基地址之一(例如,如果数据data是关键数据,则选择存储在NVM 200中的关键数据基地址,反之则选择存储在NVM 200中的用户数据基地址),然后将所述每一个序列(offset,len,data)中的长度为len的数据data写入到NVM 200中的将选择的基地址和序列(offset,len,data)中的地址偏移量offset相加而确定的位置处,并将该数据data固化在NVM 200中的该位置处。
在一个基本组成单元中的所有序列中的数据data被写入NVM 200中并被固化之后,处理器300可将NVM 200的回滚区的头部指针head设置为尾部指针tail的值并对头部指针head进行固化,并且从存储器操作队列删除当前的基本单元。具体地讲,在一个基本组成单元中的所有序列中的数据data被写入NVM 200中并被固化之后,处理器300需要将回滚区的头部指针head移动到尾部指针tail的位置,并利用特定命令(例如clflush、clflushopt、clwb等命令之一)将头部指针head固化到NVM 200的用于存储头部指针head的存储空间中,从而保证回滚区的头部指针head和尾部指针tail在一个基本组成单元中的所有序列中的数据data被写入NVM 200中并被固化之后保持一致。
在以上的描述中,对于追求内存数据库中的任何数据都不能丢失的情况,处理器300可以等待直到从存储器操作队列中删除与内存数据库中被执行了基本操作的数据对应的所有基本组成单元之后才使基本操作成功返回,也就是说,为了保证内存数据库中的任何数据都不丢失,处理器300需要保证将存储器操作队列中的与内存数据库中被执行了基本操作的数据对应的所有基本组成单元中包括的序列(offset,len,data)中的数据data都写入到NVM 200中。
然而,对于允许数据丢失但追求极致性能的情况,处理器300可不保持针对内存数据库的基本操作与以下操作中的任何一个同步:将NVM中的与存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区的操作、以及将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化的操作。
但是,为了折中处理,如果所述基本操作针对内存数据库中的特定数据,则处理器300可以等待直到从存储器操作队列中删除了与所述特定数据对应的所有基本组成单元之后才使所述基本操作返回。具体地讲,处理器300可以根据基本操作是针对内存数据库中的关键数据还是针对用户数据而选择不同的处理方式,例如,如果所述基本操作针对内存数据库中的关键数据,则处理器300可以等待直到从存储器操作队列中删除了与所述关键数据对应的所有基本组成单元之后才使所述基本操作成功返回。
通过以上操作,处理器300在对内存数据库执行基本操作时有效地利用NVM 200来备份DRAM 100中的内存数据库,下面将详细描述如何在系统重启时利用NVM 200中存储的数据提供内存数据库的服务。
在系统重启时,对于内存数据库而言,DRAM中没有任何数据,但是由于处理器300根据以上描述的过程使得NVM 200中存储了在系统崩溃或正常关机前在DRAM中的内存数据库的一份镜像,因此处理器300可以直接利用NVM 200中存储的内存数据库的镜像来提供服务。
具体地讲,在内存数据库重新启动后,处理器300首先需要检查NVM 200的回滚区的尾部指针tail和头部指针head是否一致。
如果尾部指针tail和头部指针head一致,则说明存储器操作队列中的所有基本组成单元中的序列(offset,len,data)中的数据data都被写入到NVM 200中的用于存储关键数据的存储空间和/或用于存储用户数据的存储空间中,因此处理器300可直接利用NVM200中的存储在用于存储关键数据的存储空间和/或用于存储用户数据的存储空间中的内存数据库提供服务。
如果尾部指针tail和头部指针head不一致,则说明并非在存储器操作队列中的所有基本组成单元中的序列(offset,len,data)中的数据data都被写入到NVM 200的用于存储关键数据的存储空间和/或用于存储用户数据的存储空间中,而是在该写入过程中发生了例如系统崩溃的事件,进而导致尾部指针tail和头部指针head不一致,因此处理器300可从头部指针tail指向的位置开始逐一地获取在NVM 200的回滚区中存储的序列(offset,len,original-data),将获取的序列(offset,len,original-data)中的数据original-data写入到NVM中的与获取的序列(offset,len,original-data)中的地址偏移量offset相应的位置处并固化,其中,处理器300首先需要确定获取的序列(offset,len,original-data)中的数据original-data是关键数据还是用户数据,然后根据确定的结果选择存储在NVM 200中的关键数据基地址和用户数据基地址之一(例如,如果数据original-data是关键数据,则选择存储在NVM 200中的关键数据基地址,反之则选择存储在NVM 200中的用户数据基地址),然后将获取的序列(offset,len,original-data)中的长度为len的数据original-data写入到NVM 200中的将选择的基地址和序列(offset,len,original-data)中的地址偏移量offset相加而确定的位置处,并将该数据固化在该位置处。此后,处理器300可将尾部指针tail设置为头部指针head的值并固化以使得尾部指针tail和头部指针head一致。
至此,处理器300可确保NVM 200的尾部指针tail和头部指针head一致,为了使得处理器300可利用NVM 200中存储的内存数据库的镜像来提供服务,处理器300可在DRAM100中重新分配用于存储关键数据基地址的第一存储空间以及用于存储用户数据基地址的第二存储空间,然后可使用NVM200中存储的关键数据基地址和用户数据基地址分别对第一存储空间和第二存储空间进行赋值,从而使得处理器300可通过将DRAM 100中的存储了关于NVM 200的关键数据基地址和用户数据基地址的第一存储空间和第二存储空间用作访问NVM 200中存储的内存数据库的镜像的接口以提供服务,但仅限于读服务。
然而,由于NVM 200的性能(例如速度等)不如DRAM 100,因此为了保证内存数据库的最佳性能,处理器300可将NVM 200中保存的内存数据库的镜像迁移到DRAM 100中。
具体地讲,处理器300可在DRAM 100中重新分配用于存储关键数据的第三存储空间和用于存储用户数据的第四存储空间,并确定与第三存储空间相应的基地址和与第四存储空间相应的基地址,然后处理器300可根据NVM200中存储的关键数据基地址和用户数据基地址,按顺序将NVM 200中的关键数据和用户数据分别复制到DRAM 100的第三存储空间和第四存储空间,并且使用与第三存储空间相应的基地址和与第四存储空间相应的基地址分别对第一存储空间和第二存储空间进行赋值,至此,处理器300就将NVM 200中的内存数据库的镜像重新恢复到DRAM 100中,使得在系统崩溃或正常关机前在DRAM 100中存储的内存数据库重新恢复到DRAM 100中并以最优性能提供服务,例如读写服务。
图3是示出根据本申请示例性实施例的使用NVM恢复内存数据库的方法的流程图。
如图3中所示,在步骤S100,在对DRAM中的内存数据库执行基本操作的同时,将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列。
具体地讲,将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列的步骤可包括:将所述内存数据库中被执行了所述基本操作的数据封装成基本组成单元,并将封装后的基本组成单元插入到DRAM中的存储器操作队列。其中,如图1中所示,基本组成单元可包括用于标识基本组成单元的开始的起始标识符op-start、用于标识基本组成单元的结束的结束标识符op-end以及至少一个序列,其中,每个序列具有由地址偏移量offset、数据长度len以及数据data所定义的特定格式(offset,len,data)。
在步骤S200,将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区,在下文中,为了便于描述,从NVM中读取的被写入到回滚区的数据可被称为原始数据。下面将参照图4对步骤S200进行详细的描述。
如图4中所示,首先在步骤S210,检查存储器操作队列是否为空,如果存储器操作队列为空,则返回步骤S210继续进行检查操作,如果存储器操作队列不为空,则在步骤S220按照预定顺序(例如,按照存储器操作队列的先进先出的顺序)搜索存储器操作队列中的相继出现的一对起始标识符op-start和终止标识符op-end,进而获得完整的一个基本组成单元。
在步骤S230,依次读取NVM中的与所述一对起始标识符op-start和终止标识符op-end之间的每一个序列(offset,len,data)中的地址偏移量offset对应的位置处的原始数据original-data。具体地讲,首先确定所述一个基本组成单元中包括的序列(offset,len,data)中的数据data是关键数据还是用户数据,然后根据确定的结果选择存储在NVM中的关键数据基地址和用户数据基地址之一(例如,如果数据data是关键数据,则选择存储在NVM中的关键数据基地址,反之则选择存储在NVM中的用户数据基地址),然后从NVM中读取位于将选择的基地址和序列(offset,len,data)中的地址偏移量offset相加而确定的地址处的长度为len的原始数据original-data。
在步骤S240,依次将从NVM中读取的原始数据original-data写入到NVM的回滚区中的由回滚区的尾部指针tail所指向的位置处并固化。具体地讲,首先按照特定格式将读取的长度为len的原始数据original-data组成新序列(offset,len,original-data),其中,所述特定格式与存储器操作队列中的基本组成单元中包括的序列的存储格式(offset,len,data)相同,新序列(offset,len,original-data)中的offset是原始数据original-data在NVM中所在的存储空间相对于该存储空间的基地址的地址偏移量,例如,如果原始数据original-data是关键数据,则该offset是NVM中用于存储关键数据的存储空间相对于关键数据基地址的地址偏移量。此后,可将组成的新序列写入到NVM的回滚区中的由尾部指针tail所指向的位置处并将该序列固化在该位置处。例如,可使用clflush、clflushopt、clwb等命令之一来确保将该序列固化到NVM中,进而即使在掉电后,该序列仍然存在于NVM中。
在步骤S250,将回滚区的尾部指针tail指向回滚区的所有数据的末尾的地址并对尾部指针tail进行固化。具体地讲,在针对存储器操作队列中的一个基本组成单元中的所有序列完成了NVM中的相应数据的读取和固化之后,需要将回滚区的尾部指针tail移动到回滚区的所有数据的末尾,并利用特定命令(例如clflush、clflushopt、clwb等命令之一)将尾部指针tail固化到NVM的用于存储尾部指针tail的存储空间中。
至此,所述方法将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区。
返回参照图3,在步骤S300,将在存储器操作队列中的基本组成单元中包括的每一个序列(offset,len,data)写入到NVM中的与所述每一个序列(offset,len,data)中的地址偏移量offset对应的位置处并固化。其中,本申请可利用与步骤S100的进程独立的独立进程来完成步骤S200和步骤S300。
具体地讲,可将所述每一个序列(offset,len,data)中的数据data写入NVM中与所述每一个序列(offset,len,data)中的地址偏移量offset对应的位置处并固化,具体地讲,可首先确定所述每一个序列(offset,len,data)中的数据data是关键数据还是用户数据,然后根据确定的结果选择存储在NVM中的关键数据基地址和用户数据基地址之一(例如,如果数据data是关键数据,则选择存储在NVM中的关键数据基地址,反之则选择存储在NVM中的用户数据基地址),然后将所述每一个序列(offset,len,data)中的长度为len的数据data写入到NVM中的将选择的基地址和序列(offset,len,data)中的地址偏移量offset相加而确定的位置处,并将该数据data固化在NVM中的该位置处。
在一个基本组成单元中的所有序列中的数据data被写入NVM中并被固化之后,可将NVM的回滚区的头部指针head设置为尾部指针tail的值并对头部指针head进行固化,并且从存储器操作队列删除当前的基本单元。具体地讲,在一个基本组成单元中的所有序列中的数据data被写入NVM中并被固化之后,需要将回滚区的头部指针head移动到尾部指针tail的位置,并利用特定命令(例如clflush、clflushopt、clwb等命令之一)将头部指针head固化到NVM的用于存储头部指针head的存储空间中,从而保证回滚区的头部指针head和尾部指针tail在一个基本组成单元中的所有序列中的数据data被写入NVM中并被固化之后保持一致。
在以上的描述中,对于追求内存数据库中的任何数据都不能丢失的情况,可以等待直到从存储器操作队列中删除与内存数据库中被执行了基本操作的数据对应的所有基本组成单元之后才使基本操作成功返回。
然而,对于允许数据丢失但追求极致性能的情况,可不保持针对内存数据库的基本操作与步骤S200和S300中的任何一个同步。
但是,为了折中处理,如果所述基本操作针对内存数据库中的特定数据,则所述方法可以直到从存储器操作队列中删除了与所述特定数据对应的所有基本组成单元之后才使所述基本操作返回。具体地讲,可以根据基本操作是针对内存数据库中的关键数据还是针对用户数据而选择不同的处理方式,例如,如果所述基本操作针对内存数据库中的关键数据,则所述方法可以直到从存储器操作队列中删除了与所述关键数据对应的所有基本组成单元之后才使所述基本操作成功返回。
通过以上操作,所述方法在对内存数据库执行基本操作时有效地利用NVM来备份DRAM中的内存数据库,下面将详细描述如何在系统重启时利用NVM中存储的数据提供内存数据库的服务。
图5是示出根据本申请示例性实施例的使用NVM提供内存数据库的服务的方法的流程图。
如图5中所示,在步骤S510,在所述内存数据库重新启动后,检查NVM的回滚区的尾部指针tail和头部指针head是否一致。
如果尾部指针tail和头部指针head不一致,则在步骤S520从头部指针tail指向的位置开始逐一地获取在NVM 200的回滚区中存储的序列(offset,len,original-data)。然后在步骤S530,将获取的序列(offset,len,original-data)中的数据original-data写入到NVM中的与获取的序列(offset,len,original-data)中的地址偏移量offset相应的位置处并固化,具体地讲,首先需要确定获取的序列(offset,len,original-data)中的数据original-data是关键数据还是用户数据,然后根据确定的结果选择存储在NVM中的关键数据基地址和用户数据基地址之一,例如,如果数据original-data是关键数据,则选择存储在NVM中的关键数据基地址,反之则选择存储在NVM 200中的用户数据基地址。然后,在步骤S540,将获取的序列(offset,len,original-data)中的长度为len的数据original-data写入到NVM中的将选择的基地址和序列(offset,len,original-data)中的地址偏移量offset相加而确定的位置处,并将该数据固化在该位置处。此后,在步骤S550,可将尾部指针tail设置为头部指针head的值并固化以使得尾部指针tail和头部指针head一致。
如果尾部指针tail和头部指针head一致,则进行到步骤S560。
在步骤S560,在DRAM中重新分配用于存储关键数据基地址的第一存储空间以及用于存储用户数据基地址的第二存储空间。
在步骤S570,使用NVM中存储的关键数据基地址和用户数据基地址分别对第一存储空间和第二存储空间进行赋值,从而使得可通过将DRAM中的存储了关于NVM的关键数据基地址和用户数据基地址的第一存储空间和第二存储空间用作访问NVM中存储的内存数据库的镜像的接口以提供服务,但仅限于读服务。
然而,由于NVM的性能(例如速度等)不如DRAM,因此为了保证内存数据库的最佳性能,本申请可利用图6所描述的方法将NVM中保存的内存数据库的镜像迁移到DRAM中。
图6是示出根据本申请的另一示例性实施例的使用NVM提供内存数据库的服务的方法的流程图。
图6中示出的方法包括了图5中示出的方法的所有步骤,因此,此处不再对步骤S510至步骤S570进行重复描述。
在步骤S610,可在DRAM 100中重新分配用于存储关键数据的第三存储空间和用于存储用户数据的第四存储空间,并确定与第三存储空间相应的基地址和与第四存储空间相应的基地址。
然后在步骤S620,可根据NVM中存储的关键数据基地址和用户数据基地址,按顺序将NVM中的关键数据和用户数据分别复制到DRAM的第三存储空间和第四存储空间。
此后,在步骤S630,可使用与第三存储空间相应的基地址和与第四存储空间相应的基地址分别对第一存储空间和第二存储空间进行赋值。
至此,所述方法就将NVM中的内存数据库的镜像重新恢复到DRAM中,使得在系统崩溃或正常关机前在DRAM中存储的内存数据库重新恢复到DRAM中并以最优性能提供服务,例如读写服务。
由于本申请可以利用高性能NVM作为内存数据库的备份设备,采用新的镜像法在不依赖于snapshot和log的情况下实现内存数据库的实时数据持久化。同时,本申请也可以不进行内存数据库恢复时的重构过程,实现内存数据库的即时快速恢复。此外,本申请还能够针对追求极限性能的情况允许一定数据新鲜度的损失,并能够在完全不影响内存数据库性能的情况下实现持久化功能。
以上描述了本申请的各示例性实施例,应理解,上述描述仅是示例性的,并非穷尽性的,本申请不限于所披露的各示例性实施例。在不偏离本申请的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。因此,本申请的保护范围应该以权利要求的范围为准。

Claims (24)

1.一种使用非易失性存储器NVM实现内存数据库持久化的方法,所述方法包括:
在对动态随机存取存储器DRAM中的内存数据库执行基本操作的同时,将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列;
将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区;并且
将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化。
2.如权利要求1所述的方法,其中,将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列的步骤包括:
将所述内存数据库中被执行了所述基本操作的数据封装成基本组成单元,其中,基本组成单元包括用于标识基本组成单元的开始的起始标识符、用于标识基本组成单元的结束的结束标识符以及至少一个序列;并且
将封装后的基本组成单元插入到DRAM中的存储器操作队列。
3.如权利要求2所述的方法,其中,所述至少一个序列中的每一个序列具有由地址偏移量、数据长度以及数据所定义的特定格式。
4.如权利要求3所述的方法,其中,将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区的步骤包括:
按照预定顺序搜索所述存储器操作队列中的相继出现的一对起始标识符和终止标识符;
依次读取NVM中的与所述一对起始标识符和终止标识符之间的每一个序列中的地址偏移量对应的位置处的数据;
依次将读取的数据写入到所述回滚区中的由所述回滚区的尾部指针所指向的位置处并固化;并且
将所述尾部指针指向所述回滚区的所有数据的末尾的地址并对所述尾部指针进行固化。
5.如权利要求4所述的方法,其中,依次将读取的数据写入到所述回滚区中的由所述回滚区的尾部指针所指向的位置处并固化的步骤包括:
按照所述特定格式将读取的数据组成新序列;并且
将组成的新序列写入到所述回滚区中的由所述尾部指针所指向的位置处并固化。
6.如权利要求1所述的方法,将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化的步骤包括:
将所述每一个序列中的数据写入NVM中与所述每一个序列中的地址偏移量对应的位置处并固化;
在一个基本组成单元中的所有序列中的数据被写入NVM中并被固化之后,将所述回滚区的头部指针设置为所述回滚区的尾部指针的值并对所述头部指针进行固化,并从所述存储器操作队列删除所述一个基本单元。
7.如权利要求6所述的方法,其中,直到从存储器操作队列中删除与内存数据库中被执行了所述基本操作的数据对应的所有基本组成单元之后才使所述基本操作返回。
8.如权利要求6所述的方法,其中,如果所述基本操作针对内存数据库中的特定数据,则直到从存储器操作队列中删除了与所述特定数据对应的所有基本组成单元之后才使所述基本操作返回。
9.如权利要求1所述的方法,其中,所述基本操作不与将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区的步骤和将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化的步骤中的任何一个同步。
10.如权利要求1所述的方法,还包括:
在所述内存数据库重新启动后,检查所述回滚区的尾部指针和头部指针是否一致;
如果所述尾部指针和所述头部指针不一致,则从所述头部指针指向的位置开始逐一地获取所述回滚区中存储的序列,将获取的序列中的数据写入到NVM中的与获取的序列中的地址偏移量相应的位置处并固化,并将所述尾部指针设置为所述头部指针的值并固化以使得所述尾部指针和所述头部指针一致。
11.如权利要求10所述的方法,还包括:在所述尾部指针和所述头部指针一致之后:
在DRAM中重新分配用于存储关键数据基地址的第一存储空间以及用于存储用户数据基地址的第二存储空间;并且
使用NVM中存储的关键数据基地址和用户数据基地址分别对第一存储空间和第二存储空间进行赋值。
12.如权利要求11所述的方法,还包括:
在DRAM中重新分配用于存储关键数据的第三存储空间和用于存储用户数据的第四存储空间,并确定与第三存储空间相应的基地址和与第四存储空间相应的基地址;
根据NVM中存储的关键数据基地址和用户数据基地址,按顺序将NVM中的关键数据和用户数据分别复制到DRAM的第三存储空间和第四存储空间;并且
使用与第三存储空间相应的基地址和与第四存储空间相应的基地址分别对第一存储空间和第二存储空间进行赋值。
13.一种使用非易失性存储器NVM实现内存数据库持久化的设备,所述设备包括:
NVM;
动态随机存取存储器DRAM;以及
处理器,被配置为:
在对DRAM中的内存数据库执行基本操作的同时,将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列;
将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区;并且
将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化。
14.如权利要求13所述的设备,其中,处理器通过以下操作将所述内存数据库中被执行了所述基本操作的数据插入到DRAM中的存储器操作队列:
将所述内存数据库中被执行了所述基本操作的数据封装成基本组成单元,其中,基本组成单元包括用于标识基本组成单元的开始的起始标识符、用于标识基本组成单元的结束的结束标识符以及至少一个序列;并且
将封装后的基本组成单元插入到DRAM中的存储器操作队列。
15.如权利要求14所述的设备,其中,所述至少一个序列中的每一个序列具有由地址偏移量、数据长度以及数据所定义的特定格式。
16.如权利要求15所述的设备,其中,处理器通过以下操作将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区:
按照预定顺序搜索所述存储器操作队列中的相继出现的一对起始标识符和终止标识符;
依次读取NVM中的与所述一对起始标识符和终止标识符之间的每一个序列中的地址偏移量对应的位置处的数据;
依次将读取的数据写入到所述回滚区中的由所述回滚区的尾部指针所指向的位置处并固化;并且
将所述尾部指针指向所述回滚区的所有数据的末尾的地址并对所述尾部指针进行固化。
17.如权利要求16所述的设备,其中,处理器通过以下操作依次将读取的数据写入到所述回滚区中的由所述回滚区的尾部指针所指向的位置处并固化:
按照所述特定格式将读取的数据组成新序列;并且
将组成的新序列写入到所述回滚区中的由所述尾部指针所指向的位置处并固化。
18.如权利要求13所述的设备,处理器通过以下操作将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化:
将所述每一个序列中的数据写入NVM中与所述每一个序列中的地址偏移量对应的位置处并固化;并且
在一个基本组成单元中的所有序列中的数据被写入NVM中并被固化之后,将所述回滚区的头部指针设置为所述回滚区的尾部指针的值并对所述头部指针进行固化,并从所述存储器操作队列删除所述一个基本单元。
19.如权利要求18所述的设备,其中,直到从存储器操作队列中删除与内存数据库中被执行了所述基本操作的数据对应的所有基本组成单元之后,处理器才使所述基本操作返回。
20.如权利要求18所述的设备,其中,如果所述基本操作针对内存数据库中的特定数据,则直到从存储器操作队列中删除了与所述特定数据对应的所有基本组成单元之后,处理器才使所述基本操作返回。
21.如权利要求13所述的设备,其中,处理器不保持所述基本操作与将NVM中的与所述存储器操作队列中的每一个基本组成单元中的每一个序列中的地址偏移量对应的位置处的数据写入到NVM的回滚区的操作和将所述每一个序列写入到NVM中的与所述每一个序列中的地址偏移量对应的位置处并固化的操作中的任何一个同步。
22.如权利要求13所述的设备,其中,处理器还被配置为:
在所述内存数据库重新启动后,检查所述回滚区的尾部指针和头部指针是否一致;
如果所述尾部指针和所述头部指针不一致,则从所述头部指针指向的位置开始逐一地获取所述回滚区中存储的序列,将获取的序列中的数据写入到NVM中的与获取的序列中的地址偏移量相应的位置处并固化,并将所述尾部指针设置为所述头部指针的值并固化以使得所述尾部指针和所述头部指针一致。
23.如权利要求22所述的设备,其中,处理器还被配置为在所述尾部指针和所述头部指针一致之后进行以下操作:
在DRAM中重新分配用于存储关键数据基地址的第一存储空间以及用于存储用户数据基地址的第二存储空间;并且
使用NVM中存储的关键数据基地址和用户数据基地址分别对第一存储空间和第二存储空间进行赋值。
24.如权利要求23所述的设备,其中,处理器还被配置为:
在DRAM中重新分配用于存储关键数据的第三存储空间和用于存储用户数据的第四存储空间,并确定与第三存储空间相应的基地址和与第四存储空间相应的基地址;
根据NVM中存储的关键数据基地址和用户数据基地址,按顺序将NVM中的关键数据和用户数据分别复制到DRAM的第三存储空间和第四存储空间;并且
使用与第三存储空间相应的基地址和与第四存储空间相应的基地址分别对第一存储空间和第二存储空间进行赋值。
CN201911006523.6A 2019-10-22 2019-10-22 使用非易失性存储器nvm恢复内存数据库的方法和设备 Active CN110737547B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911006523.6A CN110737547B (zh) 2019-10-22 2019-10-22 使用非易失性存储器nvm恢复内存数据库的方法和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911006523.6A CN110737547B (zh) 2019-10-22 2019-10-22 使用非易失性存储器nvm恢复内存数据库的方法和设备

Publications (2)

Publication Number Publication Date
CN110737547A CN110737547A (zh) 2020-01-31
CN110737547B true CN110737547B (zh) 2022-08-19

Family

ID=69270771

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911006523.6A Active CN110737547B (zh) 2019-10-22 2019-10-22 使用非易失性存储器nvm恢复内存数据库的方法和设备

Country Status (1)

Country Link
CN (1) CN110737547B (zh)

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9880971B2 (en) * 2013-12-20 2018-01-30 Rambus Inc. Memory appliance for accessing memory
US10031933B2 (en) * 2014-03-02 2018-07-24 Netapp, Inc. Peer to peer ownership negotiation
US10394472B1 (en) * 2016-03-31 2019-08-27 EMC IP Holding Company LLC Classification and identification from raw data within a memory domain
CN105975587B (zh) * 2016-05-05 2019-05-10 诸葛晴凤 一种高性能的内存数据库索引组织与访问方法
CN105930280B (zh) * 2016-05-27 2019-07-05 诸葛晴凤 一种面向非易失性内存的高效的页面组织和管理方法
CN107728937B (zh) * 2017-09-15 2020-09-04 上海交通大学 一种使用非易失性内存介质的键值对持久存储方法及系统
CN109542356B (zh) * 2018-11-30 2021-12-31 中国人民解放军国防科技大学 面向容错的nvm持久化过程冗余信息的压缩方法和装置
CN109976947B (zh) * 2019-03-11 2020-11-27 北京大学 一种面向混合内存的掉电恢复的方法和系统

Also Published As

Publication number Publication date
CN110737547A (zh) 2020-01-31

Similar Documents

Publication Publication Date Title
US7035881B2 (en) Organization of read-write snapshot copies in a data storage system
JP4199993B2 (ja) スナップショット取得方法
US5043871A (en) Method and apparatus for database update/recovery
US6957362B2 (en) Instantaneous restoration of a production copy from a snapshot copy in a data storage system
US6792518B2 (en) Data storage system having mata bit maps for indicating whether data blocks are invalid in snapshot copies
US8397017B2 (en) Controller and data storage device
US5555389A (en) Storage controller for performing dump processing
CN108431783B (zh) 访问请求处理方法、装置及计算机系统
US7640276B2 (en) Backup system, program and backup method
JP4916892B2 (ja) トランザクション処理のためのログ情報管理システムおよび方法
CN109902034B (zh) 快照创建方法、装置、电子设备及机器可读存储介质
CN108073507B (zh) 一种内核崩溃现场数据的处理方法及装置
CN113568582B (zh) 数据管理方法、装置和存储设备
KR101738965B1 (ko) 가비지 컬렉션 저널링 장치 및 방법
EP3385846B1 (en) Method and device for processing access request, and computer system
US20060277221A1 (en) Transactional file system with client partitioning
US9335941B1 (en) Crash consistency
CN114089915A (zh) 基于flash存储器的文件追加写操作方法及装置
CN109189480B (zh) 文件系统启动方法及装置
CN110737547B (zh) 使用非易失性存储器nvm恢复内存数据库的方法和设备
US9535796B2 (en) Method, apparatus and computer for data operation
CN115640238A (zh) 针对持久化内存的可靠内存映射i/o实现方法及系统
CN113703671B (zh) 一种数据块擦除方法及相关装置
CN112052217B (zh) 快照实现方法及装置
JP2000163294A (ja) データベース管理方法及びその装置並びにプログラムを記録した機械読み取り可能な記録媒体

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant