CN107728937B - 一种使用非易失性内存介质的键值对持久存储方法及系统 - Google Patents
一种使用非易失性内存介质的键值对持久存储方法及系统 Download PDFInfo
- Publication number
- CN107728937B CN107728937B CN201710834389.3A CN201710834389A CN107728937B CN 107728937 B CN107728937 B CN 107728937B CN 201710834389 A CN201710834389 A CN 201710834389A CN 107728937 B CN107728937 B CN 107728937B
- Authority
- CN
- China
- Prior art keywords
- hash table
- key value
- value pair
- key
- static
- 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/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/08—Error detection or correction by redundancy in data representation, e.g. by using checking codes
- G06F11/10—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
- G06F11/1004—Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
-
- 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/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- 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/064—Management of blocks
-
- 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/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0647—Migration mechanisms
-
- 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/0683—Plurality of storage devices
- G06F3/0685—Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Computer Security & Cryptography (AREA)
- Quality & Reliability (AREA)
- Retry When Errors Occur (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明提供了一种使用非易失性内存介质的键值对持久存储方法及系统,同时使用易失性内存介质和非易失性内存介质构建持久键值存储系统,在易失性内存介质中构建静态散列表接收来自客户端的读写访问请求;在非易失性内存介质中构建动态散列表存储键值对的元数据和键值对在数据区的内存偏移地址,在非易失性内存中的动态散列表之后构建数据存储区,存放键值对大小、键值对数据和键值对校验和;使用结合键值对校验和的检查点的机制,维护持久键值存储系统的数据一致性。本发明利用了不同内存特性的优点,提升性能的同时实现了对键值数据对的持久有效存储、兼顾了内存利用的高效率,降低了维护一致性的系统代价。
Description
技术领域
本发明涉及非易失性内存和数据存储系统软件领域,具体地,涉及一种使用非易失性内存介质设计实现键值持久存储的方法及系统。
背景技术
新型的可字节寻址非易失性内存NVM(Non-Volatile Memory)介质技术的兴起,对存储领域带来了新的巨大机遇和挑战,引发了产业界和学术界对异构混合内存体系架构及其相关系统软件的研究兴趣,形成了一系列新的研究热点。NVM器件具有可字节寻址,非易失性和高存储密度,低能耗等特点,具备传统易失性内存DRAM所无法比拟的诸多优势。
随着大数据时代的发展与演变,数据正在以前所未有的速度增长与累积,数据处理的实时性和高效性提出了更高的要求和挑战。键值存储系统(Key-Value Store)又称KVS系统,作为具有代表性的存储系统软件,在一些大规模商用网站如社交媒体,在线交易等应用场景中,对提升系统性能改善用户体验等方面发挥着极其重要的作用。现有的常用键值存储系统如LevelDB,RocksDB等,主要针对HDD或SSD设计,在应对大量的数据需要存放在内存中以提升处理速度的应用场景中表现出较大的性能瓶颈。现存的内存键值系统如Redis,Memcached等缺乏持久存储能力或持久存储需要依赖更加底层的文件系统的协助,增加了软件栈的层数,表现出了系统架构上的局限性。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种使用非易失性内存介质的键值对持久存储方法及系统。
根据本发明提供的一种使用非易失性内存介质的键值对持久存储方法,同时使用易失性内存介质和非易失性内存介质构建持久键值存储系统,并包括步骤:
易失性内存介质构建步骤:在易失性内存介质中构建静态散列表接收来自客户端的读写访问请求;
非易失性内存介质构建步骤:在非易失性内存介质中构建动态散列表存储键值对的元数据和键值对在数据区的内存偏移地址,在非易失性内存中的动态散列表之后构建数据存储区,存放键值对大小、键值对数据和键值对校验和;
数据一致性保障步骤:使用结合键值对校验和的检查点的机制,维护持久键值存储系统的数据一致性。
优选的,所述静态散列表大小固定,每一个散列表中含有2^16个桶,每个桶中含有四个存储单元,每个存储单元中含有64位的键的散列值、键值对在非易失性内存存储区中64位的内存偏移地址和32位的键值对校验和。
优选的,所述静态散列表中的散列算法采用两个散列函数的布谷鸟散列算法,当静态散列表的基本填满时,对该静态散列表进行固定操作,固定后的静态散列表将通过合并线程和位于非易失性内存中动态散列表进行合并,完成动态扩展。
优选的,所述动态散列表的初始大小和一个静态散列表相同,含有2^16个桶,每个桶中含有四个存储单元,每个存储单元中含有一个1位的标志位,该标志位标识该存储单元是否已被占用,一个64位的键的散列值,一个64位的键值对在非易失性内存存储区中的内存偏移地址和一个32位的键值对校验和。
优选的,所述结合键值对校验和的检查点的机制包括:
在完成每次静态散列表合并时,向动态散列表中原本存放内存偏移地址和校验和的部位,存放一个固定内容的值和一个递升版本号用来记录本次合并操作的完成,并在系统恢复或重启时,根据最新的检查点回溯比对键值对校验和,找出校验和不一致的键值对并且丢弃,从而维护系统的数据一致性。
根据本发明提供的一种使用非易失性内存介质的键值对持久存储系统,包括
易失性内存介质:包括静态散列表,接收来自客户端的读写访问请求;
非易失性内存介质:包括动态散列表,存储键值对的元数据和键值对在数据区的内存偏移地址,在所述动态散列表之后还包括数据存储区,存放键值对大小、键值对数据和键值对校验和;
数据一致性保障模块:使用结合键值对校验和的检查点的机制,维护持久键值存储系统的数据一致性。
优选的,所述静态散列表大小固定,每一个散列表中含有2^16个桶,每个桶中含有四个存储单元,每个存储单元中含有64位的键的散列值、键值对在非易失性内存存储区中64位的内存偏移地址和32位的键值对校验和。
优选的,所述静态散列表中的散列算法采用两个散列函数的布谷鸟散列算法,当静态散列表的基本填满时,对该静态散列表进行固定操作,固定后的静态散列表将通过合并线程和位于非易失性内存中动态散列表进行合并,完成动态扩展。
优选的,所述动态散列表的初始大小和一个静态散列表相同,含有2^16个桶,每个桶中含有四个存储单元,每个存储单元中含有一个1位的标志位,该标志位标识该存储单元是否已被占用,一个64位的键的散列值,一个64位的键值对在非易失性内存存储区中的内存偏移地址和一个32位的键值对校验和。
优选的,所述结合键值对校验和的检查点的机制包括:
在完成每次静态散列表合并时,向动态散列表中原本存放内存偏移地址和校验和的部位,存放一个固定内容的值和一个递升版本号用来记录本次合并操作的完成,并在系统恢复或重启时,根据最新的检查点回溯比对键值对校验和,找出校验和不一致的键值对并且丢弃,从而维护系统的数据一致性。
与现有技术相比,本发明具有如下的有益效果:
1、本发明提供的基于传统易失性内存和非易失性内存异构混合内存体系架构设计的键值对存储系统,同时有效地利用了不同内存特性的优点,提升性能的同时实现了对键值数据对的持久有效存储;
2、本发明提供的静态散列表和动态散列表相结合的设计方法,在易失性内存中采用静态散列表实现对来自客户端的读写请求的快速响应,在非易失性内存中实现了内存使用量随着实际数据量的动态扩展,按需分配,提升系统性能的同时兼顾了内存利用的高效率;
3、本发明提供的基于校验和和检查点机制的一致性保障策略,采用和计算散列值相似的方法计算校验和,在系统恢复和重启时回溯检查有限的键值对使的系统恢复到一致性状态,有效降低了维护一致性的系统代价。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明与传统键值对存储系统架构对比图;
图2为本发明的内存布局示意图;
图3为本发明位于DRAM中静态散列表的结构示意图;
图4为本发明位于NVM中动态散列表的结构示意图;
图5为本发明系统位于NVM上键值对数据区键值对存储结构示意图;
图6为本发明校验和和检查点一致性保障性机制说明图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
为方便说明,本实施例使用LibreKV系统代表本发明所描述的键值存储系统的设计方法的具体案例。
本实施例提供的一种使用非易失性内存介质的键值对持久存储方法,同时使用易失性内存介质和非易失性内存介质构建持久键值存储系统,与传统键值对存储系统架构对比如图1所示,并结合图2,包括步骤:
易失性内存介质(DRAM)构建步骤:在易失性内存介质中构建静态散列表接收来自客户端的读写访问请求。
非易失性内存介质(NVM)构建步骤:在非易失性内存介质中构建动态散列表存储键值对的元数据和键值对在数据区的内存偏移地址,在非易失性内存中的动态散列表之后构建数据存储区,存放键值对大小、键值对数据和键值对校验和。
数据一致性保障步骤:使用结合键值对校验和的检查点的机制,维护持久键值存储系统的数据一致性。
同理,本实施例还提供的一种使用非易失性内存介质的键值对持久存储系统,包括
易失性内存介质(DRAM):包括静态散列表,接收来自客户端的读写访问请求;
非易失性内存介质(NVM):包括动态散列表,存储键值对的元数据和键值对在数据区的内存偏移地址,在所述动态散列表之后还包括数据存储区,存放键值对大小、键值对数据和键值对校验和;
数据一致性保障模块:使用结合键值对校验和的检查点的机制,维护持久键值存储系统的数据一致性。
静态散列表大小固定,每一个散列表中含有2^16个桶,每个桶中含有四个存储单元,每个存储单元中含有64位的键的散列值、键值对在非易失性内存存储区中64位的内存偏移地址和32位的键值对校验和。静态散列表中的散列算法采用两个散列函数的布谷鸟散列算法,当静态散列表的基本填满时,对该静态散列表进行固定操作,固定后的静态散列表将通过合并线程和位于非易失性内存中动态散列表进行合并,完成动态扩展。
非易失性内存介质的区域划分具体调用如下函数完成:
int librekv_mmap(const char*filepath,size_t size,off_t offset)
在非易失性内存介质首部初始化动态散列表,动态散列表结构参照附图4实施,动态散列表的初始大小和一个静态散列表相同,含有2^16个桶,每个桶中含有四个存储单元,每个存储单元中含有一个1位的标志位,该标志位标识该存储单元是否已被占用,一个64位的键的散列值,一个64位的键值对在非易失性内存存储区中的内存偏移地址和一个32位的键值对校验和。
在非易失性内存介质中动态散列表后初始化键值对数据区,用于存放键值对数据(放键值对大小、键值对数据和键值对校验和),键值对数据的存储结构如图5所示,包括键的长度,值的长度,键的数据内容和值的数据内容。
在DRAM区域中构建静态散列表,该过程具体通过如下函数完成:
struct CuckooHashTable*librekv_cuckoo_create()
按照图3所描述的静态散列表结构构建一个桶数目大小为2^16个桶的静态散列表,并通过接口函数接收来自客户端的读写请求。
本发明实施例中,来自客户端的写(put)请求通过如下函数完成:
int librekv_cuckoo_put(struct CuckooHashTable*cuckoo_hash_table,constchar*key,const char*value)
键值对写入函数过程中,首先将键的散列值计算出来写入位于DRAM中的静态散列表,写入过程采用两个函数的布谷鸟散列机制,具体散列算法采用64位的City散列算法,截取键散列值的头16位作为该键在散列表中的散列位,其次将键值对的校验和值通过CRC32校验函数计算得到,并最为元数据的一部分填放到静态散列表中去,再次将键值对大小及键值对本身写入位于NVM上的数据区,并返回键值对存储的内存地址offset存入静态散列表中。
本发明实施例中,来自客户端的读(get)请求通过如下函数完成:
int librekv_cuckoo_get(struct CuckooHashTable*cuckoo_hash_table,constchar*key)
查找过程主要分为三步进行,首先在位于DRAM中的活动静态散列表中查找,如未找到,其次在位于DRAM中的固定散列表中查找,如再未找到,则最后在位于NVM中的动态散列表中进行查找,任意一个散列值的查找最多经过三次散列过程,查找三次内存,较现有的其他键值存储系统相比,显著地降低了读写放大。
在发明实施例中,存在静态散列表向动态散列表中合并的过程,当位于DRAM中的静态散列表基本填满后,将启动一个固定操作将该静态散列表变成一个不可变的散列表,具体地,该过程调用如下函数完成:
int librekv_cuckoo_immutable(struct CuckooHashTable*targetTable)
该函数将一个可以接收读写请求的静态散列表变成一个不可接收读写请求的静态散列表,并使用一个标志位标识该散列表为只读,准备启动合并线程将其合并到位于NVM上的动态散列表中。
本发明实施例中,使用一种动态扩展算法将DRAM中的静态散列表合并到NVM上的动态散列表中。
该合并过程主要为将已被固定的静态散列表中的元素逐个取出,插入到位于NVM上的动态散列表中去,如在此过程中发生分裂,则按照线性散列分裂算法对动态散列表进行分裂。
具体地,该过程主要分为如下步骤,首先创建并初始化动态散列表,该过程主要调用如下函数完成:
extern int librekv_linear_create(uint32_t i_initialLevel,uint64_t i_entriesPerBucket)
具体地,该函数初始化一个开始合并前的最小动态散列表,i_initialLevel为开始合并前的层级数,i_entriesPerBucket为每一个桶位中可存储的散列项的个数。
具体地,位于NVM上的动态散列表调用如下函数,逐个将静态散列表中的散列项插入到动态散列表中:
void librekv_linear_put(uint64_t keyHash,uint64_t offset)
如果没有触发分裂,则直接插入到动态散列表的该当位置中,如果发生了分裂,则按照分裂算法实施以下步骤。
具体地,本实施例中,采用如下函数执行某一个散列项插入到动态散列表中的过程:
extern bool librekv_linear_insertToBucket(uint64_t keyHash,uint64_toffset,uint64_t bucketIndex)
该函数实现将某一散列项,包括散列值,内存偏移地址和桶编号等插入到动态散列表中,并判断该插入操作是否触发桶分裂,如触发桶分裂则调用分裂处理函数,如不触发分裂则直接插入。
具体地,本实施例中,采用如下函数处理桶分裂发生时的情况。
extern struct linearBucket*librekv_linear_addBucket()
该函数实现在动态散列表的尾部新建一个桶,并将动态散列表的整体大小加一,并将该桶中所有存储单元置零初始化。
具体地,在桶分裂发生以后,对原本存于相关桶中的散列项,需要重新判断其所属的散列桶的新编号,如果新编号与现有编号不一致,需要调用如下函数进行镜像桶之间的转移。
extern librekv_linear_transferToMirrorBucket(uint64_t keyHash,uint64_t offset,uint64_t bucketIndex)
该函数得到新增桶的镜像桶索引值,并在镜像桶中遍历所有的散列项,根据最新的动态散列表的层级数,将该属于新增散列桶的散列项从镜像散列桶迁移到新增散列桶中。
如图6所示,结合键值对校验和的检查点的机制包括:在完成每次静态散列表合并时,向动态散列表中原本存放内存偏移地址和校验和的部位,存放一个固定内容的值和一个递升版本号用来记录本次合并操作的完成,并在系统恢复或重启时,根据最新的检查点回溯比对键值对校验和,找出校验和不一致的键值对并且丢弃,从而维护系统的数据一致性。
具体的,在完成一次合并操作后,该键值系统将在动态散列表尾部插入一个特殊的散列项作为本次合并成功的检查点,并作为系统重启和发生异常时,检验数据一致性状态使用,具体地,该过程调用以下函数完成:
extern uint64_t checkpointIndex librekv_checkpoint(uint64_t keyHash,uint64_t bucketIndex)
在系统重启或发生异常情况下,本键值系统需要进行数据一致性检查和恢复,具体地,该过程调用如下函数完成:
extern void librekv_backScan(uint64_t keyHash,uint64_tlatestBucketIndex)
该函数从动态散列表最新的桶开始回溯,一直回溯到最近的一个检查点,期间逐个取出位于NVM区域上的键值数据对,计算其校验和,并将计算的校验和和动态散列表中存储的校验和进行对比,如相同则保留该键值对,如不同则认为该键值对没有成功写入,则直接丢弃该键值对。这种轻量级的校验和和检查点相结合的机制保障数据一致性,与传统一致性保障机制相比更加简单,系统开销更加小,性能更加高。
综上所述,本发明提出的基于DRAM和NVM的异构混合内存体系架构设计键值对存储系统及方法,充分考虑了DRAM和NVM各自的优缺点和特性,采用静态散列表和动态散列表相结合的方式,实现系统性能和内存利用效率的有效均衡,采用基于校验和和检查点的一致性保障机制,巧妙而可靠地维护了键值存储系统的数据一致性,避免了使用硬件原语实现对数据有次序地写入从而达到维护一致性手段的高代价和低效率,从而达到减少访问延时,提升系统性能的目的。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
在本申请的描述中,需要理解的是,术语“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (2)
1.一种使用非易失性内存介质的键值对持久存储方法,其特征在于,同时使用易失性内存介质和非易失性内存介质构建持久键值存储系统,并包括步骤:
易失性内存介质构建步骤:在易失性内存介质中构建静态散列表接收来自客户端的读写访问请求;
非易失性内存介质构建步骤:在非易失性内存介质中构建动态散列表存储键值对的元数据和键值对在数据区的内存偏移地址,在非易失性内存中的动态散列表之后构建数据存储区,存放键值对大小、键值对数据和键值对校验和;
数据一致性保障步骤:使用结合键值对校验和的检查点的机制,维护持久键值存储系统的数据一致性;
所述静态散列表大小固定,每一个散列表中含有2^16个桶,每个桶中含有四个存储单元,每个存储单元中含有64位的键的散列值、键值对在非易失性内存存储区中64位的内存偏移地址和32位的键值对校验和;
所述静态散列表中的散列算法采用两个散列函数的布谷鸟散列算法,当静态散列表的基本填满时,对该静态散列表进行固定操作,固定后的静态散列表将通过合并线程和位于非易失性内存中动态散列表进行合并,完成动态扩展;
所述动态散列表的初始大小和一个静态散列表相同,含有2^16个桶,每个桶中含有四个存储单元,每个存储单元中含有一个1位的标志位,该标志位标识该存储单元是否已被占用,一个64位的键的散列值,一个64位的键值对在非易失性内存存储区中的内存偏移地址和一个32位的键值对校验和;
所述结合键值对校验和的检查点的机制包括:
在完成每次静态散列表合并时,向动态散列表中原本存放内存偏移地址和校验和的部位,存放一个固定内容的值和一个递升版本号用来记录本次合并操作的完成,并在系统恢复或重启时,根据最新的检查点回溯比对键值对校验和,找出校验和不一致的键值对并且丢弃,从而维护系统的数据一致性。
2.一种使用非易失性内存介质的键值对持久存储系统,其特征在于,包括
易失性内存介质:包括静态散列表,接收来自客户端的读写访问请求;
非易失性内存介质:包括动态散列表,存储键值对的元数据和键值对在数据区的内存偏移地址,在所述动态散列表之后还包括数据存储区,存放键值对大小、键值对数据和键值对校验和;
数据一致性保障模块:使用结合键值对校验和的检查点的机制,维护持久键值存储系统的数据一致性;
所述静态散列表大小固定,每一个散列表中含有2^16个桶,每个桶中含有四个存储单元,每个存储单元中含有64位的键的散列值、键值对在非易失性内存存储区中64位的内存偏移地址和32位的键值对校验和;
所述静态散列表中的散列算法采用两个散列函数的布谷鸟散列算法,当静态散列表的基本填满时,对该静态散列表进行固定操作,固定后的静态散列表将通过合并线程和位于非易失性内存中动态散列表进行合并,完成动态扩展;
所述动态散列表的初始大小和一个静态散列表相同,含有2^16个桶,每个桶中含有四个存储单元,每个存储单元中含有一个1位的标志位,该标志位标识该存储单元是否已被占用,一个64位的键的散列值,一个64位的键值对在非易失性内存存储区中的内存偏移地址和一个32位的键值对校验和;
所述结合键值对校验和的检查点的机制包括:
在完成每次静态散列表合并时,向动态散列表中原本存放内存偏移地址和校验和的部位,存放一个固定内容的值和一个递升版本号用来记录本次合并操作的完成,并在系统恢复或重启时,根据最新的检查点回溯比对键值对校验和,找出校验和不一致的键值对并且丢弃,从而维护系统的数据一致性。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710834389.3A CN107728937B (zh) | 2017-09-15 | 2017-09-15 | 一种使用非易失性内存介质的键值对持久存储方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710834389.3A CN107728937B (zh) | 2017-09-15 | 2017-09-15 | 一种使用非易失性内存介质的键值对持久存储方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107728937A CN107728937A (zh) | 2018-02-23 |
CN107728937B true CN107728937B (zh) | 2020-09-04 |
Family
ID=61206546
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710834389.3A Active CN107728937B (zh) | 2017-09-15 | 2017-09-15 | 一种使用非易失性内存介质的键值对持久存储方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107728937B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190034427A1 (en) * | 2017-12-28 | 2019-01-31 | Intel Corporation | Data management system employing a hash-based and tree-based key-value data structure |
CN109086430A (zh) * | 2018-08-10 | 2018-12-25 | 北京奇虎科技有限公司 | 数据存储处理方法、装置、计算设备及计算机存储介质 |
CN109683811B (zh) * | 2018-11-22 | 2020-05-19 | 华中科技大学 | 一种混合内存键值对存储系统的请求处理方法 |
CN109918352B (zh) * | 2019-03-04 | 2021-11-05 | 北京百度网讯科技有限公司 | 存储器系统和存储数据的方法 |
CN110059019B (zh) * | 2019-04-17 | 2021-12-10 | 珠海金山网络游戏科技有限公司 | 一种内存地址的分配方法及装置、计算设备和存储介质 |
CN112667595B (zh) * | 2019-10-15 | 2023-05-12 | 抖音视界有限公司 | 数据处理方法、装置及电子设备 |
CN110737547B (zh) * | 2019-10-22 | 2022-08-19 | 第四范式(北京)技术有限公司 | 使用非易失性存储器nvm恢复内存数据库的方法和设备 |
CN111638996B (zh) * | 2020-05-14 | 2023-04-11 | 华中科技大学 | 一种保证非易失内存中故障原子性的方法及系统 |
CN111865573A (zh) * | 2020-06-22 | 2020-10-30 | 上海上实龙创智能科技股份有限公司 | 一种动态密码生成系统、生成方法、设备及存储介质 |
CN113485946A (zh) * | 2020-11-04 | 2021-10-08 | 中兴通讯股份有限公司 | 持久性内存键值系统及其操作方法 |
CN113434092B (zh) * | 2021-07-07 | 2022-04-01 | 中国人民解放军国防科技大学 | 一种基于混合dram-nvm内存的指纹识别方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103392207A (zh) * | 2011-10-05 | 2013-11-13 | Lsi公司 | 非易失性存储的自身日志记录和层级一致性 |
CN103558992A (zh) * | 2011-02-24 | 2014-02-05 | 泰若考特股份有限公司 | 堆外直接内存数据存储器,创建和/或管理堆外直接内存数据存储器的方法,和/或包括堆外直接内存数据存储器的系统 |
CN103559027A (zh) * | 2013-10-22 | 2014-02-05 | 北京航空航天大学 | 一种key与value分开存储的key-value存储系统设计方法 |
CN104572983A (zh) * | 2014-12-31 | 2015-04-29 | 北京锐安科技有限公司 | 基于内存的散列表的构建方法、文本查找方法及相应装置 |
CN106575306A (zh) * | 2014-08-29 | 2017-04-19 | Netapp股份有限公司 | 用于在非易失性存储器上存留数据以用于快速更新和瞬时恢复的方法及其设备 |
CN106598730A (zh) * | 2016-11-24 | 2017-04-26 | 上海交通大学 | 基于非易失性内存的可在线恢复对象分配器设计方法 |
-
2017
- 2017-09-15 CN CN201710834389.3A patent/CN107728937B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103558992A (zh) * | 2011-02-24 | 2014-02-05 | 泰若考特股份有限公司 | 堆外直接内存数据存储器,创建和/或管理堆外直接内存数据存储器的方法,和/或包括堆外直接内存数据存储器的系统 |
CN103392207A (zh) * | 2011-10-05 | 2013-11-13 | Lsi公司 | 非易失性存储的自身日志记录和层级一致性 |
CN103559027A (zh) * | 2013-10-22 | 2014-02-05 | 北京航空航天大学 | 一种key与value分开存储的key-value存储系统设计方法 |
CN106575306A (zh) * | 2014-08-29 | 2017-04-19 | Netapp股份有限公司 | 用于在非易失性存储器上存留数据以用于快速更新和瞬时恢复的方法及其设备 |
CN104572983A (zh) * | 2014-12-31 | 2015-04-29 | 北京锐安科技有限公司 | 基于内存的散列表的构建方法、文本查找方法及相应装置 |
CN106598730A (zh) * | 2016-11-24 | 2017-04-26 | 上海交通大学 | 基于非易失性内存的可在线恢复对象分配器设计方法 |
Non-Patent Citations (1)
Title |
---|
HMVFS: A Hybrid Memory Versioning File System;Shengan Zheng,et al;《2016 32nd Symposium on Mass Storage Systems and Technologies (MSST)》;20170413;第1-14页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107728937A (zh) | 2018-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107728937B (zh) | 一种使用非易失性内存介质的键值对持久存储方法及系统 | |
US10983955B2 (en) | Data unit cloning in memory-based file systems | |
US9342256B2 (en) | Epoch based storage management for a storage device | |
US20200250091A1 (en) | Access request processing method and apparatus, and computer device | |
US10468077B2 (en) | Adaptive object buffering and meta-data indexing using persistent memory to improve flash memory durability in tiered storage | |
CN105843551B (zh) | 高性能和大容量储存重复删除中的数据完整性和损耗电阻 | |
CN111221776B (zh) | 面向非易失性内存的文件系统的实现方法、系统及介质 | |
JP5683023B2 (ja) | 不揮発性一時データの処理 | |
US9645739B2 (en) | Host-managed non-volatile memory | |
TWI596541B (zh) | 資料存取系統、資料存取裝置及資料存取方法 | |
US11030092B2 (en) | Access request processing method and apparatus, and computer system | |
CN109165321B (zh) | 一种基于非易失内存的一致性哈希表构建方法和系统 | |
CN109219797A (zh) | 用于格式化持久性存储器文件的技术 | |
CN104575595A (zh) | 非易失性随机存取的存储装置 | |
CN105608016A (zh) | Dram与mram结合的固态硬盘及使用mram的存储卡 | |
CN103365926A (zh) | 在文件系统中用于保存快照的方法和装置 | |
US20060277221A1 (en) | Transactional file system with client partitioning | |
CN103942301A (zh) | 一种面向多数据类型访问应用的分布式文件系统 | |
Choi et al. | Hil: A framework for compositional ftl development and provably-correct crash recovery | |
CN114115711B (zh) | 基于非易失内存文件系统的快速缓存系统 | |
US11093169B1 (en) | Lockless metadata binary tree access | |
CN104268005B (zh) | 虚拟机唤醒方法和装置 | |
KR20220088274A (ko) | 코어별 저널 구조를 포함하는 컴퓨팅 시스템 | |
CN111435331A (zh) | 存储卷写数据方法、装置、电子设备及机器可读存储介质 | |
KR101744401B1 (ko) | 컴퓨팅 장치의 시스템 상태 저장, 복원방법 및 이를 위한 컴퓨팅 장치 |
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 |