CN113050886B - 面向嵌入式内存数据库的非易失性内存存储方法及系统 - Google Patents
面向嵌入式内存数据库的非易失性内存存储方法及系统 Download PDFInfo
- Publication number
- CN113050886B CN113050886B CN202110200813.5A CN202110200813A CN113050886B CN 113050886 B CN113050886 B CN 113050886B CN 202110200813 A CN202110200813 A CN 202110200813A CN 113050886 B CN113050886 B CN 113050886B
- Authority
- CN
- China
- Prior art keywords
- page
- space
- database
- nonvolatile memory
- memory
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0619—Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种面向嵌入式内存数据库的非易失性内存存储方法及系统,本发明能够对非易失性内存空间区域进行划分,并利用空间链表对空闲页进行管理,对空间进行分配,同时还可以直接用指令访问非易失性内存,进行字节性管理,能够实现在不降低系统性能的前提下,保证数据的一致性。
Description
技术领域
本发明属于数据存储技术领域,具体涉及一种面向嵌入式内存数据库的非易失性内存存储方法及系统。
背景技术
本部分的陈述仅仅是提供了与本发明相关的背景技术信息,不必然构成在先技术。
磁盘数据库是把磁盘作为数据库的存储介质,通过在磁盘上对数据库进行管理。磁盘数据库需要频繁引入I/O操作。同时磁盘设备本身就是要依靠机械运动访问数据。近年来,内存容量不断提高,充分利用内存技术提升数据库性能成为一个研究热点。内存数据库可以利用内存的高速读写特性提高访问效率,同时,根据内存数据库的新特性,根据内存的特性重新设计了数据库引擎。在对数据的缓存、快速索引算法、提高数据库并行能力方面改进。内存数据库通常在系统运行时将整个数据库加载到内存中,从而提高数据库运行时的性能。
目前,很多内存数据库的设计实现都是面向DRAM的,由于DRAM具有掉电丢失数据的性质,每次重启需要很长时间重新加载数据。目前的内存数据库只能将数据库暂存在内存中,而真实数据只能持久化地保存在磁盘或者SSD等外存中。因此,数据库在打开和关闭时,都要在内存和外存之间传输大量数据,其慢速I/O操作会极大地降低性能。此外,为了保证数据的持久性和一致性,现有的内存数据库在运行过程中,需要把修改的内存数据备份到磁盘中。以redis为列,其提供两种持久化数据库的机制。一是快照处理(snapshotting),在Redis的实现中成为RDB模式,此时Redis在指定时间间隔内生成数据库在内存中的数据集的快照,并写回外存中。然而,RDB模式不能保证最近一个时间间隔内更新操作的持久化和一致性。如果在时间间隔内系统掉电,则Redis就会丢失最近一个时间间隔内的全部数据库更新操作。为了提供更好的数据持久化和一致性保障,Redis提供另一种称为追加文件(Append-Only File,AOF)的机制。AOF机制可以把每一次数据库的更新操作都以日志的形式持久化地记录在外存中。然而,AOF会发起大量I/O操作,极大地降低系统性能。
发明内容
本发明为了解决上述问题,提出了一种面向嵌入式内存数据库的非易失性内存存储方法及系统,本发明能够对非易失性内存空间区域进行划分,并利用空间链表对空闲页进行管理,对空间进行分配,同时还可以直接用指令访问非易失性内存,进行字节性管理,能够实现在不降低系统性能的前提下,保证数据的一致性。
根据一些实施例,本发明采用如下技术方案:
一种面向嵌入式内存数据库的非易失性内存存储方法,包括以下步骤:
设置页面大小上限,按照设定上限对非易失性内存空间区域进行划分,利用空间链表对空闲页面进行管理;
判断分配非易失性内存空闲空间的请求中,请求的空间是否大于设定上限,如果是,从空间链表中直接分配相对应数量的连续的空闲块,并调整空闲链表中的基本信息;
如果不是,利用分配器配合页面掩码进行分配。
作为可选择的实施方式,还包括根据存储空间释放量或定时进行空间回收,将完全空的已用页面插入空闲链表中。
作为进一步的限定,进行空间回收的具体方法为在页面上配置位图标志位,标志位为第一状态时,表示该位置为空,判断对应页面的所有标志位是否全为第一状态,如果是,则将该页面插入空闲链表中。
作为可选择的实施方式,所述非易失性内存空间区域包括非易失性内存元数据存储区、元数据存储区和数据库存储区。
作为进一步的限定,在所述元数据存储区中,划出一部分区域为日志区域,进行一步操作时,该操作作为一个条目记录在日志里面,同时存储一个日志指针,所述指针指向日志中当前操作的条目,指针所指之前地日志条目指代的操作全部失效,每完成一步操作,往后挪一步指针;当日志区域全部用完时,指针从头开始。
作为可选择的实施方式,利用分配器配合页面掩码进行分配时,首先判断分配器里面的空闲空间是否能满足要求,如果不能满足要求,从空闲页面链表中获取一个设定上限大小的物理页给分配器,然后再分配。
作为可选择的实施方式,利用分配器配合页面掩码进行分配时,设置最细粒度,所述页面掩码的结构中,每个元素对应一个物理页,存放该页面的空间使用情况,每个元素是一个位图。
作为进一步的限定,每从一个页面分配最细粒度字节,页码掩码中对应的位置为第二状态;每从某个页面释放最细粒度字节,页面掩码中对应的位置为第一状态。
一种面向嵌入式内存数据库的非易失性内存存储系统,包括:
空间划分模块,被配置为设置页面大小上限,按照设定上限对非易失性内存空间区域进行划分,利用空间链表对空闲页面进行管理;
空间分配模块,被配置为判断分配非易失性内存空闲空间的请求中,请求的空间是否大于设定上限,如果是,从空间链表中直接分配相对应数量的连续的空闲块,并调整空闲链表中的基本信息;如果不是,利用分配器配合页面掩码进行分配。
作为可选择的实施方式,还包括空间回收模块,被配置为根据存储空间释放量或定时进行空间回收,将完全空的已用页面插入空闲链表中。
作为可选择的实施方式,还包括存储模块,被配置为存储有单元数据相关信息、页的相关信息、默认内存分配的缓冲区的相关信息、页缓冲区以及相关的文件信息。
当然,所述系统还可以包括处理器和计算机可读存储介质,处理器用于实现各指令;计算机可读存储介质用于存储多条指令,所述指令适于由处理器加载并执行所述的面向嵌入式内存数据库的非易失性内存存储方法中的步骤。
与现有技术相比,本发明的有益效果为:
本发明通过对非易失性内存空间区域进行划分,并利用空间链表对空闲页进行管理,对空间进行分配,同时还可以直接用指令访问非易失性内存,进行字节性管理,能够解决现有技术在断电后数据丢失问题。
本发明对数据的任何修改操作都直接持久化地保存在数据库中,不需要再同步回磁盘中,省去全部地慢速I/O操作。同时也不存在与备份数据不一致的问题。
本发明利用日志区域,备份数据集更新操作本身后在进行更新操作,有助于保证数据操作的有序性和正确性,以及数据的一致性。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1为本发明嵌入式内存系统架构示意图;
图2为本发明存储访问路径示意图;
图3为非易失性内存空间分配示意图;
图4为内存空间分配流程图;
图5为回收操作流程图;
图6为本发明的主要数据结构;
图7为本发明的总体流程示意图。
具体实施方式:
下面结合附图与实施例对本发明作进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
先介绍SQLite的体系结构,其具有模块化特点,它的整个体系结构可分为前端解析系统和后端引擎两个部分,也可细分为3个子系统和8个相互独立的模块,具体结构如图1所示。
前端解析系统包含三个模块,分别为分词器、解析器、代码生成器,主要负责的工作是对应用程序传递过来的字符串进行处理,对其中包含的SQL语句和命令进行分析、优化和转换,最终将其变为虚拟机能够执行的内部编码。而后引擎由虚拟机、B-Tree、页缓存和操作系统接口构成,其中虚拟机位于核心位置,为NVMSQLite的引擎,用来解释执行前端解析系统生成的内部编码。NVMSQLite的整个体系结构将一次数据库数据查询过程分割为几个不连续的阶段,与工厂流水线上流程类似,在体系的顶端对查询语句进行编译,中间阶段去解释执行,最终的底部则是处理数据在操作系统中的存储。
针对嵌入式内存数据库SQLite现有技术不足,解决现有技术在断电后数据丢失问题,本发明提供了一种基于开源SQLite内存数据的非易失内存存储方法,如图7所示。以下称添加非易失内存存储技术的嵌入式内存数据库为NVMSQLite。
首先,介绍NVMSQLite整体架构
NVMSQLite和SQLite整体架构基本一样,不同之处在于,NVMSQLite的数据库是运行在非易失性内存上,而且操作系统接口是面向非易失性内存的。
NVMSQLite存储访问路径如图2所示。NVMSQLite程序包括运行必要资源,不包括数据库数据,作为一个进程运行在用户空间中,NVMSQLite数据库的元数据和数据存储在NVM存储器当中。和原来SQLite相比,NVMSQLite精简了传统磁盘文件系统I/O栈,重新设计了访问NVM存储器空间的I/O流程,因而需要在操作系统中添加访问NVM存储器空间的系统调用,并设计了新的库文件对NVM系统进行封装。
如图3所示,NVMSQLite使用基于页的方式管理非易失性内存,即将非易失性内存按照每页4KB的大小进行划分,并用空闲链表将空闲页进行管理。非易失性内存空间分配如图1所示,NVMSQLite将非易失性内存空间分为三个部分,非易失性内存元数据,NVMSQLite元数据,NVMSQLite数据库存储区。
非易失性内存元数据包括非易失性内存大小,非易失性内存划分页的大小,非易失性内存划分页的数量,非易失性内存中页的分配状况。其中非易失性内中页的分配状况使用位图表示,页位图区使用比特的方式记录了页表中页空间使用情况,比特“0”表示页为空闲状态可以用来分配,比特“1”则表示页已被使用。页表存储了文件系统中所有的页信息。
NVMSQLite元数据包括:持久化数据库的映射表,数据库的大小,整个数据库数据结构的索引和数据库的日志。映射表用来组织持久化内存数据库中使用的物理内存空间。其结构与系统页表的形式相同。当对NVMSQLite对应进程的持久化内存数据库初始化时,非易失性内存上的持久化数据库通过将映射表插入对应进程的页表中而暴露给进程的虚拟地址空间。然后,用户可以通过其进程虚拟地址空间访问非易失性内存上的持久化数据库,获取进程的虚拟地址空间的大小等于非易失性内存分配给持久化内存数据库的大小。
下面介绍非易失性内存空间的分配回收策略:
本发明中,采用空闲链表的方式对非易事行内存的空闲空间进行维护,每个页面的大小设为4KB。在NVMSQLite小于4KB的部分使用NVMslab分配器进行分配。NVMslab类似于linux中的slab分配器,最细粒度设为一次分配32B,配合着页面掩码。一个页面4KB,对应的页面掩码为128位。每当要分配一段小于4kB的空间时,首先判断分配器里面的空闲空间是否能满足要求,如果不能满足要求,就从空闲页面链表中获取一个4KB的物理页给NVMslab,然后再分配。
当NVM持久化存放在NVM中后,对内存数据库的操作不再需要经过DRAM。对数据的任何修改操作都直接持久化地保存在数据库中,不需要再同步回磁盘中,省去全部地慢速I/O操作。同时也不存在与备份数据不一致的问题。
在NVMSQLite中提出一种基于日志方式,先来备份数据集更新操作本身,然后再做更新操作。在NVMSQLite元数据空间区中,划出一部分区域为日志区域。NVMSQLite嵌入式内存数据库每进行一步操作时,每一步操作作为一个条目记录在日志里面。存储一个日志指针,指针指向日志中当前操作的条目,指针所指之前地日志条目指代的操作全部失效,每完成一步操作,就往后挪一步指针。当日志区域全部用完时,指针从头开始。
作为一种典型实施例,在NVMSQLite空间管理上,为了便于管理,非易失性内存的空闲空间主要由空闲链表维护,每个页面的大小设为4KB。此外,对于嵌入式内存数据库NVMSQLite使用的大都是小于4KB的内存空间。为了提高非易失性内存的空间利用率,使用细粒度内存分配器和页面掩码辅助管理非易失性内存的物理空间。
NVMslab,用于分配小于4KB的非易失性内存空间,最细粒度设为一次分配32字节。每当要分配一段小于4KB的空间时,首先判断分配器里面的空闲空间是否满足要求。如果不能满足要求,就从空闲页面链表中获取一个4KB的物理页给NVMslab,然后在进行分配。
页面掩码的结构类似于数组,每个元素对应一个物理页,存放该页面的空间使用情况。每个元素是一个位图。由于默认要分配的空间以32字节为基本单位,所以一个4KB大小的空闲页对应在页码中的位图大小为128位。每从一个页面分配32字节,页码掩码中对应的位置为0;每从某个页面释放32字节,页面掩码中对应的位置为1。
每次请求分配非易失性内存空闲空间时,首先判断请求的大小。当请求的空间大于4KB时,以4KB单位向上取整,从空闲链表中直接分配连续的空闲块,并调整空闲链表中的基本信息。空闲链表的分配策略时首次适应的方式分配。如果要分配的空间小于4KB,就用细粒度内存分配器NVMslab。如图4所示。
当释放一段存储空间的时候,需要把对应的空间回收。首先将页面对应的位图标志位调整,把页面位图中对应的标志标为0。然后判断该页面对应的页面掩码元素中的所有标志位是否全为1,如果全为1就说明整个页已经空了,就把这个页插入到空闲链表中,如果不是全为1,说明这个页面还有空间没有被回收,所以停止操作。其流程如图5所示。
NVMSQLite结构代表的是“数据库连接”。每个数据库连接都是是NVMSQLite结构体的一个实例,在应用程序中可以连接多个数据库文件。结构成员aDb是Db结构对象,表示连接的数据库文件。在实际使用中,aDb表示为Db结构指针的数组,编号为0的是主数据库,为aDb[0];编号为1的是临时数据库,为aDB[1];编号2以及之后的是附加数据库。
Db结构代表的是数据库连接中的每个数据库文件实例。结构中的Btree对象和Schema对象,表示数据库连接为每一个连接中的数据库文件建立一个Btree对象和一个Schema对象。
Vdbe结构是虚拟机的实例,包含了虚拟机的全部状态。应用程序中的“NVMSQLite_stmt*”指针实质上指向的就是Vdbe结构体的实例。每个数据库连接中可能同时存在多个虚拟机的实例,这些虚拟机的实例以双向链表的形式组织在一起。每个Vdbe结构中都有指向虚拟机前驱和后继的指针pPrev和pNext。
Mem结构中保存了同一个字段值的多种数据类型,如NULL,INTERGER,REAL,TEXT,BLOB等。在NVMSQLite内部,VDBE使用Mem结构处理几乎所有的SQL值。
VdbeCursor结构是Btree游标在虚拟机层的表现形式。虚拟机打开的每一个游标都是此结构的一个实例。
Btree结构是私有的,即连接中的每一个数据库文件都有自己所独有的Btee对象。数据库连接看不到Btree结构的内部,只能透过过指针来操作此结构。
BtShared结构实例表示的是一个独立的数据库文件。在实际情况中,一个数据库文件可能被两个或者更多的数据库连接所使用;此时,每个连接都有自己私有的Btree对象,但是所有的Btree对象指向的都是同一个BtShared对象。
BtCursor结构是Btree游标的实例。每一个数据库文件都是通过自己私有的Btree游标来访问数据库内容的。一个数据库文件可以被多个数据库连接所共享,但是游标确实是私有的,不能共享。
CellInfo结构的实例存储着与单元数据相关的信息,如单元指针、键值、单元数据的大小、记录头的大小、溢出页链表的首指针等。
MemPage结构的实例存储着从原始文件页中解析得到的页的相关信息,如页的类型、页头的起始位置、页编号、本页的单元个数等。
Pager结构的实例代表的是一个打开的页缓冲区,存储着页缓冲区以及相关的一些文件信息等,如页缓冲区指针、数据库文件名、日志文件名等。如果定义了数据库加密宏“SQLITE_HAS_CODEC”,则Pager结构体中将包含有与加解密功能相关的结构成员(加解密函数指针xCodec、加解密密钥块pCodec等);因此,NVMSQLite加解密功能的实现是通过Pager层来加解密数据库中的每一页的。
PCache结构表示的是一个完整的页缓冲区,是用于内存分配的接口结构。用户可以根据实际需求选择使用默认的内存分配机制或替换内存分配系统。
PCache1结构表示的是默认的内存分配系统,存储着默认内存分配的缓冲区的相关信息,如默认缓冲区大小、缓冲区是否可净化等。
PgHdr结构的实例控制着缓冲区中的页,存储着页的相关信息,如页编号、页内容、页的用户数、拥有此页的缓冲区指针等。
PgHdr1结构实例表示的缓冲区的入口,即缓冲区中页的存取地址。
数据库元数据存储。
如图6所示,一个NVMSQLite数据库的存储最高层结构为DB结构体,其中包含了每个数据库存储文件。如果每次系统启动时都能够找到DB结构体,就可以进一步检索到整个数据库。所以在数据库元数据区存储DB结构体。
在启动NVMSQLite时,有三个主要的元数据结构用于定位数据库。第一个元数据结构式映射表。映射表映射了NVMSQLite的数据集占用的物理空间以及NVMSQLite的数据集数据结构的物理空间。当NVMSQLite启动的时候,映射表嵌入到NVMSQLite相对应的进程页表中。这样NVMSQLite的进程能够访问用户空间中的数据库。
第二个元数据结构是NVMSQLite的虚拟空间管理。我们保留一个虚拟地址空间,其大小等于非易失性内存大小。虚拟空间管理的方式与linux中使用的伙伴系统相同。每次数据库提交更新请求时,NVMSQLite会为请求分配一段空闲虚拟空间。空闲虚拟空间大小等于或对其于非易失性内存物理存储器的物理空间。当数据库被删除时,想用的可用空间将被回收。
最后,需要的元数据结构用来指示整个数据库组织结构的地址,这样可以使得数据库的整个组织结构暴露于虚拟空间地址。
NVMSQLite启动后,首先就是要初始化全局服务器配置,然后加载配置文件来初始化服务器。当服务器初始化完成后加载数据库。经过上面的更改后,NVMSQLite启动与SQLite不同点在于,对服务器初始化时,直接通过数据库的元数据来初始化DB结构体。后面也不需要加载RDB以及AOF文件加载数据库。数据库的启动效率有大大的提升。
综上,对非易失性内存空间区域进行划分,并利用空间链表对空闲页进行管理。当需要分配对于少于一页的空间时,用NVMslab分配器进行分配。在内核空间中对增加面向非易失性内存的系统调用,即cpu可以直接用指令访问非易失性内存,进行字节性管理。采用先记录操作,后更新数据的方式,保证数据的一致性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。
Claims (10)
1.一种面向嵌入式内存数据库的非易失性内存存储方法,其特征是:包括以下步骤:
设置页面大小上限,按照设定上限对非易失性内存空间区域进行划分,利用空间链表对空闲页面进行管理;
判断分配非易失性内存空闲空间的请求中,请求的空间是否大于设定上限,如果是,从空间链表中直接分配相对应数量的连续的空闲块,并调整空闲链表中的基本信息;
如果不是,利用分配器配合页面掩码进行分配;
NVMSQLite的体系结构分为前端解析系统和后端引擎两个部分;
前端解析系统包含三个模块,分别为分词器、解析器、代码生成器,对应用程序传递过来的字符串进行处理,对其中包含的SQL语句和命令进行分析、优化和转换,最终将其变为虚拟机能够执行的内部编码;
后引擎由虚拟机、B-Tree、页缓存和操作系统接口构成,其中虚拟机位于核心位置,为NVMSQLite的引擎,用来解释执行前端解析系统生成的内部编码;
NVMSQLite的数据库运行在非易失性内存上,操作系统接口面向非易失性内存。
2.如权利要求1所述的一种面向嵌入式内存数据库的非易失性内存存储方法,其特征是:还包括根据存储空间释放量或定时进行空间回收,将完全空的已用页面插入空闲链表中。
3.如权利要求2所述的一种面向嵌入式内存数据库的非易失性内存存储方法,其特征是:进行空间回收的具体方法为在页面上配置位图标志位,标志位为第一状态时,表示该位置为空,判断对应页面的所有标志位是否全为第一状态,如果是,则将该页面插入空闲链表中。
4.如权利要求1所述的一种面向嵌入式内存数据库的非易失性内存存储方法,其特征是:所述非易失性内存空间区域包括非易失性内存元数据存储区、元数据存储区和数据库存储区。
5.如权利要求4所述的一种面向嵌入式内存数据库的非易失性内存存储方法,其特征是:在所述元数据存储区中,划出一部分区域为日志区域,进行一步操作时,该操作作为一个条目记录在日志里面,同时存储一个日志指针,所述指针指向日志中当前操作的条目,指针所指之前地日志条目指代的操作全部失效,每完成一步操作,往后挪一步指针;当日志区域全部用完时,指针从头开始。
6.如权利要求1所述的一种面向嵌入式内存数据库的非易失性内存存储方法,其特征是:利用分配器配合页面掩码进行分配时,首先判断分配器里面的空闲空间是否能满足要求,如果不能满足要求,从空闲页面链表中获取一个设定上限大小的物理页给分配器,然后再分配。
7.如权利要求1所述的一种面向嵌入式内存数据库的非易失性内存存储方法,其特征是:利用分配器配合页面掩码进行分配时,设置最细粒度,所述页面掩码的结构中,每个元素对应一个物理页,存放该页面的空间使用情况,每个元素是一个位图。
8.如权利要求7所述的一种面向嵌入式内存数据库的非易失性内存存储方法,其特征是:每从一个页面分配最细粒度字节,页码掩码中对应的位置为第二状态;每从某个页面释放最细粒度字节,页面掩码中对应的位置为第一状态。
9.一种面向嵌入式内存数据库的非易失性内存存储系统,其特征是:包括:
空间划分模块,被配置为设置页面大小上限,按照设定上限对非易失性内存空间区域进行划分,利用空间链表对空闲页面进行管理;
空间分配模块,被配置为判断分配非易失性内存空闲空间的请求中,请求的空间是否大于设定上限,如果是,从空间链表中直接分配相对应数量的连续的空闲块,并调整空闲链表中的基本信息;如果不是,利用分配器配合页面掩码进行分配;
NVMSQLite的体系结构分为前端解析系统和后端引擎两个部分;
前端解析系统包含三个模块,分别为分词器、解析器、代码生成器,对应用程序传递过来的字符串进行处理,对其中包含的SQL语句和命令进行分析、优化和转换,最终将其变为虚拟机能够执行的内部编码;
后引擎由虚拟机、B-Tree、页缓存和操作系统接口构成,其中虚拟机位于核心位置,为NVMSQLite的引擎,用来解释执行前端解析系统生成的内部编码;
NVMSQLite的数据库运行在非易失性内存上,操作系统接口面向非易失性内存。
10.如权利要求9所述的一种面向嵌入式内存数据库的非易失性内存存储系统,其特征是:还包括空间回收模块,被配置为根据存储空间释放量或定时进行空间回收,将完全空的已用页面插入空闲链表中;
或,还包括存储模块,被配置为存储有单元数据相关信息、页的相关信息、默认内存分配的缓冲区的相关信息、页缓冲区以及相关的文件信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110200813.5A CN113050886B (zh) | 2021-02-23 | 2021-02-23 | 面向嵌入式内存数据库的非易失性内存存储方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110200813.5A CN113050886B (zh) | 2021-02-23 | 2021-02-23 | 面向嵌入式内存数据库的非易失性内存存储方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113050886A CN113050886A (zh) | 2021-06-29 |
CN113050886B true CN113050886B (zh) | 2022-09-20 |
Family
ID=76509204
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110200813.5A Active CN113050886B (zh) | 2021-02-23 | 2021-02-23 | 面向嵌入式内存数据库的非易失性内存存储方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113050886B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023088546A1 (en) * | 2021-11-17 | 2023-05-25 | Huawei Technologies Co., Ltd. | Controller and method to perform persistent memory management in a memory system |
CN117687770B (zh) * | 2023-06-21 | 2024-09-13 | 荣耀终端有限公司 | 内存申请方法及相关装置 |
CN116627855B (zh) * | 2023-07-24 | 2023-10-31 | 荣耀终端有限公司 | 内存处理方法及相关装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110750356A (zh) * | 2019-09-09 | 2020-02-04 | 华南师范大学 | 适用于非易失性内存的多核交互方法、系统及存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20150082010A (ko) * | 2014-01-07 | 2015-07-15 | 삼성전자주식회사 | 불휘발성 메모리 파일 시스템에서의 마이크로 저널링 방법 |
US10268592B2 (en) * | 2014-01-31 | 2019-04-23 | Avago Technologies International Sales Pte. Limited | System, method and computer-readable medium for dynamically mapping a non-volatile memory store |
US10534719B2 (en) * | 2017-07-14 | 2020-01-14 | Arm Limited | Memory system for a data processing network |
CN108121813B (zh) * | 2017-12-27 | 2020-09-18 | 东软集团股份有限公司 | 数据管理方法、装置、系统、存储介质及电子设备 |
-
2021
- 2021-02-23 CN CN202110200813.5A patent/CN113050886B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110750356A (zh) * | 2019-09-09 | 2020-02-04 | 华南师范大学 | 适用于非易失性内存的多核交互方法、系统及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113050886A (zh) | 2021-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113050886B (zh) | 面向嵌入式内存数据库的非易失性内存存储方法及系统 | |
Matsunobu et al. | Myrocks: Lsm-tree database storage engine serving facebook's social graph | |
US9734607B2 (en) | Graph processing using a mutable multilevel graph representation | |
US9436597B1 (en) | Using non-volatile memory resources to enable a virtual buffer pool for a database application | |
US20140281307A1 (en) | Handling snapshot information for a storage device | |
US9778860B2 (en) | Re-TRIM of free space within VHDX | |
US10019331B2 (en) | Memory allocation and recovery strategies for byte-addressable non-volatile RAM (NVRAM) | |
KR20170038853A (ko) | 호스트-관리 비휘발성 메모리 | |
Badam | How persistent memory will change software systems | |
KR20210123236A (ko) | 키-값 장치들을 위한 키-값 저장소 아키텍처 | |
CN110688345A (zh) | 一种内存文件系统的多粒度结构化空间管理机制 | |
KR20210012085A (ko) | 저널 리플레이를 개선하기 위한 스토리지 장치, 그것의 동작 방법, 및 스토리지 장치를 포함하는 전자 장치 | |
Iwabuchi et al. | Metall: A persistent memory allocator enabling graph processing | |
JP2024525170A (ja) | データ圧縮方法及び装置 | |
Chen et al. | A unified framework for designing high performance in-memory and hybrid memory file systems | |
WO2024108939A1 (zh) | 一种多级映射框架、数据操作请求处理方法及系统 | |
Chen et al. | UMFS: An efficient user-space file system for non-volatile memory | |
US11921714B2 (en) | Managing insert operations of a metadata structure for a storage system | |
US11971825B2 (en) | Managing granularity of a metadata structure for a storage system | |
Yoon et al. | Check-in: In-storage checkpointing for key-value store system leveraging flash-based SSDs | |
Alvarez et al. | Main Memory Management on Relational Database Systems | |
Lee et al. | TLSM: Tiered log-structured merge-tree utilizing non-volatile memory | |
Chen et al. | UDORN: A design framework of persistent in-memory key-value database for NVM | |
Chen et al. | A quantitative evaluation of persistent memory hash indexes | |
Zhou et al. | A file system bypassing volatile main memory: Towards a single-level persistent store |
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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230106 Address after: 250000 room 1823, building A2-5, Hanyu Golden Valley, No. 7000, jingshidong Road, high tech Zone, Jinan, Shandong Province Patentee after: Shandong Data Trading Co.,Ltd. Address before: 250014 No. 88, Wenhua East Road, Lixia District, Shandong, Ji'nan Patentee before: SHANDONG NORMAL University |