CN111831423A - 一种在非易失性内存上实现Redis内存数据库的方法和系统 - Google Patents
一种在非易失性内存上实现Redis内存数据库的方法和系统 Download PDFInfo
- Publication number
- CN111831423A CN111831423A CN201910301040.2A CN201910301040A CN111831423A CN 111831423 A CN111831423 A CN 111831423A CN 201910301040 A CN201910301040 A CN 201910301040A CN 111831423 A CN111831423 A CN 111831423A
- Authority
- CN
- China
- Prior art keywords
- data
- redis
- storage space
- nonvolatile memory
- instance
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 50
- 238000013507 mapping Methods 0.000 claims abstract description 17
- 230000001939 inductive effect Effects 0.000 claims description 3
- 230000005055 memory storage Effects 0.000 claims description 3
- 238000006243 chemical reaction Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 4
- 238000004891 communication Methods 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 238000005530 etching Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Images
Classifications
-
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2457—Query processing with adaptation to user needs
- G06F16/24578—Query processing with adaptation to user needs using ranking
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提出一种在非易失性内存上实现Redis内存数据库的方法和系统,所述方法包括:为每个Redis实例分配唯一的索引;根据所述索引,基于所述Redis实例的规格在非易失性内存为所述Redis实例分配存储空间,并将所述Redis实例的键值和数据映射为LSM树的存储结构存入分配的存储空间;向所述Redis实例反馈分配的索引和存储空间。实现Redis数据直接存储非易失性内存,并保持近似于内存的访问速度。
Description
技术领域
本发明涉及内存服务器技术领域,具体涉及一种在非易失性内存上实现Redis内存数据库的方法和系统。
背景技术
现有的Redis内存数据库主要通过追加写日志来进行数据持久化,当进程重启后通过日志回放进行数据恢复。
同时,由于日志是以追加写的方式写入文件,为避免文件的无限制增长,需要在日志文件增长到一定阀值条件后通过fork(复刻)方式创建一个新的子进程,子进程具有父进程的全量数据,在子进程中将全量数据保存到硬盘,父进程将增量数据继续写入到日志文件。父进程调用fork时,内存数据库的访问延迟会大大增加,并且由于Copy-On-Write(写时复制)的特性,父进程如果频繁进行写操作,子进程还保持着原先的全量数据,这时候内存的使用量会成倍的增加。另外,进程重启后需要通过加载全量数据和日志文件的回放来恢复数据,如果全量数据或日志文件很大,这个恢复的时间会非常的长。
发明内容
本发明提供一种在非易失性内存上实现Redis内存数据库的方法和系统,实现Redis数据直接存储非易失性内存,并保持近似于内存的访问速度。
为了实现上述发明目的,本发明采取的技术方案如下:
第一方面,本发明提供一种在非易失性内存上实现Redis内存数据库的方法,包括:
为每个Redis实例分配唯一的索引;
根据所述索引,基于所述Redis实例的规格在非易失性内存为所述Redis实例分配存储空间,并将所述Redis实例的键值和数据映射为LSM树的存储结构存入分配的存储空间;
向所述Redis实例反馈分配的索引和存储空间。
优选地,所述方法还包括:
所述Redis实例基于获取的存储空间,将相应的非易失性内存存储空间映射到本进程的虚拟地址空间。
优选地,所述方法还包括:
接收所述Redis实例发送的释放空间操作请求;
对所述释放空间操作请求进行解析,并按照解析出的索引删除所述释放空间操作请求中请求释放的非易失性内存对应的存储空间;
向所述Redis实例反馈释放结果。
优选地,将所述Redis实例的键值和数据映射为LSM树的存储结构存入分配的存储空间包括:
解析Redis实例发送的数据信息,并将所述数据信息归纳到解析出的索引在非易失性内存对应的存储空间;
将Redis实例每一条解析的键值和数据映射为LSM树的形式以顺序写的方式存入非易失性内存的存储地址。
优选地,将Redis实例每一条解析的键值和数据映射为LSM树的形式以顺序写的方式存入非易失性内存的存储地址包括:
解析Redis实例发送的数据信息对应的键值和数据,并保存在所述键值所在层级对应的LSM树的存储地址中;
将所述LSM树的上一层中的非活跃数据合并为有序数据后写入到LSM树的下一层存储地址中。
优选地,所述方法还包括:
基于存储在非易失性内存上的每个Redis实例的数据冷热特性;将判定为冷数据的一个或者多个Redis实例的数据信息从非易失性内存迁移至硬盘上;
或者,基于存储在非易失性内存上的Redis实例的每组数据冷热特性;将判定为冷数据的Redis实例的一组或者多组数据从非易失性内存迁移至硬盘上。
优选地,所述方法还包括:
接收Redis实例发送的读取空间操作请求;
对所述读取空间操作请求进行解析,并按照解析出的索引查找非易失性内存对应的存储空间;
当在非易失性内存查找到对应的存储空间时,基于非易失性内存对应的存储空间返回所述Redis实例的数据信息;
当在非易失性内存未查找到对应的存储空间时,按照解析出的索引查找硬盘上对应的存储空间;基于硬盘对应的存储空间返回所述Redis实例的数据信息。
优选地,所述方法还包括:
当存储在硬盘上的一个或者多个Redis实例的数据信息判定为热数据时,将所述Redis实例的数据信息从硬盘迁移至非易失性内存上;
或者,当存储在硬盘上的Redis实例中的一组或者多组数据判定为热数据时,将所述Redis实例的一组或者多组数据从硬盘迁移至非易失性内存上。
第二方面,本发明提供一种在非易失性内存上实现Redis内存数据库的系统,包括:
9、一种在非易失性内存上实现Redis内存数据库的系统,其特征在于,包括存储空间管理器和非易失性内存,
所述存储空间管理器,设置为为每个Redis实例分配唯一的索引;并根据所述索引,基于所述Redis实例的规格在非易失性内存为所述Redis实例分配存储空间,并将所述Redis实例的键值和数据映射为LSM树的存储结构存入分配的存储空间;
所述存储空间管理器,还设置为向所述Redis实例反馈分配的索引和存储空间。
10、根据权利要求9所述的系统,其特征在于,还包括:硬盘,
所述存储空间管理器基于存储在非易失性内存上的每个Redis实例的数据冷热特性;将判定为冷数据的一个或者多个Redis实例的数据信息从非易失性内存迁移至硬盘上;
或者,所述存储空间管理器基于存储在非易失性内存上的Redis实例的每组数据冷热特性;将判定为冷数据的Redis实例的一组或者多组数据从非易失性内存迁移至硬盘上。
11、根据权利要求10所述的系统,其特征在于,
所述存储空间管理器接收Redis实例发送的读取空间操作请求;对所述读取空间操作请求进行解析,并按照解析出的索引查找非易失性内存对应的存储空间;
当在非易失性内存查找到对应的存储空间时,所述存储空间管理器基于非易失性内存对应的存储空间返回所述Redis实例的数据信息;
当在非易失性内存未查找到对应的存储空间时,所述存储空间管理器按照解析出的索引查找硬盘上对应的存储空间;基于硬盘对应的存储空间返回所述Redis实例的数据信息。
12、根据权利要求10所述的系统,其特征在于,
当存储在硬盘上的一个或者多个Redis实例的数据信息判定为热数据时,所述存储空间管理器将所述Redis实例的数据信息从硬盘迁移至非易失性内存上;
当存储在硬盘上的Redis实例中的一组或者多组数据判定为热数据时,所述存储空间管理器将所述Redis实例的一组或者多组数据从硬盘迁移至非易失性内存上。。
本发明与现有技术相比,具有如下有益效果:
1.数据直接存储非易失性内存,并保持近似于内存的访问速度;
2.将Redis数据结构转换成LSM树KV操作;
3.利用LSM树的层级实现数据的冷热分离;
4.去除掉fork子进程,导出全量数据的操作。
附图说明
图1为本发明实施例的在非易失性内存上实现Redis内存数据库的方法的流程图;
图2为本发明实施例的在非易失性内存上实现Redis内存数据库的系统的的结构示意图;
图3为本发明实施例的LSM树写入流程图;
图4为本发明实施例的LSM树读取流程图;
图5为本发明实施例的Redis set结构转换的示意图;
图6为本发明实施例的Redis hash结构转换的示意图;
图7为本发明实施例的链表转换的示意图。
具体实施方式
为使本发明的发明目的、技术方案和有益效果更加清楚明了,下面结合附图对本发明的实施例进行说明,需要说明的是,在不冲突的情况下,本申请中的实施例和实施例中的特征可以相互任意组合。
如图1所示,本发明实施例提供一种在非易失性内存上实现Redis内存数据库的方法,其特征在于,包括:
S101、为每个Redis实例分配唯一的索引;
S102、根据所述索引,基于所述Redis实例的规格在非易失性内存为所述Redis实例分配存储空间,并将所述Redis实例的键值和数据映射为LSM树的存储结构存入分配的存储空间;
S103、向所述Redis实例反馈分配的索引和存储空间。
现有技术中,写日志有以下三种方式:
(1)每笔sync:数据库在内存每写入一笔数据后,同时在日志文件中记录该笔操作,并调用系统的sync接口,保证日志数据落盘;这种方式虽然保证了数据的持久化,但会大大增加访问延迟,内存数据库的写入速度降低为硬盘的写入速度。
(2)每秒sync:数据库在内存每写入一笔数据后,调用操作系统写接口记录该笔日志,日志数据会先保存在操作系统的缓存里,每隔1秒调用sync接口将缓存中的数据写入硬盘;这种方式下,如果机器异常重启或断电,操作系统缓存里没有落盘的数据会丢失;同时,在发生IO阻塞时,操作系统的写接口延迟也会大大增加。
(3)异步线程写日志:数据库在内存每写入一笔数据后,将该笔操作的日志写入队列,后台线程从队列中读取日志数据,批量写入硬盘并调用sync接口保证数据的落盘;这种方式下,如果进程异常退出、操作系统异常重启或断电,没有落盘的日志数据都会丢失;同时缓存日志数据到队列,需要占用额外的内存空间;由于内存与硬盘的速度差异,频繁的内存写入操作会造成缓存日志数据的队列被写满,这种情况下不可避免的造成内存数据库的写入延迟增大。
本发明实施例,将Redis实例的键值和数据映射为LSM树的存储结构,实现将Redis实例以LSM树作为基本的数据结构保存在非易失性内存上。利用非易失性内存的特性,在维持内存访问速度的前提下,将数据以同步方式存储在非易失的内存上,提高内存数据库的可靠性。
本发明实施例,所述方法还包括:
所述Redis实例基于获取的存储空间,将相应的非易失性内存存储空间映射到本进程的虚拟地址空间。
本发明实施例,所述方法还包括:
接收所述Redis实例发送的释放空间操作请求;
对所述释放空间操作请求进行解析,并按照解析出的索引删除所述释放空间操作请求中请求释放的非易失性内存对应的存储空间;
向所述Redis实例反馈释放结果。
本发明实施例中,步骤S102中将所述Redis实例的键值和数据映射为LSM树的存储结构存入分配的存储空间包括包括:
解析Redis实例发送的数据信息,并将所述数据信息归纳到解析出的索引在非易失性内存对应的存储空间;
将Redis实例每一条解析的键值和数据映射为LSM树的形式以顺序写的方式存入非易失性内存的存储地址。
具体地,将Redis实例每一条解析的键值和数据映射为LSM树的形式以顺序写的方式存入非易失性内存的存储地址包括:
解析Redis实例发送的数据信息对应的键值和数据,并保存在所述键值所在层级对应的LSM树的存储地址中;
将所述LSM树的上一层中的非活跃数据合并为有序数据后写入到LSM树的下一层存储地址中。
本发明实施例,所述方法还包括:
基于存储在非易失性内存上的每个Redis实例的数据冷热特性;将判定为冷数据的一个或者多个Redis实例的数据信息从非易失性内存迁移至硬盘上;
或者,基于存储在非易失性内存上的Redis实例的每组数据冷热特性;将判定为冷数据的Redis实例的一组或者多组数据从非易失性内存迁移至硬盘上。
本发明实施例可基于数据的冷热特性将冷数据保存在速度较慢但容量更大的SSD等硬盘上。并且本发明实施例支持同时运行多个redis实例数据信息。
本发明实施例,所述方法还包括:
接收Redis实例发送的读取空间操作请求;
对所述读取空间操作请求进行解析,并按照解析出的索引查找非易失性内存对应的存储空间;
当在非易失性内存查找到对应的存储空间时,基于非易失性内存对应的存储空间返回所述Redis实例的数据信息;
当在非易失性内存未查找到对应的存储空间时,按照解析出的索引查找硬盘上对应的存储空间;基于硬盘对应的存储空间返回所述Redis实例的数据信息。
本发明实施例,所述方法还包括:
当存储在硬盘上的一个或者多个Redis实例的数据信息判定为热数据时,将所述Redis实例的数据信息从硬盘迁移至非易失性内存上;
或者,当存储在硬盘上的Redis实例中的一组或者多组数据判定为热数据时,将所述Redis实例的一组或者多组数据从硬盘迁移至非易失性内存上。
如图2所示,本发明实施例一种在非易失性内存上实现Redis内存数据库的系统,包括存储空间管理器和非易失性内存,
所述存储空间管理器,设置为为每个Redis实例分配唯一的索引;并根据所述索引,基于所述Redis实例的规格在非易失性内存为所述Redis实例分配存储空间,并将所述Redis实例的键值和数据映射为LSM树的存储结构存入分配的存储空间;
所述存储空间管理器,还设置为向所述Redis实例反馈分配的索引和存储空间。
本发明实施例中,所述的系统还包括:硬盘,
所述存储空间管理器基于存储在非易失性内存上的每个Redis实例的数据冷热特性;将判定为冷数据的一个或者多个Redis实例的数据信息从非易失性内存迁移至硬盘上;
或者,所述存储空间管理器基于存储在非易失性内存上的Redis实例的每组数据冷热特性;将判定为冷数据的Redis实例的一组或者多组数据从非易失性内存迁移至硬盘上。
本发明实施例中,所述存储空间管理器接收Redis实例发送的读取空间操作请求;对所述读取空间操作请求进行解析,并按照解析出的索引查找非易失性内存对应的存储空间;
当在非易失性内存查找到对应的存储空间时,所述存储空间管理器基于非易失性内存对应的存储空间返回所述Redis实例的数据信息;
当在非易失性内存未查找到对应的存储空间时,所述存储空间管理器按照解析出的索引查找硬盘上对应的存储空间;基于硬盘对应的存储空间返回所述Redis实例的数据信息。
本发明实施例中,当存储在硬盘上的一个或者多个Redis实例的数据信息判定为热数据时,所述存储空间管理器将所述Redis实例的数据信息从硬盘迁移至非易失性内存上;
当存储在硬盘上的Redis实例中的一组或者多组数据判定为热数据时,所述存储空间管理器将所述Redis实例的一组或者多组数据从硬盘迁移至非易失性内存上。
实施例一
如图2所示,本发明实施例系统结构,Redis是KV数据库的一种,本发明兼容Redis的协议但改变其存储方式。基于非易失性内存同样具有顺序写性能要好于随机写性能的特性,以LSM树作为基本的数据结构。LSM树上不同层级的SST数据保存在非易失性内存上,并可基于数据的冷热特性将冷数据保存在速度较慢但容量更大的SSD等硬盘上。LSM树对外提供GET和SET KV接口,分别用于数据的读取和写入。系统支持同时运行多个redis实例数据库,因此需要对非易失内存的空间进行划分和管理。
本系统的结构如图2所示,其组成主要有:LSM树:存储在非易失内存和SSD硬盘上,对外提供KV接口GET和SET。
Space Meta:空间划分的元数据信息,记录不同redis实例占用的空间范围。
Instance Meta:实例元数据信息,记录单个实例下LSM树SST表格的空间信息和LSM树的结构信息。
Space Manager:负责对实例存储空间的分配和释放等管理工作。Network IO:负责收发网络端的数据。
Protocol Parser:负责解析redis协议。
Replication:负责实例间的数据同步。
Struct Map:负责将redis的list,set,hash,string等操作映射成Get/Set的KV操作。
Index:在DRAM中建立对部分LSM树SST表格数据的索引。
本实施例中,非易失性空间管理流程如下:
一、分配
实例进程启动后通过进程间通信接口向Space Manager请求分配非易失性内存空间,Space Manager基于实例的规格进行非易失性内存空间分配,并告知相关实例分配的空间范围,实例基于分配的空间范围,将相应的非易失性内存空间通过mmap接口映射到本进程的虚拟地址空间。
二、释放
实例munmap掉需要释放的空间,通过进程间通信接口通知Space Manger需要释放的非易失性内存空间范围,Space Manager释放相应空间,更新相关元数据信息,并告知释放结果;
三、LSM树写入流程
LSM树写入流程如图3所示。LSM树从0到N划分成若干层,上层数据合并后会写入到下层数据。L0SST表格数据是无序存储,从L1开始数据为有序存储。每个L0SST表格在DRAM内存里有一个对应的Skiplist,Skiplist在内存中存储相应的key值,以及保存在非易失性内存的存储地址。同一时刻L0只有一个活跃的SST表格,当活跃的SST表格写满后会创建一个新的活跃的SST表格;L0非活跃的SST表格合并为有序存储数据后写入到下一层L1的SST表格。具体流程如下:SET操作将相应的key和value通过顺序写的方式写入到L0活跃的SST表格,在DRAM的Skiplist插入相应的key和该笔数据存储在SST表格的非易失性内存地址,L0活跃的SST表格写满后创建一个新的L0活跃SST表格,原有的设置为非活跃表格L0非活跃表格合并为有序数据后存储为下一层L1的SST表格,每一层SST表格数据通过合并,去掉重复的、旧的数据,生成一个新的SST表格保存到下一层。
四、LSM树读取流程
LSM树读取流程如图4所示。在L0的Skiplist中查找相应的key,如果找到则从对应的非易失内存地址读取value值;如果未找到则执行下一步从L1到LN基于每一层的索引数据查找相应的key;2.1如果数据存储在非易失性内存,则基于非易失内存地址返回相应数据;2.2如果数据存储在硬盘,则将相应的数据读取到内存再返回;2.3如果未找到相关数据,则下一层重复步骤2的动作。
五、Redis数据类型转换
Redis KV数据库,Value的数据类型主要有String、Set、Hash和List四种类型,LSM树虽然也是KV存储,但Value只支持String一种类型格式,Set、Hash和List需要通过转换存储到LSM树上。
1、Redis set结构转换
redis set表示一个集合,集合的特性决定了set里的数据具有唯一性;转换方式为redis set里的每一个成员与redis key值组和成一个新的key,LSM树存储这个新的key,value值为空。相关示例如图5所示。
2、Redis hash结构转换
redis hash结构表示该key对应的value是一个hash表结构,由于hash表中每一项也是KV的格式,所以转换方式为key和该项在Hash表中的key组成一个新的key,LSM树存储这个新的key和hash表中该项的Value值。相关示例如图6所示。
3、Redis list结构转换
redis list结构表示该key对应的value是一个list链表结构,由于链表的数据成员可能会很多,并且可能会在链表的任一位置进行读取、插入、删除操作,所以需要在LSM树的KV结构中保存链表的索引数据;同时为了能支持大量数据的快速访问,索引被分为两层,索引的主要作用是记录list中成员序列号与RowID的对应关系。相关链表的转换结构如图7所示。
结构表示如下:在LSM树中创建一个KV保存Redis list的元信息,key为redis的key值,value元信息包括:
1.1RowID:该值永远递增,list中每插入一次数据该值递增加1,list中删除数据不影响该值;
1.2I0_Num:表示第0层索引的数目;
1.3I1_Size:表示第1层索引的每一项保存的索引值数目;
1.4ItemsNum:表示list结构里成员个数。
2.在LSM树中创建Redis list第0层索引的KV结构,第0层索引的每一项对应于第1层索引中的相应项;key由redis的key值、I0标识、I0序列号组成;value由起始序列号和对应的第1层索引值个数组成。
3.在LSM树中创建Redis list第1层索引的KV结构,key由redis的key值、I1标识和I1序列号组成;value为RowID数组。第1层索引按序列号排序,索引值所在的序列与list中每一项的序列一一对应。
4.在LSM树中创建Redis list中每一项的KV结构,key由redis的key值和RowID组成,value为redis list中该项的值。
六、冷热数据分离
LSM树具有层级结构,刚写入的数据保存在L0活跃的SST表格,然后通过不断的合并操作将上层数据写入到下一层。下层的数据量更大,最下几层的数据可以存储在容量更大但速度较慢的硬盘当中。因此就写入操作而言LSM树的层级越深则表示数据越冷。针对读操作的冷热数据可以利用写操作的数据冷热特性,具体流程如下:
从L0开始逐层搜索数据;如果数据存储在非易失性内存则直接返回相应的存储值;如果数据存储在硬盘,则将相应的值读出,并返回相应的存储值;如果该数据多次访问,达到热数据标准,则重新执行写入操作,将数据存储到L0。
虽然本发明所揭示的实施方式如上,但其内容只是为了便于理解本发明的技术方案而采用的实施方式,并非用于限定本发明。任何本发明所属技术领域内的技术人员,在不脱离本发明所揭示的核心技术方案的前提下,可以在实施的形式和细节上做任何修改与变化,但本发明所限定的保护范围,仍须以所附的权利要求书限定的范围为准。
Claims (12)
1.一种在非易失性内存上实现Redis内存数据库的方法,其特征在于,包括:
为每个Redis实例分配唯一的索引;
根据所述索引,基于所述Redis实例的规格在非易失性内存为所述Redis实例分配存储空间,并将所述Redis实例的键值和数据映射为LSM树的存储结构存入分配的存储空间;
向所述Redis实例反馈分配的索引和存储空间。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述Redis实例基于获取的存储空间,将相应的非易失性内存存储空间映射到本进程的虚拟地址空间。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收所述Redis实例发送的释放空间操作请求;
对所述释放空间操作请求进行解析,并按照解析出的索引删除所述释放空间操作请求中请求释放的非易失性内存对应的存储空间;
向所述Redis实例反馈释放结果。
4.根据权利要求1所述的方法,其特征在于,将所述Redis实例的键值和数据映射为LSM树的存储结构存入分配的存储空间包括:
解析Redis实例发送的数据信息,并将所述数据信息归纳到解析出的索引在非易失性内存对应的存储空间;
将Redis实例每一条解析的键值和数据映射为LSM树的形式以顺序写的方式存入非易失性内存的存储地址。
5.根据权利要求4所述的方法,其特征在于,将Redis实例每一条解析的键值和数据映射为LSM树的形式以顺序写的方式存入非易失性内存的存储地址包括:
解析Redis实例发送的数据信息对应的键值和数据,并保存在所述键值所在层级对应的LSM树的存储地址中;
将所述LSM树的上一层中的非活跃数据合并为有序数据后写入到LSM树的下一层存储地址中。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
基于存储在非易失性内存上的每个Redis实例的数据冷热特性;将判定为冷数据的一个或者多个Redis实例的数据信息从非易失性内存迁移至硬盘上;
或者,基于存储在非易失性内存上的Redis实例的每组数据冷热特性;将判定为冷数据的Redis实例的一组或者多组数据从非易失性内存迁移至硬盘上。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
接收Redis实例发送的读取空间操作请求;
对所述读取空间操作请求进行解析,并按照解析出的索引查找非易失性内存对应的存储空间;
当在非易失性内存查找到对应的存储空间时,基于非易失性内存对应的存储空间返回所述Redis实例的数据信息;
当在非易失性内存未查找到对应的存储空间时,按照解析出的索引查找硬盘上对应的存储空间;基于硬盘对应的存储空间返回所述Redis实例的数据信息。
8.根据权利要求6所述的方法,其特征在于,所述方法还包括:
当存储在硬盘上的一个或者多个Redis实例的数据信息判定为热数据时,将所述Redis实例的数据信息从硬盘迁移至非易失性内存上;
或者,当存储在硬盘上的Redis实例中的一组或者多组数据判定为热数据时,将所述Redis实例的一组或者多组数据从硬盘迁移至非易失性内存上。
9.一种在非易失性内存上实现Redis内存数据库的系统,其特征在于,包括存储空间管理器和非易失性内存,
所述存储空间管理器,设置为为每个Redis实例分配唯一的索引;并根据所述索引,基于所述Redis实例的规格在非易失性内存为所述Redis实例分配存储空间,并将所述Redis实例的键值和数据映射为LSM树的存储结构存入分配的存储空间;
所述存储空间管理器,还设置为向所述Redis实例反馈分配的索引和存储空间。
10.根据权利要求9所述的系统,其特征在于,还包括:硬盘,
所述存储空间管理器基于存储在非易失性内存上的每个Redis实例的数据冷热特性;将判定为冷数据的一个或者多个Redis实例的数据信息从非易失性内存迁移至硬盘上;
或者,所述存储空间管理器基于存储在非易失性内存上的Redis实例的每组数据冷热特性;将判定为冷数据的Redis实例的一组或者多组数据从非易失性内存迁移至硬盘上。
11.根据权利要求10所述的系统,其特征在于,
所述存储空间管理器接收Redis实例发送的读取空间操作请求;对所述读取空间操作请求进行解析,并按照解析出的索引查找非易失性内存对应的存储空间;
当在非易失性内存查找到对应的存储空间时,所述存储空间管理器基于非易失性内存对应的存储空间返回所述Redis实例的数据信息;
当在非易失性内存未查找到对应的存储空间时,所述存储空间管理器按照解析出的索引查找硬盘上对应的存储空间;基于硬盘对应的存储空间返回所述Redis实例的数据信息。
12.根据权利要求10所述的系统,其特征在于,
当存储在硬盘上的一个或者多个Redis实例的数据信息判定为热数据时,所述存储空间管理器将所述Redis实例的数据信息从硬盘迁移至非易失性内存上;
当存储在硬盘上的Redis实例中的一组或者多组数据判定为热数据时,所述存储空间管理器将所述Redis实例的一组或者多组数据从硬盘迁移至非易失性内存上。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910301040.2A CN111831423A (zh) | 2019-04-15 | 2019-04-15 | 一种在非易失性内存上实现Redis内存数据库的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910301040.2A CN111831423A (zh) | 2019-04-15 | 2019-04-15 | 一种在非易失性内存上实现Redis内存数据库的方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111831423A true CN111831423A (zh) | 2020-10-27 |
Family
ID=72914560
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910301040.2A Pending CN111831423A (zh) | 2019-04-15 | 2019-04-15 | 一种在非易失性内存上实现Redis内存数据库的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111831423A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023115935A1 (zh) * | 2021-12-22 | 2023-06-29 | 华为云计算技术有限公司 | 数据处理方法、相关装置及设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105122243A (zh) * | 2013-03-15 | 2015-12-02 | 亚马逊科技公司 | 用于半结构化数据的可扩展分析平台 |
US20170212680A1 (en) * | 2016-01-22 | 2017-07-27 | Suraj Prabhakar WAGHULDE | Adaptive prefix tree based order partitioned data storage system |
CN107403091A (zh) * | 2017-07-06 | 2017-11-28 | 华中科技大学 | 一种结合溯源路径和溯源图的实时入侵检测系统 |
CN107436738A (zh) * | 2017-08-17 | 2017-12-05 | 北京理工大学 | 一种数据存储方法及系统 |
US20180032580A1 (en) * | 2016-07-26 | 2018-02-01 | Samsung Electronics Co., Ltd. | Accelerating rocksdb multi-instance performance by introducing random initiation for compaction |
US20180260324A1 (en) * | 2017-03-10 | 2018-09-13 | Oracle International Corporation | Data Structure Store in Persistent Memory |
CN109521959A (zh) * | 2018-11-01 | 2019-03-26 | 西安交通大学 | 一种基于ssd-smr磁盘混合键值存储系统数据组织方法 |
CN109558084A (zh) * | 2018-11-29 | 2019-04-02 | 文华学院 | 一种数据处理方法以及相关设备 |
-
2019
- 2019-04-15 CN CN201910301040.2A patent/CN111831423A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105122243A (zh) * | 2013-03-15 | 2015-12-02 | 亚马逊科技公司 | 用于半结构化数据的可扩展分析平台 |
US20170212680A1 (en) * | 2016-01-22 | 2017-07-27 | Suraj Prabhakar WAGHULDE | Adaptive prefix tree based order partitioned data storage system |
US20180032580A1 (en) * | 2016-07-26 | 2018-02-01 | Samsung Electronics Co., Ltd. | Accelerating rocksdb multi-instance performance by introducing random initiation for compaction |
US20180260324A1 (en) * | 2017-03-10 | 2018-09-13 | Oracle International Corporation | Data Structure Store in Persistent Memory |
CN107403091A (zh) * | 2017-07-06 | 2017-11-28 | 华中科技大学 | 一种结合溯源路径和溯源图的实时入侵检测系统 |
CN107436738A (zh) * | 2017-08-17 | 2017-12-05 | 北京理工大学 | 一种数据存储方法及系统 |
CN109521959A (zh) * | 2018-11-01 | 2019-03-26 | 西安交通大学 | 一种基于ssd-smr磁盘混合键值存储系统数据组织方法 |
CN109558084A (zh) * | 2018-11-29 | 2019-04-02 | 文华学院 | 一种数据处理方法以及相关设备 |
Non-Patent Citations (3)
Title |
---|
DOYOUNG KIM 等: "A scalable and persistent key-value store using non-volatile memory Doyoung Kim", SAC \'19: PROCEEDINGS OF THE 34TH ACM/SIGAPP SYMPOSIUM ON APPLIED COMPUTING, 8 April 2019 (2019-04-08) * |
游理通;王振杰;黄林鹏;: "一个基于日志结构的非易失性内存键值存储系统", 计算机研究与发展, no. 09, 15 September 2018 (2018-09-15) * |
蒋付彬;王华军;: "NoSQL数据库的应用及选型研究", 信息与电脑(理论版), no. 03, 8 February 2016 (2016-02-08) * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2023115935A1 (zh) * | 2021-12-22 | 2023-06-29 | 华为云计算技术有限公司 | 数据处理方法、相关装置及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106708427B (zh) | 一种适用于键值对数据的存储方法 | |
CN101997918B (zh) | 异构san环境中的海量存储资源按需分配的实现方法 | |
CN101556557B (zh) | 一种基于对象存储设备的对象文件组织方法 | |
US9449005B2 (en) | Metadata storage system and management method for cluster file system | |
CN107168657B (zh) | 一种基于分布式块存储的虚拟磁盘分层缓存设计方法 | |
KR101207510B1 (ko) | 클러스터 데이터 관리시스템 및 클러스터 데이터 관리 시스템에서 공유 재수행 로그를 이용한 데이터 재구축 방법 | |
US20060212495A1 (en) | Method and system for storing data into a database | |
CN110825748A (zh) | 利用差异化索引机制的高性能和易扩展的键值存储方法 | |
JP2015512604A (ja) | 暗号ハッシュ・データベース | |
CN106570113B (zh) | 一种海量矢量切片数据云存储方法及系统 | |
CN114281762B (zh) | 一种日志存储加速方法、装置、设备及介质 | |
CN113626431A (zh) | 一种基于lsm树的延迟垃圾回收的键值分离存储方法及系统 | |
WO2011064742A1 (en) | Super-records | |
CN102163232A (zh) | 一种支持iec61850对象查询的sql接口实现方法 | |
CN113377292B (zh) | 一种单机存储引擎 | |
CN105740334A (zh) | 一种文件系统中异步批量创建文件的系统及方法 | |
CN113704217A (zh) | 一种分布式持久性内存文件系统中元数据及数据组织架构方法 | |
KR100907477B1 (ko) | 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법 | |
CN116894041B (zh) | 数据存储方法、装置、计算机设备及介质 | |
CN111831423A (zh) | 一种在非易失性内存上实现Redis内存数据库的方法和系统 | |
CN116226232A (zh) | 面向分布式数据库的持久内存数据存储方法及系统 | |
CN111338569A (zh) | 一种基于直接映射的对象存储后端优化方法 | |
CN111309263B (zh) | 一种分布式对象存储中的逻辑卷实现方法 | |
CN114741382A (zh) | 一种减少读时延的缓存方法和系统 | |
US20240086362A1 (en) | Key-value store and file system |
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 |