CN110678836B - 用于键值存储的持久性存储器 - Google Patents
用于键值存储的持久性存储器 Download PDFInfo
- Publication number
- CN110678836B CN110678836B CN201880025961.4A CN201880025961A CN110678836B CN 110678836 B CN110678836 B CN 110678836B CN 201880025961 A CN201880025961 A CN 201880025961A CN 110678836 B CN110678836 B CN 110678836B
- Authority
- CN
- China
- Prior art keywords
- key
- storage medium
- persistent storage
- page
- value
- 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
- 238000003860 storage Methods 0.000 title claims abstract description 196
- 230000002085 persistent effect Effects 0.000 title claims abstract description 180
- 230000015654 memory Effects 0.000 title claims abstract description 75
- 230000002688 persistence Effects 0.000 claims abstract description 10
- 238000000034 method Methods 0.000 claims description 92
- 239000000523 sample Substances 0.000 claims description 30
- 230000004044 response Effects 0.000 claims description 9
- 230000008569 process Effects 0.000 description 76
- 230000006870 function Effects 0.000 description 19
- 238000011065 in-situ storage Methods 0.000 description 12
- 238000013507 mapping Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 8
- 241000282326 Felis catus Species 0.000 description 7
- 238000007906 compression Methods 0.000 description 5
- 230000003321 amplification Effects 0.000 description 4
- 238000012217 deletion Methods 0.000 description 4
- 230000037430 deletion Effects 0.000 description 4
- 238000003199 nucleic acid amplification method Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000000717 retained effect Effects 0.000 description 4
- 230000006835 compression Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000013519 translation Methods 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 238000011066 ex-situ storage Methods 0.000 description 2
- 235000019580 granularity Nutrition 0.000 description 2
- 230000002730 additional effect Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002028 premature Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000004557 technical material Substances 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
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/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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
- G06F12/1018—Address translation using page tables, e.g. page table structures involving hashing techniques, e.g. inverted page tables
-
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1847—File system types specifically adapted to static storage, e.g. adapted to flash memory or SSD
-
- 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
-
- 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/0608—Saving storage space on storage systems
-
- 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
-
- 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/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/065—Replication 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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1466—Key-lock mechanism
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1052—Security improvement
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7201—Logical to physical mapping or translation of blocks or pages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/72—Details relating to flash memory management
- G06F2212/7205—Cleaning, compaction, garbage collection, erase control
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
公开了使用持久性存储器来进行键值存储,包括:接收包括键和相应的值的放置键操作;使用至少部分地基于键确定的物理地址来将键直接存储到持久性存储介质,其中,持久存储介质支持存储器持久性和原位更新;将值直接存储到持久存储介质;接收包括键的获取键操作;以及使用至少部分地基于键确定的物理地址来直接访问持久存储介质以检索与键对应的值。
Description
背景技术
在传统存储器/存储分层结构上运行的现有键值数据库遭受显著的低效率。例如,传统的存储器/存储分层结构包括动态随机存取存储器(DRAM)和固态驱动器(SSD)和/或硬盘驱动器(HDD)的组合。来自应用的键值数据在它到达存储介质之前经过长的路径,并且每次访问都会产生多个磁盘I/O。
在将键值数据存储在传统存储器/存储分层结构中的一些示例处理中,键值记录在它们通过“压缩”处理写入磁盘文件之前首先存储在存储器数据结构中。为了改善响应时间,磁盘文件被组织成具有不同大小的多个级别(例如,级别0到级别3),最频繁(和最近)使用的记录最初存储在级别0中。当一个级别的文件填满时,所述文件的数据还通过压缩处理移动到下一级别。因此,查找键可能涉及跨多个级别读取多个文件。此外,一些数据在多个级别之间重复,因此浪费了一些存储空间。由于这些问题,传统的键值存储技术遭受高开销、高读/写放大和空间放大(浪费的空间)。
附图说明
在以下详细描述和附图中公开了本发明的各种实施例。
图1是示出存储在键值数据库中的各种示例键值对的图。
图2是示出传统键值存储方案的图。
图3是用于键值存储的持久性存储器的***的实施例的图。
图4A是示出用于将接收到的键值对存储在用于键值存储的持久性存储器中的处理的实施例的流程图。
图4B是示出在用于键值存储的持久性存储器处检索存储的与接收到的键相对应的值的处理的实施例的流程图。
图4C是示出用于使用持久性存储器进行键值存储的处理的实施例的流程图。
图5是示出用于维护页面使用数据结构的处理的实施例的流程图。
图6A示出了存储的用于键页面的示例元数据。
图6B示出了存储的用于值页面示例元数据。
图7是示出用于在KVPM中存储新键值对的处理的实施例的流程图。
图8是示出用于对存储的键执行原位更新的处理的实施例的流程图。
图9是示出用于对存储的键执行异地更新的处理的实施例的流程图。
图10是示出用于执行放置键操作的处理的示例的流程图。
图11示出了使用放置键操作来将新键值对存储在KVPM的页面中的结果的示例。
图12示出了在原位更新模式中使用放置键操作来将先前存储的键的新值存储在KVPM的页面中的结果的示例。
图13示出了在异地更新模式中使用放置键操作来将先前存储的键的新值存储在KVPM的页面中的结果的示例。
图14是示出释放对应于存储的键的值的快照版本的实施例的流程图。
图15示出了与存储与键对应的值的各种版本相关联的值页面和键页面之间的指针的示例。
图16示出了释放与键对应的值的快照版本的示例。
图17是示出用于从KVPM检索对应于键的存储值的处理的实施例的流程图。
图18是示出用于执行获取键操作的处理的示例的流程图。
图19示出了使用获取键操作来从KVPM的页面检索对应于给定键的存储值的结果的示例。
具体实施方式
本发明可以以多种方式实施,包括作为处理;装置;***;事务的组成;包含在计算机可读存储介质上的计算机程序产品;和/或处理器,诸如被配置为执行存储在连接到处理器的存储器上和/或由连接到处理器的存储器提供的指令的该处理器。在本说明书中,这些实现或本发明可以采用的任何其他形式可以称为技术。通常,可以在本发明的范围内改变所公开的处理的步骤的顺序。除非另有说明,否则诸如处理器或存储器这样的被描述成被配置为执行任务的组件可以被实现为临时配置为在给定时间执行任务的通用组件或者被制造为执行任务的特定组件。如这里所使用的,术语“处理器”是指被配置为处理数据(诸如计算机程序指令)的一个或更多个设备、电路和/或处理核。
下面提供本发明的一个或更多个实施例的详细描述以及说明本发明的原理的附图。结合这些实施例描述了本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求限定,并且本发明包括许多替换、修改和等同物。在以下描述中阐述了许多具体细节,以便提供对本发明的透彻理解。提供这些细节是出于示例的目的,并且可以在没有这些具体细节中的一些或全部的情况下根据权利要求来实践本发明。为了清楚起见,没有详细地描述与本发明相关的技术领域中已知的技术材料,使得不会不必要地模糊本发明。
图1是示出存储在键值数据库中的各种示例键值对的图。键值可以由键值数据库存储。键值数据库软件的示例包括NoSQL数据库,诸如和/>每个值对象对应于键存储,并且可以使用唯一标识该对象的键从数据库中检索值对象。参照图1中所示的键值对,键“Key1”可以用于获得值“111,222,333”。类似地,键“Key2”可以用于获得值“ABC,DEF,123”等。
键值存储广泛用于云计算、web应用和企业应用。例如,后端存储引擎可以将键值存储用于其他类型的存储。例如,键值存储可以用于存储项目的元数据。在特定示例中,键可以是书的国际标准书号(ISBN)、并且相应的值可以包括书的作者、书的标题和书的出版商。存在许多其他用途。
图2是示出传统键值存储方案的图。如下所述,在传统的键值存储方案中,从应用202发送的键值数据在到达存储介质(NAND闪存212)之前经过长的路径并且每次访问键对应的值发生多个磁盘I/O。
以为例:从应用202发送的要存储在NAND闪存212中的键值对首先存储在存储器内数据结构204中,并在压缩处理中写入文件***206中的文件内的各种级别的文件。在图2的示例中,键值数据首先写入级别为0的静态分类表(SST)文件。当Level-0 SST文件填满时,键值数据被压缩至(更大的)Level-1 SST文件,依此类推。由于键值数据跨不同的级别存储,因此查找与键对应的值可能涉及跨多个级别的文件的多次读取。
一旦键值数据填满最后一级SST文件,就通过使用块设备驱动器208将它们转换为常规磁盘I/O,以将一组键值数据的逻辑块地址(LBA)转换为NAND闪存212中的相应的物理块地址(PBA)。因此,闪存转换层(FTL)和垃圾收集210被配置为在内部维护大的逻辑到物理映射表。例如,闪存转换层(FTL)和垃圾收集210可以被配置为单独的FTL和垃圾收集模块。在被写入NAND闪存212之前,I/O命令将经历若干诸如FTL和垃圾收集210这样的固件模块。
由于沿着如图2所描述的I/O路径的这些低效率,传统的基于SSD的键值存储遭受高开销和显著的读/写放大。由于一些数据在多个级别的SST文件之间重复,因此会浪费一些存储空间。
此外,NAND闪存存储器(例如,NAND闪存212)的附加属性导致对NAND闪存存储器的读取和写入效率低。这种低效率中的第一个是由于NAND闪存存储器不能执行先前写入的页面的重写(overwrite)(即,原位更新)。由于NAND闪存存储器不支持原位更新,因此只能将数据写入已擦除的页面。由于这些限制,基于闪存的SSD的数据是间接的。间接数据意指必须首先将从主计算机接收的LBA映射到驱动器上的相应PBA。存储控制器使用FTL来管理此LBA→PBA映射。因此,FTL需要在FTL中维护逻辑到物理映射表,以便从主计算机提供读取命令。随着NAND闪存存储的容量增加,逻辑到物理映射表的大小也会增加。例如,1TB的用户容量通常需要1GB的DRAM来保存逻辑到物理映射表。这对NAND闪存存储器具有挑战性,因为逻辑到物理映射表的使用增加了功耗和成本。
NAND闪存存储器的另一低效率是要求仅将数据写入已擦除的页面。在NAND闪存存储器中,数据只能写入“干净的”(即,已擦除的)页面。NAND闪存存储器中的数据以页面为单位(通常为4KB大)读取或写入。页面以擦除块(EB)为单位进行擦除,通常为128KB或256KB。如果EB包含有用的数据,则数据必须在擦除EB之前迁移,以避免任何数据丢失。当从主计算机提供写入命令时,存储控制器总是将数据写入“干净的”(已擦除的)页面并在FTL中将重写的页面标记“无效”。此处理不断消耗干净的页面。因此,存储控制器必须回收后台中无效的页面所占用的空间,使得驱动器不会耗尽干净的页面。此后台处理称为“垃圾回收”(GC)。在典型的GC操作期间,存储控制器选择一些EB,移动它们中的所有有效页面以清理页面,然后擦除这些原始EB以生成干净的页面。GC处理还负责在驱动器容量之间分配P/E周期,以实现NAND闪存存储器的预期使用寿命并避免过早磨损一些页面。
持久性存储器的存储器和存储特性的组合在软件/硬件优化中开辟了新的机会,实现了诸如存储器数据库、存储器计算和快速故障恢复的新使用场景。持久性存储器具有避免与传统的基于SSD的键值存储相关的一些低效率的属性。本文描述了使用持久性存储器进行键值存储的实施例。在各种实施例中,键值存储在持久性存储器中实现。在各种实施例中,“持久性存储器”是指具有低时延、高耐久性、支持原位更新、用于随机访问(具有与顺序访问类似的性能)的存储类型,并且是非易失性的(例如,在与持久性存储器关联的计算设备关闭的情况下,持久性存储器上存储的数据不会丢失)。因此,持久性存储器提供存储器和持久性存储器两者的优点。持久存储介质的示例包括相变存储器、ReRAM和STT-RAM。如下面将进一步详细描述的,在各种实施例中,使用持久性存储器进行键值存储允许键值对的原位更新以及对对持久性存储器的直接访问。
图3是具有用于键值存储的持久性存储器的***的实施例的图。在该示例中,应用302(例如,)被配置为向键值持久性存储器(KVPM)304提供键值存储操作。在各种实施例中,由应用302提供的键值存储操作包括与存储给定键值对相关联的“放置键”操作、与请求给定键的对应值相关联的“获取键”操作或者用于访问或修改键值对的任何其他适当操作。在一些实施例中,放置键操作可用于存储新的键值对或更新先前存储的键的新值。
在KVPM 304的KVPM接口306处接收由应用302发送的键值存储操作。在各种实施例中,KVPM接口306被配置为基于来自自应用302的接收(例如,放置键或获取键)操作的给定键确定与持久存储介质310内的页面相关联的物理地址。在一些实施例中,KVPM接口306将操作的给定键映射到与持久存储介质310内的页面相关联的物理地址。例如,持久存储介质310包括相变存储器、ReRAM和/或SST-RAM。例如,KVPM接口306可以使用运行软件和/或固件的硬件、作为专用集成电路(ASIC)、作为软件或执行KVPM代码的其他适当设备来实现。与KVPM接口306已映射给定键的持久存储介质310内的页面相关联的物理地址是将存储和/或应存储与操作相关联的键的页面,这取决于所接收的操作分别是放置键或获取键。介质管理器308被配置为使用物理地址来完成操作。在一些实施例中,使用处理器、固件和/或控制器来实现介质管理器308。在一些实施例中,介质管理器308被配置为对从持久存储介质310检索的值执行纠错。
如下面将进一步详细描述的,KVPM 304的介质管理器308直接处理从应用302接收的键和值。在各种实施例中,“直接”处理从应用302接收的键和值是指向持久存储介质310写入和从持久存储介质310读取(访问),而不执行逻辑到物理地址映射。相反,KVPM 304使用操作的给定键来确定持久存储介质310中的页面,在/从该存储器介质310完成操作。此外,KVPM 304中的访问表现出比由NAND闪存存储器实现的传统键值存储器更短的I/O路径和更低的开销。由于持久存储介质310是非易失性的,因此不需要存储器表和多级SST文件之间的压缩。也不存在复杂的FTL或垃圾收集,因为没有使用逻辑到物理映射,并且持久存储介质310也允许原位更新。
虽然未在***300中示出,但是应用302可以可选地在易失性存储器(DRAM)中应用高速缓存以保持频繁访问的数据(例如,频繁访问的键值对)。应用302还可以在DRAM中保持索引数据和Bloom过滤器以进一步加速访问。
图4A是示出用于将键值对存储在用于键值存储的持久性存储器中的处理的实施例的流程图。在一些实施例中,处理400在诸如图3的KVPM 304这样的KVPM处实现。
在402处,接收包括键和对应值的放置键操作。在各种实施例中,放置键操作包括存储包括在放置键操作中的键值对的请求。例如,从应用接收放置键操作。
例如,放置键由用于管理包括书籍ISBN(键)和书名(值)的键值对的数据库应用提供。例如,应用在放置键操作中提供的键值对是“0743273567-The Great Gatsby”。
在404处,使用至少部分地基于键确定的物理地址来将键直接存储在持久存储介质中,其中,持久存储介质支持存储器持久性和原位更新。在各种实施例中,使用哈希函数来将来自诸如放置键操作这样的操作的键直接映射到KVPM的持久存储介质的页面。例如,哈希函数将键的至少一部分映射到持久存储介质处的物理地址,在该物理地址处可能存储放置键操作的键。
以下是将键映射到持久存储介质中的物理地址的示例公式:
Keyaddress=(Hash(Key)%NumOfPages)*PageSize (1)
其中,Keyaddress是持久存储介质中可能存储操作中包含的键的内存页面的物理地址,Hash()是将键映射到固定长度值的哈希函数,NumOfPages是持久存储介质的可用容量中的页面的总数,而PageSize是每个内存页面的大小(以字节为单位)。Keyaddress与KVPM中的页面边界对齐。Hash()的示例是Jenkins哈希函数。
公式(1)仅是与能够用于将操作的键映射到持久存储介质中的页面的物理地址的哈希技术相关联的一个示例等式,并且在实践中可以使用其他映射技术。
放置键操作的键存储在持久存储介质中的与Keyaddress相关联的页面中,除非确定页面已经存储了另一个不同的键。在这种情况下,发生了哈希冲突,其中两个或更多个键已被映射到持久存储介质中的同一地址。在一些实施例中,当发生哈希冲突时,使用“开放寻址”策略。当键的哈希到页面不可用时(例如,因为它已经存储了另一个键),在一些实施例中,使用探测序列来查找持久存储介质中的可用页面。在各种实施例中,“探测序列”是指持久存储介质中的下一页面的选择技术,以检查存储键的可用性。例如,探测序列可以指示检查持久存储介质中的页面,该页面是与所讨论的当前页面相距一定数量的页面(例如,五页)。为了减少重复冲突和聚类,在一些实施例中,使用双重哈希来导出探测序列——每次探测序列向前迈进的间隔是从另一个独立哈希函数计算出的。遵循探测序列以识别持久存储介质中的可用页面,直到找到这样的页面或者达到找到这样的页面的最大尝试次数为止。
返回到前一示例,一旦确定KVPM中的可用页面用来存储放置键操作的键,则“0743273567”的ISBN(键)将被存储在该页面中。
在确定持久存储介质中的页面已经存储了放置键操作的给定键的情况下,确定放置键操作与用新值更新先前存储的键值对相关联。在各种实施例中,可以在持久存储介质处执行原位执行(例如,重写先前值)更新或异地(例如,不重写先前值)更新,如将在下面进一步详细描述的。
在406处,将值直接存储在持久存储介质中。在将键存储在持久存储介质中的页面中之后,将与键对应的值存储在持久存储介质中的一个或更多个其他页面中。如果该值太大而不能存储在持久存储介质中的一个页面中,则该值被存储在持久存储介质中的多个页面(不一定是连续的页面)上。在一些实施例中,可以使用任何适当的技术来选择存储值的页面,只要它们是空闲的/不用于存储其他数据即可。例如,可以线性地搜索键页面附近的页面,直到找到用于存储该值的空闲页面为止。在另一示例中,选择KVPM中的随机页面,直到找到用于存储该值的空闲页面为止。
在各种实施例中,存储键的页面(有时被称为“键页面”)链接到存储与所述键对应的值的第一页面(有时被称为第一“值页面”)。在一些实施例中,通过将指向第一值页面的指针存储在持久存储介质中的键页面的元数据部分中,将键页面链接到第一值页面。在一些实施例中,指向页面的指针包括页面的物理地址。在各种实施例中,持久存储介质中的页面的元数据部分是页面的带外(OOB)空间。在各种实施例中,持久存储介质中的页面的OOB空间是该页面的除了用于存储用户数据的部分之外的部分,并且仅在内部对KVPM可见。存储该值的页面还通过在持久存储介质中的值页面的元数据部分(例如,OOB空间)中存储从一个值页面到另一个值页面的指针而链接在一起。与存储值相关联的一系列链接值页面有时被称为“值页面链”。
返回到先前示例,对应于ISBN(键)“0743273567”的“The Great Gatsby”的标题(值)将被跨一个或更多个分配的值页面存储。存储“0743273567”的键页面将包含指向存储“The Great Gatsby”的值页面链的至少第一值页面的指针。存储“The Great Gatsby”的一部分的每个值页面还将包括指向链的下一个值页面的指针,如果有的话。
图4B是示出用于在用于键值存储的持久性存储器中检索存储的与接收到的键相对应的值的处理的实施例的流程图。在一些实施例中,处理410在诸如图3中的KVPM 304这样的KVPM处实现。
在412处,接收包括键的获取键操作。有时,在将放置键操作的键值对存储在持久存储介质之后(例如,使用诸如图4A的处理400的处理),与检索对应于存储的键值对的存储值相关联的获取键操作被接收。获取键操作包括请求相应值的键。
例如,从用于管理包括书籍ISBN(键)和书名(值)的键值对的应用接收获取键操作。例如,为了检索对应于“0743273567”的ISBN(键)的书名(值),该键由应用在获取键操作中提供。
在414处,使用物理地址直接访问持久存储介质,所述物理地址至少部分地基于所述键来确定,以返回与所述键相对应的存储值,其中,所述持久存储介质支持存储器持久性和原位存储更新。在各种实施例中,获取键操作的给定键被映射到期望存储键的持久存储介质中的相同物理地址。在各种实施例中,用于存储(例如,完成放置键操作)键操作的相同哈希函数用于执行获取键操作。
例如,如果上面的公式(1)用于在放置键操作中将键存储在持久存储介质中,则上面的公式(1)也用于读取对应于获取键操作的给定键的存储值。与上面的描述类似,如果给定键被哈希到的物理地址处的页面不存储给定键,则使用用于解决放置键操作的哈希冲突的相同探测序列,来搜索为获取键操作存储给定键的正确页面。一旦识别出键页面,则指向存储在键页面中的第一个值页面的指针用于定位持久存储介质中的第一个值页面。第一个值页面还包括指向下一个值页面的指针(如果存在),依此类推。这样,可以从应用的一个或更多个值页面的链中检索对应于获取键操作的给定键的值。
返回前一示例,一旦确定了用于存储ISBN(键)“0743273567”的KVPM中的键页面,则存储在键页面中的指向存储相应值的第一值页面的指针用于定位第一个值页面。从第一个值页面读取值的一部分(“The Great Gatsby”),并且存储在指向链中的下一个值页面的每个值页面中的指针用于定位每个后续值页面(如果存在),直到检索到“The GreatGatsby”的完整值为止。
图4C是示出用于使用持久性存储器进行键值存储的处理的实施例的流程图。在一些实施例中,处理420在KVPM(例如图3的KVPM 304)处实现。
在422处,接收包括键和对应值的放置键操作。
在424处,使用至少部分地基于键确定的物理地址来将键直接存储在持久存储介质中,其中,持久存储介质支持存储器持久性和原位更新。
在426处,将值直接存储在持久存储介质中。
在428处,接收包括键的获取键操作。
在430处,使用至少部分地基于键确定的物理地址来直接访问持久存储介质,以返回与键对应的存储值。
图5是示出用于维护页面使用数据结构的处理的实施例的流程图。在一些实施例中,在图3的KVPM 304处实现处理500。
处理500描述了维护数据结构的示例处理,该数据结构在运行时期间跟踪KVPM的哪些存储页面被使用或未使用/空闲。
在502处,在启动时在KVPM处生成页面使用数据结构。在KVPM的启动时,扫描KVPM的存储页面以确定使用/不能分配哪些页面(例如,已经使用要保留的数据写入)以及哪些页面是空闲/未使用/可以被分配(例如,尚未写入和/或已被写入但不需保留的数据)。例如,要保留在页面中的数据是应用未请求要删除/释放的数据,而不要保留的数据是应用请求要删除/释放的数据。在一些实施例中,页面的使用或未使用状态至少部分地基于扫描该页面的元数据字段(例如,OOB空间中的页面类型字段)来确定。在一些实施例中,页面使用数据结构包括存储在DRAM中的位图,其中,每个存储页面在位图中具有指示页面是否空闲并因此可用于新写入(例如,新键或新值)或者不能用于写入的相应位。
在504处,响应于在运行时期间KVPM中的页面分配的更新,更新页面使用数据结构。在运行时期间,当新的键值对被写入KVPM的页面并从KVPM的页面释放时,页面使用数据结构被连续/动态地更新以跟踪当前未使用或使用的页面,如下面将进一步详细描述的。
图6A示出了为键页面存储的示例元数据。图6B示出了为值页面存储的示例元数据。在各种实施例中,为每个键页面存储的元数据(如上所述,键页面是KVPM中的存储键的页面)和为每个值页面存储的元数据(如上所述,值页面是KVPM中的存储与键相对应的值的至少一部分的页面)存储在页面的相应OOB空间中。
如图6A所示,存储在键页面中的示例元数据包括以下内容:
页面类型字段:该字段被设置为“键页面”以指示这是键页面。
指向当前值页面链的指针:该字段包括指向KVPM中的存储对应于键的值的(例如,第一)值页面(的例如物理地址)的指针。
快照计数:该字段包括与该键值记录存在多少快照版本值相关联的值。每次创建快照版本(即,执行具有异地模式的更新)时该计数器递增,并且当释放快照版本时递减(例如,快照版本被标记为删除)。下面更详细地描述快照版本的细节。
删除标志:该字段指示键值记录是否被标记为从KVPM删除。在一些实施例中,如果仍有未发布的快照版本(即,快照计数不为零),则延迟删除。一旦键值的所有快照版本被释放,就删除键值记录,并清空/释放所有页面。
统计信息:该字段存储统计信息以跟踪键值记录的使用。例如,该字段可以存储键值记录的读/写计数。
如图6B所示,存储在值页面中的示例元数据包括以下内容:
页面类型字段:该字段被设置为“值页面”以指示这是值页面。
值页面链的版本号:该字段包括存储在当前值页面中的值的版本号。该字段中的值由主机指配。例如,版本号可以为值的当前版本指示“当前”或指示与和值相关联的快照版本相关联的数值。
指向链中的下一个值页面的指针:如果当前值页面是值页面链的最后一页,则该字段存储被设置为无效地址的指针。
指向值页面链的先前版本的指针:如果不存在值的先前版本,则该字段存储空指针。此字段仅存储值页面的数据,该值页面是值页面链的第一页面。
返回指针:对于值页面链中的第一页面,该字段包括指向返回键页面的指针。对于值页面链中的除第一页面以外的页面,此字段包含指向返回链中的先前页面的指针。
对于未使用的(空闲的)页面,其“页面类型”字段被设置为“未使用”,其中所有其他元数据字段被重置为预定义的“重置”状态。
图7是示出用于在KVPM中存储新键值对的处理的实施例的流程图。在一些实施例中,处理700在图3的KVPM 304处实现。在一些实施例中,图4A的处理400或图4C的处理420的步骤422-426至少部分地使用处理700来实现。
在702处,接收包括键和对应值的放置键操作。例如,从应用接收放置键操作。在处理700中,接收的放置键操作被配置为在KVPM处存储新的给定键值对。
在704处,至少部分地基于键来确定KVPM的物理地址。在各种实施例中,包括哈希函数(例如,上面的公式(1))的公式用于基于键的至少一部分来计算KVPM的物理地址。
在706处,将键存储在与KVPM的物理地址相关联的页面中。首先检查KVPM中的与由哈希函数确定的物理地址相关联的页面是否未使用/空闲。例如,可以通过检查其“页面类型”字段来确定页面是否未被使用或使用,如上面图6A和图6B所述。例如,如果页面类型字段指示“未使用”,则页面是空闲的;但是,如果页面类型字段指示除“未使用”之外的值(例如,“值页面”,“键页面”),则使用该页面。如果使用页面,则在一些实施例中可能发生哈希冲突并且可以使用预定的探测序列来确定另一个未使用的页面。在各种实施例中,预定探测序列可以包括用于选择要检查页面类型(例如,使用或未使用)的下一页面(例如,相对于所确定的当前页面)的任何技术。一旦相对于由哈希函数确定的物理地址确定未使用的页面,则将键存储在该页面中。在各种实施例中,更新存储在键页面的OOB空间中的元数据,使得页面字段类型是“键页面”。
在一些实施例中,可以将多于一个键存储在KVPM的单个页面处(例如,基于KVPM的用户配置)。因此,在一些实施例中,在与由哈希函数确定的物理地址相关联的KVPM的页面已经包括一个或更多个现有键的情况下,新键仍将存储在该页面处。对应于页面的每个键的元数据将存储在该页面的OOB空间中。然而,出于说明的目的,除非另有说明,否则页面被配置为在本文描述的实施例中存储一个键。
在708处,将与键对应的值存储在KVPM的一个或更多个页面的集合中。确定该值是否需要存储在KVPM的单个页面中或多于一个页面中。例如,KVPM中的页面可以存储最多4KB的用户数据,因此存储该值所需的页面的总数将是该值的大小除以4KB。在一些实施例中,用户可以配置对可以分配KVPM的哪组未使用页面(例如,与特定地址范围相关联的页面)的限制以用于存储键。根据对这些值页面的任何限制来分配存储该值所需的未使用页面的数量,然后用于存储与该键对应的值。在各种实施例中,用于存储与键对应的值的页面无需是连续的。在各种实施例中,分配值页面包括使用页面使用数据结构来确定未使用的页面并将确定的未使用页面的页面类型字段设置为“值页面”。
在710处,存储键页面与对应的一个或更多个值页面的集合之间的关联数据。在各种实施例中,键页面和值页面之间的指针存储在页面的OOB空间中存储的元数据中。具体地,在一些实施例中,作为值页面链的(第一)页面的KVPM中的页面的物理地址存储在页面的OOB空间中(例如,在图6A中的键页面中的“指向当前值页面链的指针”字段中)。在一些实施例中,作为值页面链的下一页面(如果有的话)的KVPM中的页面的物理地址存储在OOB空间中(例如,在图6B中的值页面的“指向链中的下一个值页面的指针”字段中)。在一些实施例中,作为值页面链的先前页面(如果有的话)的KVPM中的页面的物理地址存储在值页面链的除第一页面以外的值页面的OOB空间中(例如,在图6B中的值页面的“返回指针”字段中)。在一些实施例中,作为键页面的KVPM中的页面的物理地址存储在值页面链的第一值页面的OOB空间中(例如,在图6B中的值页面的“返回指针”字段中)。在一些实施例中,指示值页面链是对应于该键的值的当前版本的值页面链的版本号存储在值页面链的每个值页面的OOB空间中(例如,在图6B中的值页面的“值页面链的版本号”字段中)。
在712处,更新跟踪页面分配的页面使用数据结构。更新页面使用数据结构以指示现在使用与存储键值对的键和值相关联的页面。
在各种实施例中,当存储的键的先前值被更新为新值时,KVPM支持原位更新模式和异地更新模式二者。
当使用原位更新时,用于存储对应于存储的键的先前值的页面的至少一部分被存储的键的新/更新值覆盖。如果需要较少的页面来存储所存储的键的新/更新值,则释放附加值页面(例如,设置为未使用,使得可以为新写入分配它们)。例如,当不需要或不希望保留对应于键的值的先前版本时,可能需要原位更新。图8是原位更新的示例流程。
当使用异地更新时,分配新值页面以存储所存储的键的值的当前版本,并且存储对应于该键的先前值的值页面变为先前版本。先前的值有时被称为“快照版本”。例如,如果主机因任何原因请求恢复该值的先前版本,则可以保留先前值的快照。在特定示例中,主机可能希望在***更新之前创建与存储的键相对应的值的快照版本。在***更新不成功的情况下,可以恢复该值的快照版本以帮助在更新之前将***恢复到稳定状态。在生成值的快照版本之后,更新键页面以指向存储值的当前版本的新值页面。在存储值的当前版本的新值页面链中存储返回存储值的较旧的快照版本的值页面的指针,使得主机可以轻松访问以前的快照。图9是异地更新的示例流程。
例如,主机可以在运行时以及按键粒度动态地选择更新模式(例如,用于避免创建快照的原位模式和用于有意地创建快照的异地模式)。虽然原位模式更节省空间,因为它重用以前的值页面并避免创建快照版本,但是当将新值写入KVPM以获取键时,过去的值状态将丢失。虽然异地模式的空间效率较低,因为每次将新值写入KVPM以获取键时,它会创建过去值的快照,但是过去的值状态会保留并可以恢复,如果需要出现。在一些实施例中,可以通过设置与更新模式相关联的全局变量的值来设置更新模式。这允许主机按需创建细粒度快照。例如,主机可以在执行关键更新之前启用关于相关键/值记录的异地更新,并在不需要快照时切换到原位更新模式。这不仅提供了更大的灵活性,而且减少了由未使用/不必要的快照副本造成的空间浪费。
图8是示出用于对存储的键执行原位更新的处理的实施例的流程图。在一些实施例中,处理800在图3的KVPM 304处实现。在一些实施例中,图4A的处理400至少部分或图4C的处理420的步骤422-426使用处理800来实现。
在802处,接收包括键和对应的新值的放置键操作。例如,从应用接收放置键操作。在处理800中,所接收的放置键操作被配置为原位存储与KVPM处的先前存储的键相对应的新值。
在804处,至少部分地基于键来确定KVPM的物理地址。在各种实施例中,包括哈希函数(例如,上面的公式(1))的公式用于基于键的至少一部分来计算KVPM的物理地址。首先检查KVPM中的与由哈希函数确定的物理地址相关联的页面是否包含放置键操作中包括的键。在一些实施例中,预定探测序列用于选择下一页面以检查放置键操作中包括的键,直到找到适当的键页面为止。
在806处,使用键页面与和存储对应于该键的先前值相关联的一个或更多个值页面的对应集合之间的关联数据来识别一个或更多个值页面的对应集合。存储在所定位的键页面的OOB空间中的元数据(例如,指针)用于定位存储与键对应的值的先前版本的值页面。
在808处,通过重写一个或更多个值页面的对应集合中的至少一些来存储对应于键的新值。如同存储键的新值所需的许多已识别的值页面被新值覆盖。如果需要更多的值页面来存储与键相对应的新值,则分配额外的页面用于这样做。如果需要较少的值页面来存储对应于该键的新值,则释放剩余的值页面。
在810处,更新页面使用数据结构。页面使用数据结构被更新以指示现在使用与更新值相关联的附加页面或者释放的值页面现在未被使用。
图9是示出用于对存储的键执行异地更新的处理的实施例的流程图。在一些实施例中,处理900在图3的KVPM 304处实现。在一些实施例中,图4A的处理400的至少部分或图4C的处理420的步骤422-426使用处理900来实现。
在902处,接收包括键和对应的新值的放置键操作。例如,从应用接收放置键操作。在处理900中,所接收的放置键操作被配置为在KVPM处异地存储对应于先前存储的键的新值。
在904处,至少部分地基于键来确定KVPM的物理地址。在各种实施例中,包括哈希函数(例如,上面的公式(1))的公式用于基于键的至少一部分来计算KVPM的物理地址。首先检查KVPM中的与由哈希函数确定的物理地址相关联的页面是否包含放置键操作中包括的键。在一些实施例中,预定探测序列用于选择下一页面以检查放置键操作中包括的键,直到找到适当的键页面为止。
在906处,将对应于键的新值存储在KVPM的一个或更多个值页面的新集合中。确定新值是否需要存储在KVPM的单个页面中或多于一个页面中。在一些实施例中,用户可以配置对可以分配KVPM的哪组未使用页面(例如,与特定地址范围相关联的页面)的限制以用于存储键。根据对这些值页面的任何限制来分配存储新值所需的未使用页面的数量,然后用于存储与该键对应的新值。用于存储新值的值页面称为新值页面链。
在908处,存储键页面与一个或更多个值页面的新集合之间的关联数据。在一些实施例中,作为新值页面链的(第一)页面的KVPM中的页面的物理地址存储在键页面的OOB空间中(例如,在图6A中的键页面的“指向当前值页面链的指针”字段中)。在一些实施例中,作为新值页面链的下一页面(如果有的话)的KVPM中的页面的物理地址存储在新值页面链的值页面的OOB空间中(例如,在图6B中的值页面的“链中的下一个值页面的指针”字段中)。在一些实施例中,作为新值页面链的先前页面(如果有的话)的KVPM中的页面的物理地址存储在新值页面链的除第一页面以外的值页面的OOB空间中(例如,在图6B中的值页面的“返回指针”字段)。在一些实施例中,作为键页面的KVPM中的页面的物理地址存储在新值页面链的第一值页面的OOB空间中(例如,在图6B中的值页面的“返回指针”字段中)。在一些实施例中,指示值页面链是对应于键的值的当前版本的的新值页面链的版本号存储在新值页面链的每一个值页面的OOB空间中(例如,在图6B中的值页面的“值页面链的版本号”字段中)。
如下面将进一步详细描述的,对应于键的值的多个异地更新将导致与对应于键的值的不同快照版本相关联的值页面链的链接列表。
在910处,存储一个或更多个值页面的新集合与和存储对应于键的先前值相关联的一个或更多个值页面的先前集合之间的关联数据。在一些实施例中,存储对应于键的值的紧邻先前版本的先前页面链的(第一)值页面的KVPM中的页面的物理地址存储在于新值页面链的第一页面的OOB空间中(例如,在图6B中的值页面的“指向值页面链的先前版本的指针”字段中)。
在912处,更新跟踪页面分配的页面使用数据结构。更新页面使用数据结构以指示与存储新值相关联的页面现在被使用。
图10是示出用于执行放置键操作的处理的示例的流程图。在一些实施例中,处理1000在图3的KVPM 304处实现。在一些实施例中,图4A的处理400的至少部分或图4C的处理420的步骤422-426使用处理1000来实现。在一些实施例中,图7的处理700、图8的处理800和图9的处理900可以至少部分地使用处理1000来实现。
在1002处,接收键和对应值。在放置键操作中(例如,从应用)接收键和对应值。
在1004处,读取键的页面。例如,键的至少一部分可以被哈希到KVPM的物理地址。读取所述页面以确定键是否存储在该页面中。
在1006处,确定页面是否包括键。读取所确定的KVPM的物理地址以确定键是否存储在该页面中。如果键未存储在该页面中,则控制转移到1024。否则,如果键存储在该页面中,则确定将发生对先前存储的键的值的更新,并且控制转移到1008。
在1024处,确定页面是否空闲。如果检查键的页面不包含键并且也不是空闲的(例如,页面存储另一个键),则可能发生了哈希冲突,并且使用预定的探测序列来确定在KVPM中的要检查的下一页面。在1034处,确定是否已达到探测序列的最大尝试次数。在一些实施例中,可以建立探测序列的尝试次数的最大值(例如,五次尝试)以确定何时响应于放置键操作而返回失败消息。如果确定尚未达到探测序列的最大尝试次数,则在1032处检查下一个探测位置(例如,KVPM的下一页面)以获得键,然后控制返回到1004。如果确定已经达到探测序列的最大尝试次数,则处理1000结束,并且可选地将失败消息返回给从其接收到放置键操作的实体(例如,应用)。
如果检查键的页面不包括键但是空闲的,则控制转移到1026。
在1026处,为该值分配新页面。如同分配了存储该值所需的KVPM的许多页面。
在1028处,写入新的键页面。在1024处确定的空闲页面用放置键操作的键写入并成为新的键页面。
在1030处,写入新的值页面。1026的新分配的页用放置键操作的值写入,并成为新的值页面链。
在1008处,确定是否要执行原位更新或原位更新。可以使用各种机制来确定更新模式。例如,可以基于全局变量的值集来确定更新模式。在各种实施例中,可以以各种粒度(例如,在操作级别或在应用级别)设置更新模式。在要执行原位更新的情况下,控制转移到1010。否则,在要执行异地更新的情况下,控制转移到1016。
在1010处,如果需要,为新值分配附加页面。如果对应于该键的新值将需要比先前值多的页面存储,则将分配KVPM的一个或更多个附加页面。
在1012处,重写先前值页面中的至少一些。用于存储与键对应的值的先前版本的值页面中的至少一些被新值覆盖。
在1014处,释放先前值页面中未使用的页面。如果少于用于存储对应于键的值的先前版本的所有值页面未被重写,则释放它们(例如,标记为未使用,使得可以再次分配它们)。
在1016处,分配用于存储新值的新页面。如同存储与键对应的新值所需的许多新页面被分配。
在1018处,将新值写入新页面。
在1020处,将新页面链接到与存储对应于该键的先前值相关联的先前页面。指向存储新值的新页面(的第一页)的指针存储在存储先前值的先前页面的至少一页面中。
在1022处,将新页面链接到键页面。指向存储新值的新页面(的第一页)的指针存储在键页面中。指向键页面的指针存储在存储新值的新页面中的至少一个中。
图11、图12和图13描述了使用放置键操作存储在KVPM的页面中的键值对的示例。
图11示出了使用放置键操作在KVPM的页面中存储新键值对的结果的示例。在图11的示例中,(例如,从应用)接收用于存储新的键值对“Key1-dog,cat”的放置键操作。键“Key1”被哈希到KVPM的物理地址“012”。当检查与物理地址“012”相关联的KVPM中的页面是否空闲时,确定该页面已经用于存储“Key8”。因此,确定了哈希冲突并且在该实例中探测序列规定应该接下来检查相对于KVPM中的“012”处的当前页面向下的两个页面(“014”)的页面。接下来检查与物理地址“014”相关联的页面并确定其是空闲的,因此“Key1”存储在该页面中。确定需要两个页面来存储值“dog,cat”,因此分配两个未使用的页面用于存储“dog,cat”。在图11的示例中,物理地址“016”和“018”处的分配页面分别用于存储值的“dog”和“cat”部分。指向存储“dog”的页面(第一个值页面,物理地址“016”处的页面)的指针存储在键页面(物理地址“014”处的页面)中。指向存储“cat”的页面(第二个值页面,物理地址“018”处的页面)的指针存储在存储“dog”的页面(第一个值页面,物理地址“016”处的页面)中。分别存储“dog”和“cat”的物理地址“016”和“018”处的页面被称为值页面链。还可以更新页面使用数据结构以指示在物理地址“014”、“016”和“018”处的先前未使用的页面现在已被使用。
图12示出了使用放置键操作以在原位更新模式中将先前存储的键的新值存储在KVPM的页面中的结果的示例。在图11的键值对成功地存储在KVPM中之后,(例如,从应用)接收到包括键值对“Key1-owl”的另一个放置键操作。确定要基于适当的机制执行原位更新。键“Key1”再次被哈希到KVPM的物理地址“012”(使用在图11的示例中使用的相同哈希函数)。此外,当检查与物理地址“012”相关联的KVPM中的页面是否空闲时,确定该页面已经用于存储“Key8”。类似地,接着是在该示例中规定接下来应检查相对于KVPM中的“012”处的当前页面向下的两个页面(“014”处)的页面的探测序列。接下来检查与物理地址“014”相关联的页面,并确定该页面确实包括期望的键“Key1”。
假定要执行原位更新,则读取存储在物理地址“014”处的键页面中的指针并用于识别物理地址“016”处的第一键页面。存储新值“owl”只需要一个页面,所以仅物理地址“016”处的第一个键页面被新值“owl”覆盖。这样,物理地址“018”处的第二个键页面不再使用,并在页面使用数据结构中标记为未使用。此外,移除了先前存储在物理地址“016”(现在存储“owl”)的值页面处的物理地址“018”处的值页面的指针。
图13示出了使用放置键操作以在异地更新模式中将先前存储的键的新值存储在KVPM的页面中的结果的示例。在图11所示的键值对成功地存储在KVPM中之后,(例如,从应用)接收包括键值对“Key1-owl”的另一个放置键操作。确定要基于适当的机制执行异地更新。键“Key1”再次被哈希到KVPM的物理地址“012”(使用在图11的示例中使用的相同哈希函数)。此外,当检查与物理地址“012”相关联的KVPM中的页面是否空闲时,确定该页面已经用于存储“Key8”。类似地,接着是在该示例中规定接下来应检查相对于KVPM中的“012”处的当前页面向下的两个页面(“014”处)的页面的探测序列。接下来检查与物理地址“014”相关联的页面,并确定该页面确实包括期望的键“Key1”。
假定要执行异地更新,确定“owl”的新值仅需要一个页面,因此KVPM的一个未使用页面被分配以存储“owl”。在图13的示例中,先前未使用的物理地址“020”处的页面被分配用于存储“owl”。因为发生了异地更新,“owl”是与键“Key1”对应的值的当前版本,并且“dog,cat”现在是对应于仍然保持的键“Key1”的值的先前快照版本。指向存储“owl”(值的当前版本,物理地址“020”处的页面)的页面的指针存储在键页面中(物理地址“014”处的页面以替换指向存储“dog”的页面(第一个值页面,物理地址页面“016”)的指针)。此外,指向存储“dog”的页面(键的先前快照版本的第一个值页面,物理地址“016”处的页面)的指针存储在当前值页面(物理地址“020”处的页面)中。在图13的示例中,键“Key1”只有一个快照版本,所以它被称为“快照版本1”。
因为对应于键的值的每个快照版本指向该值的较早快照版本(如果有的话),所以对应于该键的值的快照版本形成KVPM中的链(例如,链接列表)。因此,释放快照版本类似于删除链接列表中的元素。例如,因为不再需要,所以可以选择由用户或应用释放快照版本。遍历对应于键的值的快照版本的链(链接列表),识别比即将发布的快照版本紧邻更新的快照版本(即,紧接在之后生成的快照版本),并且来自该识别的快照版本的指针被更新以指向比要发布的快照版本紧邻更旧的快照版本(即,紧接在之前生成的快照版本)。然后,释放已释放的快照版本占用的页面。下面的图14描述了释放所识别的快照版本的示例处理。
图14是示出释放对应于存储的键的值的快照版本的实施例的流程图。在一些实施例中,处理1400在图3的KVPM 304处实现。
在1402处,接收释放针对键的所识别的快照版本的请求。接收释放对应于键的值的所识别的快照版本的请求。例如,可以从应用接收请求。
在1406处,确定所识别的快照版本是否是最新的快照版本。在各种实施例中,最新的快照版本是紧邻较早(即,紧接在之前生成的快照版本)并且由存储与键对应的当前值的值页面链指向的值的版本。在1406处确定要释放的快照版本是否是紧邻较早以及由存储与键对应的当前值的值页面链指向的值的版本。
在所识别的快照版本是最新的快照版本的情况下,控制被转移到1416。在1416处,将与存储对应于键的当前值相关联的页面与和存储键的第二个最新的快照版本相关联的一组页面相关联的数据进行存储。假定要释放的快照版本是紧邻较早以及由存储与键对应的当前值的值页面链指向的值的版本,在当前值页面链中存储指向与存储比识别的快照版本紧邻更旧的快照版本相关联的值页面链的指针。
在1408处,确定用于包括相对于所识别的快照版本的键的紧邻更新的快照版本的键的第一快照版。确定紧邻更新(即,紧接在之后生成的快照版本)并指向所标识的快照版本。
在1410处,确定用于相对于所识别的快照版本的键的紧邻较旧的快照版本的键的第二快照版本。确定紧邻更旧并且由所识别的快照版本指向的快照版本。
在1412处,将与存储紧邻更新的快照版本有关的页面和与存储紧邻更旧的快照版本的有关的页面相关联的数据进行存储。将存储比所识别的快照版本紧邻更新的快照版本的值页面链中的页面更新为指向存储的比所识别的快照版本紧邻更旧的快照版本的值页面链。
在1414处,更新页面使用数据结构以释放与存储所识别的快照版本相关联的一个或更多个页面。
图15和图16示出了释放对应于键的值的快照版本的示例。
图15示出了与存储与键对应的值的各种版本相关联的键页面和值页面之间的指针的示例。如图15所示,一系列页面1500是存储键和与该键对应的多个版本的值的一组页面。KVPM中的键页面1502被示出指向KVPM中的与存储与键页面1502中存储的键相对应的值的当前版本1504相关联的页面。KVPM中的存储对应于存储在键页面1502中的键的值的当前版本1504的页面然后指向KVPM中的与存储快照版本4 1506相关联的页面,该快照版本41506是比与存储在键页面1502中的键相对应的值的当前版本1504紧邻更新的快照版本。KVPM中的存储与键页面1502中存储的键对应的值的快照版本4 1506的页面然后指向KVPM中的与存储快照版本3 1508相关联的页面,该快照版本3 1508是比与存储在键页面1502中的键相对应的值的快照版本4 1506紧邻更旧的快照版本。KVPM中的存储对应对存储在键页面1502中的键的值的快照版本3 1508的页面然后指向KVPM中的与存储快照版本2 1510相关联的页面,该快照版本2 1510是比与存储在键页面1502中的键相对应的值的快照版本31508紧邻更旧的快照版本。KVPM中的存储对应于键页面1502中存储的键的值的快照版本21510的页面然后指向KVPM中的与快照版本1 1512相关联的页面,该快照版本1 1512是比与存储在键页面1502中的键相对应的值的快照版本2 1510紧邻较旧的快照版本。
在图15和图16的示例中,将释放快照版本3 1508。例如,从应用接收删除快照版本3 1508的请求。
图16示出了释放与键对应的值的快照版本的示例。应用诸如图14所示的处理1400之类的处理,可以通过识别比快照版本3 1508紧邻更旧的快照版本,识别比快照版本31508紧邻更新的快照版本并且将指针从快照版本4 1506更新为指向快照版本2 1510的页面(而不是快照版本3 1508的页面)来释放快照版本3 1508。另外,KVPM中的与存储与键对应的值的快照版本3 1508相关联的页面在页面使用数据结构处被标记为未使用。因此,为了移除快照版本3 1508,将KVPM中的存储与键对应的值的各种快照版本的页面的链接列表修改为不再指向移除的快照版本3 1508。
图17是示出用于从KVPM检索对应于键的存储值的处理的实施例的流程图。在一些实施例中,处理1700在图3的KVPM 304处实现。在一些实施例中,图4B的处理410或图4C的处理420的步骤428和步骤430至少部分地使用处理1700来实现。
在1701处,接收包括键的获取键操作。例如,从应用接收获取键操作。在处理1700中,所接收的获取键操作被配置为从KVPM检索对应于给定键的存储值。
在1702处,至少部分地基于键来确定KVPM的物理地址。在各种实施例中,哈希函数(例如,上面的公式(1))用于基于键的至少一部分来计算KVPM的物理地址。
在1704处,至少部分地基于物理地址来确定KVPM中的存储键的页面。首先检查KVPM中的与由哈希函数确定的物理地址相关联的页面是否包含放置键操作中包括的键。在一些实施例中,预定探测序列(用于在放置键操作中存储键的相同序列)用于选择下一页面以检查包括在获取键操作中的键,直到适当的键页被定位为止。
在1706处,使用存储在与存储键相关联的页面中的关联数据来确定KVPM中的与存储与键相对应的值相关联的一个或更多个页面的集合。指向与存储当前版本的值相关联的值页面链的(第一)页面的指针从键页面的OOB空间读取,并用于定位与存储当前版本的值相关联的值页面链。
在1708处,从一个或更多个页面的集合获得值。读取用于存储与给定键对应的值的值页面链的一个或更多个页面,以检索值。
在1710处,更新页面元数据。例如,更新存储在键页面中的统计信息,该统计信息描述读取(或写入)与键对应的值的实例的数量。
图18是示出用于执行获取键操作的处理的示例的流程图。在一些实施例中,处理1800在图3的KVPM 304处实现。在一些实施例中,图4B的处理410或图4C的处理420的步骤428和步骤430至少部分地使用处理1800来实施。在一些实施例中,图17的处理1700可以至少部分地使用处理1800来实现。
在1802处,接收键。在获取键操作中(例如,从应用)接收键。
在1804处,读取键的页面。在各种实施例中,哈希函数(例如,上面的公式(1))用于基于键的至少一部分来计算KVPM的物理地址。读取与哈希到的物理地址相关联的KVPM的页面以检查键。
在1806处,确定页面是否包括键。读取所确定的KVPM的物理地址以确定该键是否存储在该页面中。如果键没有存储在该页面中,则控制转移到1810。否则,如果键存储在该页面中,则控制转移到1808。
在1808处,读取存储对应值的页面。对于指向与存储与获取键操作的给定键对应的值的当前版本相关联的值页面链(的第一页面)的指针,读取键页面的OOB空间。
在1810处,确定页面是否空闲。如果检查键的页面不包含键并且也不空闲(例如,页面存储另一个键),则可能发生了哈希冲突,并且使用预定的探测序列来确定KVPM中的要检查的下一页面。在各种实施例中,使用相同的预定探测序列来定位用于在放置键操作中存储键的获取键操作中的键页面。在1814处,确定是否已达到探测序列的最大尝试次数。在一些实施例中,可以建立探测序列的尝试次数的最大值(例如,五次尝试)以确定何时响应于获得键操作而返回失败消息。如果确定尚未达到探测序列的最大尝试次数,则在1812处检查下一个探测位置(例如,KVPM的下一页面)以获得该键,然后将控制返回到1804。如果确定已达到探测序列的最大尝试次数,则处理1800结束,并且可选地将失败消息返回给从其接收到获取键操作的实体(例如,应用)。如果检查键的页面不包括键但是空闲,则处理1800结束,并且可选地将失败消息返回给从其接收到获取键操作的实体(例如,应用)。
图19示出了使用获取键操作来从KVPM的页面检索对应于给定键的存储值的结果的示例。在图19的示例中,接收(例如,从应用)用于检索对应于给定键“Key1”的值的当前版本的获取键操作。键“Key1”被哈希到KVPM的物理地址“012”。当检查与物理地址“012”相关联的KVPM中的页面是否空闲时,确定该页面已经用于存储“Key8”。因此,确定了哈希冲突并且接下来应当检查在本示例中指示相对于KVPM中的“012”处的当前页面向下两个页面(“014”处)的页面的探测序列。与物理地址“014”相关联的页面接下来被检查并确定存储“Key1”,因此将与物理地址“014”相关联的页面识别为键页面。从键页面的OOB空间读取指向与当前版本的值相关联的页面的指针。该指针指向与物理地址“020”相关联的页面,因此从与物理地址“020”相关联的页面读取值“owl”并返回到请求应用。虽然获取键操作不请求与“Key1”对应的值的快照版本1,但是应注意,当请求时,可以通过存储在与物理地址“020”相关联的页面的OOB空间中的指针接收存储该值的快照版本1的页面。
应该提到的是,获取键操作也可以用于检索快照版本。可以使用可选的版本号参数扩展API,以指定要检索的快照版本。如果版本号不存在(未指定),则操作的默认服务是检索当前版本。
如上所述,在KVPM中,应用直接用键访问数据,而无需从键计算LBA和/或将LBA映射到PBA。此外,KVPM执行原位更新的能力导致简单的地址映射;来自应用的键可以很容易地映射到持久存储介质设备上的内存页面,并且不需要像基于闪存的SSD(例如,Flash转换层和逻辑到物理表)那样维护复杂、昂贵的间接***。此外,不需要压缩或垃圾收集,这减少了开销和读/写放大。与基于闪存的SSD存储不同,键值记录直接存储在KVPM中,因此没有多级文件,也没有由重复数据导致的空间浪费。这里描述的各种实施例还提供本机的、细粒度的和按需的快照。当更新现有键值记录时,如果不再需要先前版本,则可以原位更新新值,或者可以将新值写入具有前一版本链接的新分配的页面。可以在运行时和每个键的基础上动态地确定是在原位执行更新还是异地执行更新。这不仅减少了基于软件的快照的开销,还避免了不必要的快照副本浪费的空间。
尽管为了清楚理解的目的已经在一些细节上描述了前述实施例,但是本发明不限于所提供的细节。存在许多实现本发明的替代方式。所公开的实施例是说明性的而非限制性的。
Claims (19)
1.一种使用持久性存储器进行键值存储的***,包括:
持久存储介质,所述持久存储介质支持存储器持久性和原位更新;以及
处理器,所述处理器联接至所述持久存储介质,所述处理器被配置为:
执行放置键操作,包括如下步骤:
获取键和相应的值;
使用至少部分地基于所述键确定的物理地址来将所述键直接存储到所述持久存储介质中的与所述物理地址相关联的未被使用的页面,或者存储到持久存储介质中的未被使用的新页面;以及
将所述值直接存储到所述持久存储介质;
其中,使用至少部分地基于所述键确定的物理地址来将所述键直接存储到所述持久存储介质包括:确定所述持久存储介质中的与所述物理地址相关联的页面未被使用;将所述键存储到所述持久存储介质中的与所述物理地址相关联的页面;以及存储所述持久存储介质中的与和存储所述键相关联的所述物理地址相关联的页面和所述持久存储介质中的与存储所述值相关联的一组页面之间的关联数据;或者,使用至少部分地基于所述键确定的物理地址来将所述键直接存储到所述持久存储介质包括:确定与所述持久存储介质中的所述物理地址相关联的页面存储另一键;至少部分地基于探测序列在所述持久存储介质中选择新页面;确定所述持久存储介质中的所述新页面未使用;将所述键存储到所述持久存储介质中的所述新页面;以及存储所述持久存储介质中的与存储所述键相关联的所述新页面和所述持久存储介质中的与存储所述值相关联的一组页面之间的关联数据。
2.如权利要求1所述的***,其中,所述处理器还被配置为:
在启动时生成页面使用数据结构;以及
响应于在运行时期间在所述持久存储介质中的页面分配的更新,动态地更新所述页面使用数据结构。
3.如权利要求1所述的***,其中,将所述键直接存储到所述持久存储介质包括:确定所述物理地址,而无需将与所述键相关联的逻辑地址转换为所述物理地址。
4.如权利要求1所述的***,其中,将所述键直接存储到所述持久存储介质包括:至少部分地基于将所述键的至少一部分哈希到所述物理地址来确定所述物理地址。
5.如权利要求1所述的***,其中,所述放置键操作包括第一放置键操作,其中,所述值包括先前值,并且其中,所述处理器还被配置为:
执行第二次放置键操作,包括:
获取键和相应的新值;
响应于确定所述持久存储介质中的与所述物理地址相关联的页面存储所述键,确定执行原位更新;以及
用所述新值覆盖所述持久存储介质中的与存储所述先前值相关联的一组页面的至少一部分。
6.如权利要求1所述的***,其中,所述放置键操作包括第一放置键操作,其中,所述值包括先前值,其中,所述先前值存储在所述持久存储介质中的先前页面集中,并且其中,所述处理器还配置为:
执行第二次放置键操作,包括:
获取键和相应的新值;
响应于确定所述持久存储介质中的与所述物理地址相关联的页面存储所述键,确定执行异地更新;
将所述新值写入所述持久存储介质中的新页面集中;
存储所述持久存储介质中的与所述物理地址相关联的所述页面和所述持久存储介质中的所述新页面集之间的关联数据;以及
存储所述持久存储介质中的所述新页面集和所述持久存储介质中的所述先前页面集之间的关联数据。
7.如权利要求1所述的***,其中,所述处理器还被配置为:
接收释放所述键的所识别的快照版本的请求;
确定所述键的相对于所识别的快照版本紧邻更新的快照版本;
确定的键的相对于所识别的快照版本紧邻更旧的快照版本;
存储将所述持久存储介质中的与存储所述紧邻更新的快照版本相关联的一个或更多个页面与所述持久存储介质中的与存储所述紧邻更旧的快照版本相关联的一个或更多个页面关联的数据;以及
更新页面使用数据结构以指示所述持久存储介质中的与存储所识别的快照版本相关联的一个或更多个页面未被使用。
8.一种使用持久性存储器进行键值存储的方法,包括:
接收包括键和相应的值的放置键操作;
使用至少部分地基于所述键确定的物理地址来将所述键直接存储到持久存储介质中的与所述物理地址相关联的未被使用的页面,或者存储到持久存储介质中的未被使用的新页面,其中,所述持久存储介质支持存储器持久性和原位更新;以及
将所述值直接存储到所述持久存储介质;
其中,使用至少部分地基于所述键确定的物理地址来将所述键直接存储到所述持久存储介质包括:确定所述持久存储介质中的与所述物理地址相关联的页面未被使用;将所述键存储到所述持久存储介质中的与所述物理地址相关联的页面;以及存储所述持久存储介质中的与和存储所述键相关联的所述物理地址相关联的页面和所述持久存储介质中的与存储所述值相关联的一组页面之间的关联数据;或者,使用至少部分地基于所述键确定的物理地址来将所述键直接存储到所述持久存储介质包括:确定与所述持久存储介质中的所述物理地址相关联的页面存储另一键;至少部分地基于探测序列在所述持久存储介质中选择新页面;确定所述持久存储介质中的所述新页面未使用;将所述键存储到所述持久存储介质中的所述新页面;以及存储所述持久存储介质中的与存储所述键相关联的所述新页面和所述持久存储介质中的与存储所述值相关联的一组页面之间的关联数据。
9.如权利要求8所述的方法,其中,将所述键直接存储到所述持久存储介质包括:确定所述物理地址,而无需将与所述键相关联的逻辑地址转换为所述物理地址。
10.如权利要求8所述的方法,其中,将所述键直接存储到所述持久存储介质包括:至少部分地基于将所述键的至少一部分哈希到所述物理地址来确定所述物理地址。
11.如权利要求8所述的方法,其中,所述放置键操作包括第一放置键操作,其中,所述值包括先前值,并且所述方法还包括:
执行第二次放置键操作,包括:
获取键和相应的新值;
响应于确定所述持久存储介质中的与所述物理地址相关联的页面存储所述键,确定执行原位更新;以及
用所述新值覆盖所述持久存储介质中的与存储所述先前值相关联的一组页面的至少一部分。
12.如权利要求8所述的方法,其中,所述放置键操作包括第一放置键操作,其中,所述值包括先前值,其中,所述先前值存储在所述持久存储介质中的先前页面集中,并且所述方法还包括:
执行第二次放置键操作,包括:
获取键和相应的新值;
响应于确定所述持久存储介质中的与所述物理地址相关联的页面存储所述键,确定执行异地更新;
将所述新值写入所述持久存储介质中的新页面集中;
存储所述持久存储介质中的与所述物理地址相关联的所述页面和所述持久存储介质中的所述新页面集之间的关联数据;以及
存储所述持久存储介质中的所述新页面集和所述持久存储介质中的所述先前页面集之间的关联数据。
13.如权利要求8所述的方法,还包括:
接收释放所述键的所识别的快照版本的请求;
确定所述键的相对于所识别的快照版本紧邻更新的快照版本;
确定的键的相对于所识别的快照版本紧邻更旧的快照版本;
存储将所述持久存储介质中的与存储所述紧邻更新的快照版本相关联的一个或更多个页面与所述持久存储介质中的与存储所述紧邻更旧的快照版本相关联的一个或更多个页面关联的数据;以及
更新页面使用数据结构以指示所述持久存储介质中的与存储所识别的快照版本相关联的一个或更多个页面未被使用。
14.一种计算机可读存储介质,其存储有用于执行以下操作的计算机指令:
接收包括键和相应的值的放置键操作;
使用至少部分地基于所述键确定的物理地址来将所述键直接存储到持久存储介质中的与所述物理地址相关联的未被使用的页面,或者存储到持久存储介质中的未被使用的新页面,其中,所述持久存储介质支持存储器持久性和原位更新;以及
将所述值直接存储到所述持久存储介质;
其中,使用至少部分地基于所述键确定的物理地址来将所述键直接存储到所述持久存储介质包括:确定所述持久存储介质中的与所述物理地址相关联的页面未被使用;将所述键存储到所述持久存储介质中的与所述物理地址相关联的页面;以及存储所述持久存储介质中的与和存储所述键相关联的所述物理地址相关联的页面和所述持久存储介质中的与存储所述值相关联的一组页面之间的关联数据;或者,使用至少部分地基于所述键确定的物理地址来将所述键直接存储到所述持久存储介质包括:确定与所述持久存储介质中的所述物理地址相关联的页面存储另一键;至少部分地基于探测序列在所述持久存储介质中选择新页面;确定所述持久存储介质中的所述新页面未使用;将所述键存储到所述持久存储介质中的所述新页面;以及存储所述持久存储介质中的与存储所述键相关联的所述新页面和所述持久存储介质中的与存储所述值相关联的一组页面之间的关联数据。
15.一种使用持久性存储器进行键值存储的***,包括:
持久存储介质,所述持久存储介质支持存储器持久性和原位更新;以及
处理器,所述处理器联接至所述持久存储介质,所述处理器被配置为:
执行获取键操作,包括如下步骤:
获取键;以及
使用至少部分地基于所述键确定的物理地址来直接访问所述持久存储介质中的与所述物理地址相关联的未被使用的页面,或者访问持久存储介质中的未被使用的新页面,以检索对应于所述键的存储值;
其中,使用至少部分地基于所述键确定的所述物理地址来直接访问所述持久存储介质,以检索与所述键相对应的所述存储值包括:确定所述持久存储介质中的与所述物理地址相关联的页面存储所述键;以及使用存储在所述持久存储介质中的与所述物理地址相关联的所述页面中的关联数据来确定所述持久存储介质中的存储所述值的一组页面。
16.如权利要求15所述的***,其中,直接访问所述持久存储介质包括:确定所述物理地址,而无需将与所述键相关联的逻辑地址转换为所述物理地址。
17.如权利要求15所述的***,其中,将所述键直接存储到所述持久存储介质包括:至少部分地基于将所述键的至少一部分哈希到所述物理地址来确定所述物理地址。
18.一种使用持久性存储器进行键值存储的方法,包括:
接收包括键的获取键操作;以及
使用至少部分地基于所述键确定的物理地址来直接访问持久存储介质中的与所述物理地址相关联的未被使用的页面,或者访问持久存储介质中的未被使用的新页面,以检索与所述键对应的存储值,其中,所述持久存储介质支持存储器持久性和原位更新;
其中,使用至少部分地基于所述键确定的所述物理地址来直接访问所述持久存储介质以检索与所述键相对应的所述存储值包括:确定所述持久存储介质中的与所述物理地址相关联的页面存储所述键;以及使用存储在所述持久存储介质中的与所述物理地址相关联的所述页面中的关联数据来确定所述持久存储介质中的存储所述值的一组页面。
19.一种计算机可读存储介质,其存储有用于执行以下操作的计算机指令:
接收包括键的获取键操作;以及
使用至少部分地基于所述键确定的物理地址来直接访问持久存储介质中的与所述物理地址相关联的未被使用的页面,或者访问持久存储介质中的未被使用的新页面,以检索与所述键对应的存储值,其中,所述持久存储介质支持存储器持久性和原位更新;
其中,使用至少部分地基于所述键确定的所述物理地址来直接访问所述持久存储介质,以检索与所述键相对应的所述存储值包括:确定所述持久存储介质中的与所述物理地址相关联的页面存储所述键;以及使用存储在所述持久存储介质中的与所述物理地址相关联的所述页面中的关联数据来确定所述持久存储介质中的存储所述值的一组页面。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/492776 | 2017-04-20 | ||
US15/492,776 US10261913B2 (en) | 2017-04-20 | 2017-04-20 | Persistent memory for key-value storage |
PCT/US2018/022726 WO2018194772A1 (en) | 2017-04-20 | 2018-03-15 | Persistent memory for key-value storage |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110678836A CN110678836A (zh) | 2020-01-10 |
CN110678836B true CN110678836B (zh) | 2024-02-09 |
Family
ID=63854492
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880025961.4A Active CN110678836B (zh) | 2017-04-20 | 2018-03-15 | 用于键值存储的持久性存储器 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10261913B2 (zh) |
CN (1) | CN110678836B (zh) |
SG (1) | SG11201908071PA (zh) |
WO (1) | WO2018194772A1 (zh) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11287973B2 (en) * | 2016-02-02 | 2022-03-29 | Samsung Electronics Co., Ltd. | Polymorphic storage devices |
US11210019B2 (en) | 2017-08-23 | 2021-12-28 | Micron Technology, Inc. | Memory with virtual page size |
US10394456B2 (en) | 2017-08-23 | 2019-08-27 | Micron Technology, Inc. | On demand memory page size |
US10884947B2 (en) * | 2017-11-17 | 2021-01-05 | SK Hynix Inc. | Methods and memory systems for address mapping |
US10896125B2 (en) | 2017-11-17 | 2021-01-19 | SK Hynix Inc. | Garbage collection methods and memory systems for hybrid address mapping |
US11182694B2 (en) * | 2018-02-02 | 2021-11-23 | Samsung Electronics Co., Ltd. | Data path for GPU machine learning training with key value SSD |
KR102552689B1 (ko) * | 2018-04-26 | 2023-07-05 | 삼성전자주식회사 | 데이터 저장 장치 |
KR102085272B1 (ko) * | 2018-06-14 | 2020-03-05 | 연세대학교 산학협력단 | 비휘발성 메모리를 이용한 인메모리 데이터베이스의 데이터 처리 방법 및 인메모리 데이터베이스 |
CN111902804B (zh) | 2018-06-25 | 2024-03-01 | 阿里巴巴集团控股有限公司 | 用于管理存储设备的资源并量化i/o请求成本的***和方法 |
US11258796B2 (en) * | 2018-07-05 | 2022-02-22 | Fungible, Inc. | Data processing unit with key value store |
US10824610B2 (en) * | 2018-09-18 | 2020-11-03 | Vmware, Inc. | Balancing write amplification and space amplification in buffer trees |
US10956071B2 (en) * | 2018-10-01 | 2021-03-23 | Western Digital Technologies, Inc. | Container key value store for data storage devices |
CN111182014B (zh) * | 2018-11-09 | 2022-04-26 | 北京华为数字技术有限公司 | 一种数据同步方法和装置 |
US10740231B2 (en) | 2018-11-20 | 2020-08-11 | Western Digital Technologies, Inc. | Data access in data storage device including storage class memory |
US11237744B2 (en) * | 2018-12-28 | 2022-02-01 | Verizon Media Inc. | Method and system for configuring a write amplification factor of a storage engine based on a compaction value associated with a data file |
US11061735B2 (en) | 2019-01-02 | 2021-07-13 | Alibaba Group Holding Limited | System and method for offloading computation to storage nodes in distributed system |
CN109918352B (zh) * | 2019-03-04 | 2021-11-05 | 北京百度网讯科技有限公司 | 存储器***和存储数据的方法 |
US11617282B2 (en) | 2019-10-01 | 2023-03-28 | Alibaba Group Holding Limited | System and method for reshaping power budget of cabinet to facilitate improved deployment density of servers |
US11016905B1 (en) | 2019-11-13 | 2021-05-25 | Western Digital Technologies, Inc. | Storage class memory access |
US11249921B2 (en) | 2020-05-06 | 2022-02-15 | Western Digital Technologies, Inc. | Page modification encoding and caching |
US11556277B2 (en) * | 2020-05-19 | 2023-01-17 | Alibaba Group Holding Limited | System and method for facilitating improved performance in ordering key-value storage with input/output stack simplification |
US11507499B2 (en) | 2020-05-19 | 2022-11-22 | Alibaba Group Holding Limited | System and method for facilitating mitigation of read/write amplification in data compression |
US20220092046A1 (en) * | 2020-09-18 | 2022-03-24 | Kioxia Corporation | System and method for efficient expansion of key value hash table |
CN112486996B (zh) * | 2020-12-14 | 2022-08-05 | 上海交通大学 | 面向对象的内存数据存储*** |
US11734115B2 (en) | 2020-12-28 | 2023-08-22 | Alibaba Group Holding Limited | Method and system for facilitating write latency reduction in a queue depth of one scenario |
US11625386B2 (en) * | 2021-01-29 | 2023-04-11 | Salesforce.Com, Inc. | Fast skip list purge |
US11726699B2 (en) | 2021-03-30 | 2023-08-15 | Alibaba Singapore Holding Private Limited | Method and system for facilitating multi-stream sequential read performance improvement with reduced read amplification |
US20230333984A1 (en) * | 2022-04-14 | 2023-10-19 | Samsung Electronics Co., Ltd. | Systems and methods for a cross-layer key-value store with a computational storage device |
US11960742B1 (en) | 2022-10-14 | 2024-04-16 | Oracle International Corporation | High-performance, block-level fail atomicity on byte-level non-volatile media |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102436420A (zh) * | 2010-10-20 | 2012-05-02 | 微软公司 | 使用辅助存储器的低ram空间、高吞吐量的持久键值存储 |
CN102792284A (zh) * | 2009-12-30 | 2012-11-21 | 辉达公司 | 存储器设备耗损均衡技术 |
CN102929793A (zh) * | 2011-08-08 | 2013-02-13 | 株式会社东芝 | 包括键-值存储的存储器*** |
CN105446899A (zh) * | 2015-11-09 | 2016-03-30 | 上海交通大学 | 基于存储级内存的内存数据快速持久化的方法 |
Family Cites Families (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7096213B2 (en) | 2002-04-08 | 2006-08-22 | Oracle International Corporation | Persistent key-value repository with a pluggable architecture to abstract physical storage |
US7392324B2 (en) | 2004-08-13 | 2008-06-24 | International Business Machines Corporation | Consistent snapshots of dynamic heterogeneously managed data |
US7403945B2 (en) | 2004-11-01 | 2008-07-22 | Sybase, Inc. | Distributed database system providing data and space management methodology |
US8065304B2 (en) * | 2008-06-11 | 2011-11-22 | International Business Machines Corporation | Using asymmetric memory |
US8219741B2 (en) | 2008-10-24 | 2012-07-10 | Microsoft Corporation | Hardware and operating system support for persistent memory on a memory bus |
US8806160B2 (en) | 2011-08-16 | 2014-08-12 | Pure Storage, Inc. | Mapping in a storage system |
US8499121B2 (en) * | 2011-08-31 | 2013-07-30 | Hewlett-Packard Development Company, L.P. | Methods and apparatus to access data in non-volatile memory |
US8700683B2 (en) | 2011-10-24 | 2014-04-15 | Nokia Corporation | Method and apparatus for providing a key-value based storage interface |
US9092316B2 (en) | 2011-10-28 | 2015-07-28 | International Business Machines Corporation | Methods and storage devices for managing write operations |
US9519647B2 (en) * | 2012-04-17 | 2016-12-13 | Sandisk Technologies Llc | Data expiry in a non-volatile device |
US9075710B2 (en) | 2012-04-17 | 2015-07-07 | SanDisk Technologies, Inc. | Non-volatile key-value store |
US20140310302A1 (en) | 2013-04-12 | 2014-10-16 | Oracle International Corporation | Storing and querying graph data in a key-value store |
US9740633B2 (en) * | 2015-01-07 | 2017-08-22 | International Business Machines Corporation | Updatable address lookup application program interface |
US9910611B2 (en) * | 2015-05-29 | 2018-03-06 | Intel Corporation | Access control for memory protection key architecture |
US9940337B2 (en) * | 2015-05-31 | 2018-04-10 | Vmware, Inc. | Predictive probabilistic deduplication of storage |
KR102435863B1 (ko) * | 2015-09-16 | 2022-08-25 | 삼성전자주식회사 | 스토리지 장치 및 그것을 포함하는 서버 시스템의 매칭 키 검색 방법 |
PT3584708T (pt) * | 2015-12-15 | 2022-07-27 | Lzlabs Gmbh | Gestão e prefixação de chave de proteção em sistema de emulação legado de espaço de endereço virtual |
US10515064B2 (en) * | 2016-07-11 | 2019-12-24 | Microsoft Technology Licensing, Llc | Key-value storage system including a resource-efficient index |
-
2017
- 2017-04-20 US US15/492,776 patent/US10261913B2/en active Active
-
2018
- 2018-03-15 SG SG11201908071PA patent/SG11201908071PA/en unknown
- 2018-03-15 CN CN201880025961.4A patent/CN110678836B/zh active Active
- 2018-03-15 WO PCT/US2018/022726 patent/WO2018194772A1/en active Application Filing
-
2019
- 2019-02-21 US US16/281,370 patent/US10649910B2/en active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102792284A (zh) * | 2009-12-30 | 2012-11-21 | 辉达公司 | 存储器设备耗损均衡技术 |
CN102436420A (zh) * | 2010-10-20 | 2012-05-02 | 微软公司 | 使用辅助存储器的低ram空间、高吞吐量的持久键值存储 |
CN102929793A (zh) * | 2011-08-08 | 2013-02-13 | 株式会社东芝 | 包括键-值存储的存储器*** |
CN105446899A (zh) * | 2015-11-09 | 2016-03-30 | 上海交通大学 | 基于存储级内存的内存数据快速持久化的方法 |
Non-Patent Citations (1)
Title |
---|
持久性操作***及其相关技术;卢虹等;《计算机与数字工程》;20030420(第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
US20180307620A1 (en) | 2018-10-25 |
US20190258587A1 (en) | 2019-08-22 |
CN110678836A (zh) | 2020-01-10 |
SG11201908071PA (en) | 2019-09-27 |
US10261913B2 (en) | 2019-04-16 |
US10649910B2 (en) | 2020-05-12 |
WO2018194772A1 (en) | 2018-10-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110678836B (zh) | 用于键值存储的持久性存储器 | |
US10725669B2 (en) | Incremental snapshot based technique on paged translation systems | |
US10289545B2 (en) | Hybrid checkpointed memory | |
US8250333B2 (en) | Mapping address table maintenance in a memory device | |
US9690694B2 (en) | Apparatus, system, and method for an address translation layer | |
US10725903B2 (en) | Unified paging scheme for dense and sparse translation tables on flash storage systems | |
US20170024140A1 (en) | Storage system and method for metadata management in non-volatile memory | |
US11816027B2 (en) | Translation lookup and garbage collection optimizations on storage system with paged translation table | |
US20150193339A1 (en) | System and method for efficient address translation of flash memory device | |
US10235287B2 (en) | Efficient management of paged translation maps in memory and flash | |
TW201301030A (zh) | 在一記憶體裝置中減少次要位址表檢查之快速轉譯指示器 | |
KR20070096429A (ko) | 빠른 마운팅을 지원하는 낸드 플래시 메모리에 적용되는파일시스템 | |
US10120583B2 (en) | Performance penalty avoidance for solid state drive | |
KR20100115090A (ko) | 버퍼를 고려한 가비지 컬렉션 기법 | |
US10083181B2 (en) | Method and system for storing metadata of log-structured file system | |
KR101017067B1 (ko) | 낸드 플래시 메모리를 위한 지역성 기반의 가비지 컬렉션기법 | |
US10353813B2 (en) | Checkpoint based technique for bootstrapping forward map under constrained memory for flash devices | |
KR20100099888A (ko) | 플래시 메모리를 기반으로 한 데이터베이스 시스템에 대한 로그 관리 방법 | |
US11614876B2 (en) | Memory device and method for accessing memory device with namespace management |
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 |