CN113918089A - 键值存储设备和排序键值的方法 - Google Patents
键值存储设备和排序键值的方法 Download PDFInfo
- Publication number
- CN113918089A CN113918089A CN202110771324.5A CN202110771324A CN113918089A CN 113918089 A CN113918089 A CN 113918089A CN 202110771324 A CN202110771324 A CN 202110771324A CN 113918089 A CN113918089 A CN 113918089A
- Authority
- CN
- China
- Prior art keywords
- key
- index structure
- request
- storage device
- log block
- 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
Images
Classifications
-
- 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
- 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/062—Securing storage systems
- G06F3/0622—Securing storage systems in relation to access
-
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
- G06F16/164—File meta data generation
-
- 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/1805—Append-only file systems, e.g. using logs or journals to store data
-
- 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
-
- 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/2255—Hash tables
-
- 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
- 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/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of 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/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/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- 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
-
- 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
- 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
-
- 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/0688—Non-volatile semiconductor memory arrays
-
- 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/7203—Temporary buffering, e.g. using volatile buffer or dedicated buffer blocks
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)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开涉及公开了一种键值存储设备。键值存储设备可以包括用于持久存储数据的第一储存器。键值存储设备还可以包括用于主索引结构的第二储存器,主索引结构将键映射到第一储存器中的位置。控制器可以使用第一储存器处理来自主机的读取请求、写入请求或删除请求。第三储存器可以存储存储键的辅索引结构,所述辅索引结构被排序。
Description
技术领域
本公开的概念一般涉及存储设备,更具体地,涉及键值固态驱动器(Key-ValueSolid State Drive,KV-SSD)中键的改进排序。
背景技术
键值固态驱动器(KV-SSD)在KV-SSD上的位置存储数据(键值中的“值”)。这些位置与键(键值中的“键”)相关联。当KV-SSD接收到写入请求时,新的键可以被添加到将键映射到存储数据的位置的结构中。当KV-SSD接收到读取请求时,KV-SSD使用此结构来定位数据存储的位置,以便可以读取数据并将其返回到请求机器。并且当KV-SSD接收到删除请求时,KV-SSD更新此结构以从结构中移除键。
仍然需要改进KV-SSD索引结构的管理。
发明内容
根据本公开的一方面,提供了一种键值KV存储设备,包括:第一储存器,用于存储数据,所述第一储存器包括持久储存器;第二储存器,用于存储主索引结构,所述主索引结构将第一键映射到存储值的所述第一储存器中的第一位置,所述第一键和所述值形成键值对;控制器,用于使用所述第一储存器来处理从主机接收的读取请求、写入请求或删除请求中的至少一个;和第三储存器,用于存储辅索引结构,所述辅索引结构存储所述第一键,其中,所述辅索引结构被排序。
根据本公开的另一方面,提供了一种一种数据存储方法,包括:在键值KV存储设备处从主机接收请求,所述请求至少包括操作和第一键,所述操作包括写入操作或删除操作中的至少一个;至少部分地基于所述操作和所述第一键,使用所述KV存储设备的第一储存器来处理所述请求,从而确定与所述第一键相关联的所述第一储存器中的位置;至少部分地基于所述操作、所述第一键和所述位置来更新所述KV存储设备的主索引结构;将所述操作和所述第一键记录在所述KV存储设备的日志块中;以及将所述请求的结果从所述KV存储设备返回给所述主机。
根据本公开的另一方面,提供了一种一种数据存储方法,包括:从键值KV存储设备上的日志块请求键;从所述KV存储设备接收所述键;以及至少部分地基于所述键生成第一辅索引结构,所述第一辅索引结构根据至少所述键和第二键被排序,其中,所述第一辅索引结构不同于主索引结构,所述主索引结构被所述KV存储设备用于处理包括所述键的读取请求、包括所述键的写入请求、或包括所述键的删除请求。
附图说明
下面描述的附图是如何实现本发明构思的实施例的示例,并且其目的不在于限制本发明构思的实施例。本发明构思的各个实施例可以包括特定附图中未示出的元件和/或可以省略特定附图中示出的元件。附图旨在提供说明,并且可能不按比例绘制。
图1示出了根据本公开的实施例的包括存储设备的机器,该存储设备被装备为支持协作键排序。
图2示出了根据本发明构思的实施例的图1的机器的附加细节。
图3示出了根据本发明构思的实施例的执行键记录所涉及的操作。
图4示出了根据本发明构思的实施例的执行合并键所涉及的操作。
图5示出了根据本发明构思的实施例的图1的存储设备的细节。
图6示出了根据本发明构思的实施例的图5的键值命令处理程序(handler)、图5的主键值索引结构和图5的键记录器之间的交互。
图7示出了根据本发明构思的实施例的执行合并键所涉及的操作的替代视图。
图8示出了根据本发明构思的实施例的将键合并到图5的辅索引结构中的图1的处理器。
图9示出了根据本发明构思的实施例的用于图1的存储设备执行键记录的示例过程的流程图。
图10示出了根据本发明构思的实施例的用于图5的键记录器使用键组元数据记录键的示例过程的流程图。
图11A-11B示出了根据本发明构思的实施例的用于图1的存储设备以帮助图1的处理器将键合并到图5的辅索引结构中的示例过程的流程图。
图12示出了根据本发明构思的实施例的图1的处理器将键合并到图5的辅索引结构中的示例过程的流程图。
图13示出了根据本发明构思的实施例的用于图1的处理器从图3的日志块访问键的示例过程的流程图。
图14示出了根据本发明构思的实施例的图1的键值存储设备将键合并到图5的辅索引结构中的示例过程的流程图。
图15示出了根据本发明构思的实施例的图1的处理器将键与图8的第二辅索引结构合并的示例过程的流程图。
图16示出了根据本发明构思的实施例的图1的处理器请求删除图3的日志块的示例过程的流程图。
具体实施方式
现在将详细地参考本发明构思的实施例,其示例在附图中示出。在下面的详细描述中,阐述了许多具体细节以使得能够透彻地理解本发明构思。然而,应当理解,本领域普通技术人员可以在没有这些具体细节的情况下实践本发明构思。在其它实例中,尚未详细描述众所周知的方法、过程、组件、电路和网络,以避免不必要地模糊实施例的方面。
应当理解,尽管本文可以使用术语第一、第二等来描述各种元件,但是这些元件不应受到这些术语的限制。这些术语仅用于区分一个元素和另一个元素。例如,在不脱离本发明构思的范围的情况下,第一模块可以被称为第二模块,并且类似地,第二模块可以被称为第一模块。
本文中用于描述本发明构思的术语仅用于描述特定实施例的目的,并不旨在限制本发明构思。如在本发明构思和所附权利要求书的描述中所使用的,除非上下文另有明确指示,否则单数形式“一”、“一个”和“这个”也旨在包括复数形式。还应理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的所列项目的任何和所有可能的组合。将进一步理解,当在本说明书中使用的术语“包括”和/或“包括”时,指定了所述特征、整数、步骤、操作、元件和/或组件的存在,但不排除一个或多个其他特征、整数、步骤、操作、元件和/或组件、和/或其组的存在或添加。附图的组件和特征不一定按比例绘制。
键值存储设备可以使用主索引结构来处理各种请求,诸如写入请求、读取请求或删除请求。因为这些请求代表了可能从请求者(requestor)接收的大部分请求,所以对这个结构的更新可能会干扰其他操作,特别是输入/输出(I/O)操作。换句话说,当主索引结构正在被更新时,键值存储设备可能不能处理对键值存储设备中存储的其他数据的写入、读取或删除请求。此外,由于该结构可以如同用户数据那样存储在闪存存储器(flash memory)中,因此对该结构的更新可能涉及使现有结构无效并将更新的结构写入闪存存储器中的新位置。此过程可能导致写入放大因子(write amplification factor,WAF)增加。另一方面,由于KV-SSD使用此结构,因此对此结构的更新可能不会无限期延迟。
在各个方面中,范围查询(range query)可以是键值存储的特征。在一些键值存储中,响应范围查询涉及两个步骤:记录(logging)和合并(压缩)。在记录阶段,键值存储将未排序或部分排序的键写入固态驱动器(Solid State Drive,SSD),并且在合并阶段,记录的键列表被读取并与主索引树组合。注意,即使没有范围查询挂起,键值存储也可以执行这些操作。
然而,由于内部处理能力的限制,键值SSD(KV-SSD)在内部支持这种处理可能具有挑战性。记录可以在内部实现,但是合并和排序对于设备来说可能是计算上昂贵的过程。并且,虽然可以使用通用处理器(或专门为合并而设计的硬件,诸如适当配置的现场可编程门阵列(Field Programmable Gate Array,FPGA)或专用集成电路(Application-SpecificIntegrated Circuit,ASIC)),但是将硬件专用于这些特定任务可能增加键值存储的总成本和/或复杂性。
在某些方面,KV-SSD可以提供相对快速、可扩展的键值对管理。但是对传入的键值对进行排序以支持范围查询可能会导致性能下降。按需更新主索引结构是很贵的,并且不能很好地随键数的增加而扩展。在一些方面中,可以使用两步排序技术,其部分地处理传入的键值对并将其存储到存储设备,并且在后台(background)组织存储的数据。但这种方法可能存在一些性能问题。记录需要同步写入,而KV-SSD可能不提供同步写入。并且合并更新主索引结构,干扰传入的输入/输出(I/O)请求的处理。
为了解决这些性能问题,可以利用原子I/O操作将记录卸载到KV-SSD:主机可以避免执行记录或向KV-SSD发出记录请求。合并可以由主机执行,处理后的结果分别存储到KV-SSD(或其他地方),并且在不干扰主索引结构的另一结构中。
KV-SSD可包括键记录器(key logger),其可将更新的或删除的键写入设备中的持久存储器(persistent memory)或存储介质。KV-SSD还可以支持两个命令:检索由键记录器写入或保持的写入缓冲区的迭代命令,以及删除由键记录器写入或保持的写入缓冲区的日志删除命令。此外,写入和删除命令可以被修改,以支持用于键分组的新元数据字段。此键组元数据可用于记录和排序:分配给相同键组的键可一起被排序。如果没有键组元数据被指定,则KV-SSD可确定所有键在相同组中。
键组信息可由写入/删除键值I/O命令传递,该命令可在诸如非易失性存储器标准(Non-Volatile Memory Express,NVMe)的本机I/O命令协议之上实现。键组信息可以从特定I/O命令协议中的可选字段传递,或者在键本身中编码。键值命令处理程序可以将来自写入和删除命令的键组元数据传递给键记录器。
键记录器可以将键存储到驻留在持久存储器中的每组写入缓冲区中。这种持久存储器可以包括非易失性存储器、字节可寻址动态随机存取存储器(Dynamic Random AccessMemory,DRAM)(其可以是电池供电的)、字节可寻址非易失性存储器和其它形式。每个键日志条目可以包含键(其长度和键内容)和关于键的信息,诸如OPCODE(指示写入/删除)和可选的元数据(诸如组信息)。
如果存储写入缓冲区的持久存储器的剩余空间不足,则可以将写入缓冲区转移到诸如闪存存储器的持久存储介质。闪存存储器中的写入缓冲区的位置可以由设备保持。写入缓冲区可以被分配在存储器中的一系列逻辑块地址(logical block addresses,LBA),使用用于持久存储介质中的写入缓冲区的键值对来存储,或者以其他方式存储。例如,闪存存储器中的区域可以被保留用于写入缓冲区。键记录器可以保持该区域中的空闲LBA的列表,并且使用空闲LBA分配写入缓冲区。当发出日志删除命令时,区域可以被回收(reclaimed)。
管理写入缓冲区的另一种方法是为写入缓冲区分配唯一的键,并将其作为键值对存储在闪存存储器的主储存器中。键记录器可以保持分配的唯一键的列表,并在迭代命令时返回它们。当主机发出迭代命令时,键记录器可以返回这些写入缓冲区的键,并且主机可以使用标准读取请求读取写入缓冲区。一旦从闪存存储器中的主储存器读取了写入缓冲区,主机就可以发出删除这些键的请求。使用这种方法,KV-SSD可以不需要日志删除命令(因为主机可以使用删除请求和分配的键直接删除写入缓冲区)。
迭代命令可以检索由键记录器保持或写入的写入缓冲区。迭代命令可以以两种方式实现:迭代命令可以返回写入缓冲区的内容,或者迭代命令可以返回写入缓冲区的唯一标识符(例如,键和LBA)的列表。
如果要返回的数据量对于单个命令来说太大,则可能会发出多个迭代命令。下面显示了使用预先分配的LBA的范围的迭代命令的示例实现,以及主机使用此命令的示例代码,如表1所示:
表1
如果使用迭代命令访问写入缓冲区的内容,则在完成迭代命令时可以发出日志删除命令来擦除写入缓冲区。如果迭代命令返回写入缓冲区的标识符(例如,键或LBA),则可以省略日志删除命令,因为主机可以使用删除请求和分配给写入缓冲区的键来擦除写入缓冲区。
合并过程执行以下三个任务:读取写入缓冲区;生成排序的键列表(并将它们写入KV-SSD);并删除写入缓冲区。如上所述,可以使用迭代命令来执行写入缓冲区的读取。
为了生成排序的键列表,主机可以从写入缓冲区提取键条目。主机还可以加载包含键条目(从写入缓冲区读取)的内存索引节点(memory index node)。然后,主机可以将新的键插入到内存索引节点中,并从内存索引节点移除删除的键。然后,主机可以将更新的元数据写入KV-SSD(但是采用与主索引结构不同的结构)。
最后,为了删除写入缓冲区,主机可以发出日志删除命令来删除写入缓冲区(或者如果写入缓冲区作为键值对存储在KV-SSD上,则主机可以使用具有分配给写入缓冲区的键的删除请求)。
为了执行合并本身,可以使用任何所需的排序的索引数据结构,包括例如B+-树(B+-tree)、B-树(B-tree)、跳跃表(Skip List)和其它。
由于排序的索引结构可以在发生电源故障或写入故障时使用写入缓冲区(和/或主索引结构)(当所有元数据节点成功写入KV-SSD时,处理的写入缓冲区可能被删除),因此排序的索引结构是一致的。
总而言之,当主索引结构用于以排序的方式存储关于键的信息时,可以以影响主索引结构的整体的方式多次更新主索引结构。在更新主索引结构时,其他I/O操作可能会被中断或延迟(因为I/O操作可访问主索引结构)。此外,KV-SSD可以执行多个写入操作以确保数据一致性。新的键可以被写入日志和临时文件(例如,作为写入缓冲区的一部分)两者。
通过使用辅索引结构而不是主索引结构来存储排序的键信息,KV-SSD可以避免必须更新主索引结构,在此期间I/O操作可能被中断或延迟。另外,由于在主索引结构中较少的数据可以被改变,因此存储在KV-SSD上的数据的WAF可以被减少。最后,键的较少临时副本可以被写入存储设备。
图1示出了根据本发明构思的实施例的包括存储设备的机器,该存储设备被装备为支持协作键排序。在图1中,示出了也可以被称为主机的机器105。机器105可以包括处理器110。处理器110可以是任何种类的处理器。(为了便于说明,在机器105外部示出了处理器110以及下面讨论的其他组件:本发明构思的实施例可以包括机器105内部的这些组件。)虽然图1示出了机器105中的单个处理器110,但是机器105可以包括任意数量的处理器,每个处理器可以是单核或多核处理器,每个处理器可以实现精简指令集计算机(ReducedInstruction Set Computer,RISC)架构或复杂指令集计算机(Complex Instruction SetComputer,CISC)架构(除其他可能性外),并且可以以任何所需的组合混合。
机器105还可以包括存储器115。存储器115可以是任何种类的存储器,诸如闪存存储器、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、持久随机存取存储器、铁电随机存取存储器(Ferroelectric Random Access Memory,FRAM)或非易失性随机存取存储器(NVRAM),诸如磁阻随机存取存储器(Magnetoresistive Random Access Memory,MRAM)等。存储器115也可以是不同存储器类型的任何所需的组合。机器105还可包括存储器控制器120,其可用于管理对存储器115的访问。
机器105还可包括存储设备125。存储设备125可用于存储数据。处理器110可以运行设备驱动器130,其可以支持对存储设备125的访问。虽然本发明构思的实施例可以集中于键值存储设备,但是可以使用任何所需的存储设备,其可以使用任何所需的存储原理来操作。因此,存储设备125可以是固态驱动器(SSD)、硬盘驱动器或任何其他所需的存储设备。虽然图1仅示出了一个存储设备125,但是本发明构思的实施例可以支持机器105中安装的任意数量的存储设备,这些存储设备在任何特定的单个元件方面可以彼此不同(或者彼此相似或相同)。
键值存储设备,诸如存储设备125,可以使用键来识别数据而不是逻辑块地址(LBA)。与基于块的储存器不同(在基于块的储存器中,数据预期以特定的预定义大小(例如,页或块)为单位被写入和读取),对象可以想象是任意大小的。存储在键值存储设备上的对象的大小可以由键值存储设备的容量限定。因此,对象的大小可以小于页或块,或者对象的大小可以大于页或块(虽然页或块的大小仍然可以控制对象是如何存储的,但储存器如何管理与对象如何写入或读取是分开的。)
类似地,虽然基于块的储存器可以期望LBA适合于特定的值范围(并且因此在LBA中使用特定的预定义位数),但是键可以想象是任意大小的,并且可以具有任何所需值。因为键中的位数可能不同,所以键值存储设备可能比基于块的存储设备更灵活。但也有其他考虑。例如,虽然不同应用使用的LBA可能是唯一的,但是没有什么可以阻止不同的应用尝试使用相同的键来写入数据。在这种情况下,键值存储设备可以向第二应用返回错误,通知该应用键值已经在使用中,因此不能将该值写入键值存储设备。
可由键值存储(诸如键值存储设备125)接收的一种类型请求的被称为范围查询。范围查询可以请求关于满足特定条件的键的信息。例如,范围查询可能要求与特定范围内的值相关联的所有键,或者要求存在于键值存储中的所有键,其中键本身位于特定范围内。排序方式的键可以加速处理这样的查询。
键值存储设备125可以使用主索引结构来存储和管理键值对。在一些键值SSD中,主索引结构还可以以排序的方式保存关于键的这样的信息。但每次写入新的键或删除旧的键时,这样的请求可能影响键的排序顺序。因此,在写入或删除键时,可能需要更新整个主索引结构(并且由于键值SSD通常使用闪存存储器,因此就地修改是不可能的,因此删除旧的主索引结构并写入新的主索引结构)。希望存储在主索引结构中的信息是一致的:即,实际写入键值存储设备的数据应该由主索引结构反映。因此,当主索引结构被更新时,键值存储设备通常不能处理输入/输出(I/O)请求。因此,在更新主索引结构时,一些键值存储设备可能被“阻止”处理I/O请求,从而增加键值SSD响应I/O请求所需的时间。
除了更新主索引结构对性能的影响之外,由于闪存存储器不支持数据的就地修改,更新主索引结构还增加了块经历程序擦除周期(program-erase cycle)的次数。由于闪存存储器中的单元在其可靠性可能得不到保证之前有有限数量的程序擦除周期,因此更新主索引结构可能会导致键值存储设备过早磨损。该结果被称为写入键值存储设备125的数据的写入放大因子(write amplification factor,WAF)。
解决这些问题的方法之一是延迟或避免更新主索引结构。但由于主索引结构可用于处理I/O请求,因此更新主索引结构可能不会无限期地延迟。
此解决方案还假设可以使用预写日志来确保数据在主索引结构中保持一致。但是,如果键值存储设备125可以支持原子写入操作,则可以省略预写日志的使用。可以使用原子操作来执行主索引结构的更新以包括新的键值对(尽管不一定以排序的顺序),其确保完全更新主索引结构或不执行更新。
在本发明构思的实施例中,可以引入辅索引结构。这个辅索引结构可以(在某种程度上)反映主索引结构中的信息,但是存储为辅索引结构管理的键可以被排序。在本发明构思的一些实施例中,辅索引结构可以包括来自键值对的键,但不包括存储数据的键值存储设备125上的(物理)位置。这一事实可能是在将键值对写入键值存储设备125中的实际存储器的同时(或之前)执行键记录的结果:如果位置还未知,则该位置可能不被记录,并且因此可能不被包括在辅索引结构中。在本发明构思的其他实施例中,可以通过使位置被添加到键记录期间记录的信息中,或者通过从主索引结构或闪存转换层访问位置,键值存储设备125上存储值的位置可以被包括在辅索引结构中。
使用辅索引结构有助于解决与使用主索引结构存储关于键的排序信息相关联的问题。主索引结构的更新速度很快:新的键可能会写入主索引结构的末尾,并且删除的键可能会被标记为不再有效。并且可以在不干扰主索引结构的使用的情况下更新辅索引结构,从而避免由于I/O请求被延迟而引起的任何性能问题。
虽然使用辅索引结构可能会使用附加的空间(取决于辅索引结构中存储的信息,辅索引结构的大小可能与主索引结构相当,这意味着存储两个索引结构所需的存储量大约是仅主索引结构所需存储量的两倍),如上所述,使用辅索引结构有好处:即使辅索引结构正在更新,主索引结构仍可被使用。
另外,机器105可以将辅索引结构存储在存储器115中,并且可以使用辅索引结构处理范围查询。因此,辅索引结构可以不存储在键值存储设备125上。辅索引结构可以存储在键值存储设备125上,以避免以后需要重新创建它(这将涉及读取主索引结构并对该信息进行排序,如果主索引结构中有数千或数百万个键,这可能是一个耗时的过程)。但是,当存储在键值存储设备125上时,辅索引结构可能不像主索引结构可能被更新那样频繁地被更新,从而减少WAF。
由于使用基于存储在关于键值存储设备125的更新的日志块中的信息的合并排序过程来更新辅索引结构,因此辅索引结构中的信息可以不同于主索引结构中的信息。也就是说,主索引结构可以包括尚未被添加到辅索引结构的键,并且可以省略尚未从辅索引结构中删除的键。简言之,辅索引结构中的键的数量(在键值存储设备125的寿命期间可以是零或更多)可以不同于主索引结构中的键的数量。
辅索引结构可以使用任何所需的数据结构。可使用的示例数据结构可包括B+-树、B-树、时隙页或跳跃表。另外,关于存储在数据结构中的键的信息(和其它信息)可以存储在时隙页中(时隙页可以用于以有效的方式存储不同大小的键)。
尽管图1将机器105描绘为服务器(其可以是独立的或机架式服务器),但是本发明构思的实施例可以包括任何所需的类型的机器105而不限于此。例如,机器105可以被台式机或膝上型计算机或任何其他可能受益于本发明构思的实施例的机器所取代。机器105还可以包括专用便携式计算机器、平板计算机、智能手机和其他计算机器。另外,可以从存储设备125访问数据的应用可以位于与机器105分离的另一机器中,并且经由穿越一个或多个任何类型的网络(有线、无线、全局等)的网络连接来访问机器105。
图2示出了根据本发明构思的实施例的图1的机器105的附加细节。在图2中,典型地,机器105包括一个或多个处理器110,其可包括存储器控制器120和时钟205,其可用于协调设备105的组件的操作。处理器110还可耦合到存储器115,作为示例其可包括随机存取存储器(RAM)、只读存储器(ROM),或其他状态保护媒体(state preserving media)。处理器110还可以耦合到存储设备125和网络连接器210,网络连接器210可以是例如以太网连接器或无线连接器。处理器110还可以被连接到总线215,总线215可以连接用户接口220和输入/输出接口端口,这些端口可以使用输入/输出引擎225和其他组件进行管理。
图3示出了根据本发明构思的实施例的执行键记录所涉及的操作。在图3中,主机105可以发出键值请求305。(在实践中,键值请求305可以从在主机105上运行的应用发出:为了本讨论的目的,可以忽略主机105和在主机105上运行的应用之间的区别。)作为键值请求305的结果,主机105可以发出写入请求310,其可以被发送到键值存储设备125。键值存储设备125随后可以执行两个操作:作为写入请求310的对象的键值对可以被写入主索引结构(操作315),并且操作可以被写入日志块(操作320),诸如日志块325(其也可以被称为日志书,并且可以类似于写入日志或写入缓冲区来使用)。操作315可以更新主索引结构,其可以被键值存储设备125用来存储键(并且将值在存储器中的位置与键相关联,以便该值可以以后被检索或被删除)。
操作320可将关于写入请求310的信息存储在日志块325中。所存储的信息可包括操作(或操作码)330-1(其可指示请求是将新的键值对写入键值存储设备125或将与现有键相关联的值更新为新的值)。该存储的信息还可以包括键335-1,指示受请求影响的键。
日志块325还可以存储附加信息,被标记为选项340-1(其也可以被称为元数据)。此附加信息可以被认为是请求的元数据。这样的元数据的示例可以包括与键值对中的值、键或值的大小相关的元数据以及其他元数据。选项340-1可以被包括为作为写入请求310的一部分的选项或元数据,或者选项340-1可以从写入请求310派生。
可以使用的元数据的另一个示例是键组元数据。键组元数据可用于将特定请求与键组相关联。通过将键分组在一起,键可以以不同的排列被组织。
作为可以如何使用键组的示例,考虑用户在键值存储设备125上存储三种不同类型的数据的场景:普通数据和两种类型的元数据。通过将每种类型的数据分配给不同的键组,可以将涉及每种类型数据的请求分组在一起。这种排列允许键(当被排序到辅索引结构中时,如参考图4、7-8、12-14和15进一步描述的)被分为针对不同键组的不同结构。例如,日志块325被示为与键组1相关联:与其他键组相关的请求可以被记录到与其他键组相关联的其他日志块中。因此,尽管图3仅示出了一个日志块325,但是本发明构思的实施例可以包括任意数量(零个或更多)的日志块(尽管零个日志块可以表示辅索引结构是最新的的情况,但这种情况可能不会频繁发生)。
主机105还可以发出不需要记录的请求。例如,键值存储设备125可用于存储临时文件、日志信息(journaling information)或元数据。表示这些数据的对象可能不需要被排序到辅索引结构中。键组元数据可用于识别不应被记录的键,以便以后合并到辅索引结构中。
日志块325被示为包括多个元组。日志块325可以包括多个元组,因为在辅索引结构的更新之间可能有多个请求被记录。因此,操作码330-1、键335-1和选项340-1可以表示与第一请求相关联的信息,操作码330-2、键335-2和选项340-2可以表示与第二请求相关联的信息,并且操作码330-3、键335-3和选项340-3可以表示与第三请求相关联的信息。虽然图3示出了仅与日志块325中的三个请求相关的信息,但是本发明构思的实施例可以在日志块325中存储与任意数量(零个或多个)的请求相关的信息。
最后,图3是参照写入请求310来描述的。但是本发明构思的实施例可以扩展到记录关于其他请求的信息。例如,在最简单的实现中,键值存储设备可以提供三个基本命令:GET(获得)(从键值存储设备读取数据)、PUT(放置)(将数据写入键值存储设备)和DELETE(删除)(从键值存储设备移除数据)。尽管上述描述使用GET、PUT和DELETE来识别这些命令,但是本发明构思的实施例可以包括对这些命令使用不同名称(操作码)的键值存储设备。GET命令通常不修改键值存储设备上的数据,但是PUT和DELETE命令可以修改键值存储设备上的数据。因此,DELETE命令可导致与图3中所示的操作类似的操作,就像PUT命令一样。
此外,尽管GET、PUT和DELETE表示可以由键值存储设备处理的中心命令,但是本发明构思的实施例可以扩展到提供附加命令的键值存储设备。可能影响存储在辅索引中的信息的任何这样的命令可以导致如图3所示的操作类似的操作。
图4示出了根据本发明构思的实施例的执行合并键所涉及的操作。为了将新的键信息合并到辅索引结构中,主机105可以请求已经在键值存储设备125上修改(即,写入或删除)的键的列表(如操作405所示)。然后,键值存储设备125可提供自上次辅索引结构被更新以来已如此修改的键的列表(示出为操作410)。例如,该键的列表可包括来自图3的日志块325的信息。一旦主机105接收到自上次辅索引结构被更新以来已更新的键列表,主机105可执行合并排序(如操作415所示)。该操作可涉及更新图1的存储器115中的辅索引结构。
然后,主机105可以更新存储在键值存储设备125上的辅索引结构(操作420)。当主机105向键值存储设备125发送更新辅索引结构的请求时,然后键值存储设备125可以将排序的键写入辅索引结构(如操作425所示)。最后,主机105可以发送清除键值存储设备125的请求(如操作430所示)。该操作可涉及键值存储设备125删除图3的日志块325(或至少从图3的日志块325删除数据,潜在地留下图3的日志块325以记录对存储在键值存储设备125上的键值信息的未来更新)。
图5示出了根据本发明构思的实施例的图1的存储设备125的细节。在图5中,KV-SSD 125可以包括主机接口505(其也可以被称为主机接口逻辑或HIL)、SSD控制器510、和各种闪存存储器芯片515-1至515-8(也被称为闪存存储器储存器),其可能被组织成各种信道520-1至520-4。主机接口逻辑505可以管理KV-SSD 125和其他组件(例如图1的处理器110)之间的通信。在本发明构思的一些实施例中,KV-SSD 125还可以支持其自身的网络连接(与通过作为图1的机器105的一部分的网络接口相对):在本发明构思的这些实施例中,主机接口逻辑505还可以管理与远离KV-SSD 125的设备的通信:即,不被认为是图1的机器105的一部分,但是与KV-SSD 125通信的设备。这些通信可以包括从KV-SSD 125读取数据的读取请求、向KV-SSD125写入数据的写入请求,以及删除从KV-SSD125删除数据的请求。主机接口逻辑505可以仅跨单个端口管理接口,或者它可以跨多个端口管理接口。或者,KV-SSD 125可以包括多个端口,每个端口可以具有单独的主机接口逻辑505来管理跨该端口的接口。本发明构思的实施例还可以混合各种可能性(例如,具有三个端口的SSD可以具有一个主机接口逻辑来管理一个端口和第二主机接口逻辑来管理其他两个端口)。为了支持通过网络与远程设备的直接通信,HIL 505可以包括以太网组件(图5中未示出)或一些等效的网络通信组件。
SSD控制器510可以使用闪存存储器控制器(图5中未示出)管理闪存存储器芯片515-1到515-8上的读取和写入操作以及碎片回收(garbage collection)和其他操作。SSD控制器510可以包括闪存转换层525、主索引结构530、辅索引结构535、键值命令处理程序540和键记录器545。SSD控制器510可以使用某种形式的硬件来实现:例如,作为KV-SSD 125的定制控制器,诸如专用集成电路(ASIC),具有适当软件的适当配置的现场可编程门阵列(FPGA)或某种类型的通用处理器(诸如中央处理单元(CPU)、图形处理单元(GPU)或通用GPU(GPGPU))等。
闪存转换层525也可以被称为对象转换层,其可以管理由图1的机器105使用的逻辑数据标识符(即,键值对的键)和闪存芯片515-1至515-8中的物理位置(在其中实际存储由逻辑数据标识符识别的值)之间的转换。在本发明构思的一些实施例中,闪存转换层525可以包括主索引结构530(如连接闪存转换层525和主索引结构530的线所示)和/或辅索引结构535;在本发明构思的其他实施例中,主索引结构530和/或辅索引结构535可以与闪存转换层525分离。
主索引结构530和辅索引结构535已经在上面讨论过,这里不再重复。键值命令处理程序540可以从图1的主机105(或者从远离KV-SSD125的其他机器)接收请求(也被称为命令)并处理这些请求。除了从闪存芯片515-1至515-8读取、写入和删除数据之外,键值命令处理程序540可以负责(或协助)更新主索引结构530,以及将信息传递给键记录器545。键值命令处理程序540还可适于处理专门用于协作键排序的附加命令,其可包括从图3的日志块325读取关于请求的信息和/或从图3的日志块325删除这样的请求。键记录器545可将关于请求的信息存储在图3的日志块325中。键记录器545还可包括请求中未包括的附加信息:例如,在闪存存储器芯片515-1至515-8中存储值的(物理)位置。在本发明构思的一些实施例中,键记录器545可以等待将信息存储在图3的日志块325中,直到所有要记录的信息是可用的为止。下面参考图6进一步讨论键值命令处理程序540和键记录器545。
虽然图5示出SSD控制器510包括闪存转换层525、主索引结构530、辅索引结构535、键值命令处理程序540和键记录器545,但是本发明构思的实施例可以将这些模块定位在任何所需的位置。本发明构思的实施例还可以将这些模块定位在KV-SSD 125的不同部分内:例如,这些模块中没有一个可以在SSD控制器510内。特别地,KV-SSD 125可以包括附加的存储元件550-1和550-2,其可以用于存储主索引结构530、辅索引结构535、以及其他信息,诸如图3的日志块325。附加存储元件550-1和550-2可以是“保留的”:即,不可用于用户数据的存储器,如闪存芯片515-1至515-8。或者,这些组件中的一些或全部(例如,闪存转换层525、主索引结构530、,和/或辅索引结构(535)可以存储在闪存存储器芯片515-1至515-8中。
附加存储元件550-1和550-2可以使用任何所需的硬件来实现。例如,附加存储元件550-1和550-2可以使用非易失性存储器(诸如NAND闪存存储器,如闪存芯片515-1至515-8)、电池支持的易失性存储器(诸如某种形式的电池支持RAM)、或者不带备用电池的易失性存储器(尽管在后一种情况下,存储在附加存储元件中的信息可以是不需要持久化的数据,或者可以在电源中断导致数据丢失的情况下从其他持久化数据被重新创建)来实现。附加存储元件550-1和550-2可以使用块可寻址存储器、字节可寻址存储器或键值存储器来存储数据。另外,附加存储元件550-1和550-2可以是不同的种类,既可以是用于存储数据的硬件,也可以是可以寻址该数据的方式。最后,虽然图5仅示出了两个附加存储元件550-1和550-2,但是可以存在任何数量(零个或多个)的这样的附加存储元件。
键值存储设备125还可以包括图5中未示出的附加存储器,诸如附加易失性存储器(例如,可以是各种RAM)或附加非易失性存储器。可以将主索引结构530加载到该附加存储器中,并且在该附加存储器中执行对主索引结构530的更新。然后,可以视情况将主索引结构530刷回(flushed back)主储存器(例如,闪存芯片515-1至515-8)。例如,在对主索引结构530的每次更改之后,主索引结构530可以被刷回主储存器。或者,当图1的主机105对辅索引结构535执行合并操作时,主索引结构530可以被写入主储存器(在主索引结构530的更新由于某种原因丢失的情况下,图3的日志块325也可能充当主索引结构的更新日志)。如果主索引结构530的整体太大而不能加载到该附加存储器中,则键值存储设备125还可以部分地将主索引结构530加载到该附加存储器中,适当地或者当主索引结构530的不同部分将被加载到附加存储器中时,将更新写回键值存储设备125。
虽然图5将KV-SSD 125示为包括组织成四个信道520-1至520-4的八个闪存存储器芯片515-1至515-8,但是本发明构思的实施例可以支持组织成任意数量的信道的任意数量的闪存存储器芯片。类似地,虽然图5示出了SSD的结构,但是其他存储设备(例如,硬盘驱动器)可以使用不同的结构来实现,但是具有类似的潜在好处。
图6示出了根据本发明构思的实施例的图5的键值命令处理程序540、图5的主键值索引结构和图5的键记录器545之间的交互。在图6中,键值命令处理程序540被示为能够接收多个不同的请求。该请求可以包括与从存储设备125中的存储器访问用户数据相关联的请求,诸如写入请求605、删除请求610和其他请求615(其可以包括例如读取请求)。写入请求605、删除请求610和其他请求615可以包括对键记录中使用的元数据的支持。注意,并非所有与用户数据相关联的请求都必然影响键记录:例如,当写入新的键值对和删除旧的键-值对时,可能影响图5的辅索引结构535,更新与存储设备125上的键配对的值或从存储设备125读取与键配对的值可能不涉及键记录。但是,在键值命令处理程序540支持的任何请求可能涉及键日志的范围内,这些请求可以包括键记录中使用的元数据。
当键值命令处理程序540接收到涉及键记录的请求时,键值命令处理程序540可以向键记录器545传递该请求(或者至少相关信息,诸如操作、键、和选项)。然后,键记录器545可以将该信息写入日志块325中。键记录器545可以以任何所需的方式用新信息更新日志块325。键记录器545还可从可包括在日志块325中的其他源获得附加信息:例如,存储与键配对的值的物理位置。通过使用附加(append)操作(即,将新信息写入日志块325的最后),日志块325还可以保持键记录器545处理请求的顺序,这可能是有用的信息。键值命令处理程序540(以及通常的存储设备125)也可以以其他方式正常地处理请求,适当地更新主索引结构530,并且以其他方式(经由I/O引擎620)管理存储在图5的闪存芯片515-1至515-8中的数据。
在某些情况下,键记录器545可能需要做的不仅仅是将信息写入日志块325。例如,考虑日志块325已满的情况(即,没有附加的空间将更新存储在日志块325中)。在这种情况下,键记录器545可以将日志块325存储在某处,并且开始在新的日志块中存储更新。键记录器545可将日志块325作为键值对存储在图5的闪存芯片515-1至515-8中(与可存储的用户数据相同)。或者,键记录器545可以将日志块325存储在专用存储器中,诸如在图5的附加存储元件550-1和/或550-2中。键记录器545还可以将日志块325存储在多个位置中:例如在键记录器545本地的存储器(诸如RAM或电池支持的RAM)中,以及持久存储器中(诸如图5的附加存储元件550-1和/或550-2)。
为了更新主索引结构530,键值命令处理程序540可以简单地将任何相关信息附加到主索引结构530。回想,图5的辅索引结构535可以以排序的方式存储来自主索引结构530的信息,以帮助范围查询:因此,主索引结构530可以以未排序的方式存储信息。在这种情况下,简单的附加可以足以更新主索引结构530。
键值命令处理程序540还可以包括对与管理日志块325中的信息相关的附加请求的支持。这些请求可以包括迭代请求625和日志删除请求630。迭代请求625可以用于访问来自日志块325的键和其他信息,这些日志块325还没有被合并到图5的辅索引结构535。当键值命令处理程序540接收到迭代请求625时,键值命令处理程序540可以将迭代请求625传递给键记录器545。然后,键记录器545可以从日志块325读取关于请求的信息,诸如图3的操作330-1、330-2和330-3,图3的键335-1、335-2和335-3,以及图3的选项340-1、340-2和340-3,并将该信息返回到图1的主机105。
在可以使用键组(或其他元数据)的本发明构思的实施例中,迭代请求625可以包括感兴趣的键组(或其他元数据的标识符)。以此方式,键值存储设备125可以将感兴趣的信息返回到图1的主机105。
迭代请求625还可以包括其他参数。例如,图1的主机105可以指定数字作为参数,该数字可以表示键值存储设备125返回到图1的主机105的最大更新数量。例如,图1的主机105可以请求例如响应于迭代请求625返回20个更新。如果日志块325包括二十以上的条目,则可以返回关于前20个条目的信息,并且其他条目可以留在日志块325中以供以后的迭代。因此,图1的主机105可以发送多个迭代请求625以检索关于日志块325中的所有更新的信息。
对于键值存储设备125响应于迭代请求625可返回多少信息也可能存在限制。例如,图1的主机105可能已经分配了固定量的空间,例如,大约4KB,用于键值存储设备125中关于键值对的更新的信息。该固定量的空间可以,例如,对应于日志块325的大小。如果日志块325包含的数据多于指定空间量中可能返回的数据,或者如果有足够的更新来填充多于一个的日志块325,键记录器545可仅返回由键记录器545记录的更新的子集。键记录器545可指示返回到图1的主机105的信息中的某处是否存在可请求的附加更新。例如,返回的信息的第一位或字节可能指示是否有更多的更新在等待,其中0指示没有附加更新在等待,并且1指示附加更新在等待。键记录器545还可以使用其他技术指示等待检索的附加更新的存在:例如,图1的主机105可以简单地发送迭代请求625,直到键记录器545响应说明没有进一步的更新在等待为止。因此,在本发明构思的一些实施例中,图1的主机105可以发出多个迭代请求625以检索所有更新。
键记录器545可以有许多不同的方式来响应迭代请求625。例如,键记录器545可以简单地从日志块325读取关于更新的信息并将该信息发送回主机105。如果日志块325存储在任何存储器中,诸如图5的附加存储元件550-1和/或550-2,或者在键记录器545的本地的存储器(诸如RAM)中,图1的主机105可能无法直接访问来自日志块325的信息,并且可能需要键记录器545响应于迭代请求625从日志块325提供更新(如果日志块325存储在持久存储器中,诸如图5的附加存储元件550-1和/或550-2,则键记录器545可能将日志块325加载到键记录器545的本地的存储器中,以加快对日志块325中的信息的访问)。另一方面,如果日志块325像任何其他键值对一样被写入图8的闪存芯片515-1至515-8中,则键记录器545可以仅将与日志块325相关联的键返回到图1的主机105。然后,主机105可以发出读取请求以读取日志块325中的信息。
在接收到日志删除请求630时,键记录器545随后可以从日志块325删除信息。响应于日志删除请求630而被删除的信息可以是关于作为迭代请求625的结果而先前迭代到图1的主机105的请求的信息。
键记录器545可以有许多方式来处理日志删除请求630。例如,键记录器545可以存储关于发送到图1的主机105的最后更新的信息。然后,在接收到日志删除请求630时,键记录器545可以删除日志块325中的、直到被追踪的键的所有信息,或者可以直接删除日志块325。(回想,本发明构思的实施例的优点之一是,由于合并排序操作,其他I/O操作可以不中断地继续进行)。即使在迭代请求625被处理期间或之后,键记录器545可以向日志块325添加新信息。因此,键记录器545可能不会假设:响应于迭代请求625,日志块325中的所有信息已被发送到主机105。
也可能发生图1的主机105可以从日志块325请求一些(而不是全部)信息。例如,图1的主机105可以在迭代请求625中包括一些要返回的更新。如果该数字小于存储在日志块325中的更新的数量,则键记录器545可能知道并非所有信息都已从日志块325读取并发送到主机105。该示例演示了日志块325即使在迭代请求630之后仍然可以存储更新的另一种情况。
在本发明构思的另一实施例中,图1的主机105可以包括由图1的主机105接收的最后信息的标识符或要删除的一些更新作为日志删除请求630的参数。然后,键记录器545可以从日志块325中删除直到指定的更新的信息。
注意,为了知道要从日志块325中删除哪些信息以及要在日志块325中保留哪些信息,键记录器545可能需要的不仅仅是键。例如,考虑日志块325存储关于三个请求的信息的情况:第一请求写入标记为k1的键的值,第二请求写入标记为k2的键的值,并且第三请求删除标记为k1的键的值,并且假设图1的主机105发送日志删除请求630,但仅指示标记为k1的键作为要删除的最后键。如果键记录器545仅从日志块325删除到涉及标记为k1的键的第一请求的信息,则第二和第三请求将保留在日志块325中。如果图1的主机105已经接收到关于这两个请求的信息,那么将它们留在日志块325中将导致图1的主机105在不同的迭代请求625中多次接收相同的信息。另一方面,如果图1的主机105只接收到关于第一请求的信息,则删除关于第二和第三请求的信息将意味着图1的主机105将不接收关于这些请求的信息。在任一情况下,图5的辅索引结构535可能最终与主索引结构530不一致。因此,键记录器545可能需要来自图1的主机105的更多信息而不仅仅是键,并且日志删除请求630可以包括例如关于图3的操作330-1、330-2或330-3或图3的选项340-1、340-2、或340-3的信息,其可识别迭代到图1的主机105的最后更新,或日志块325中的条目的标识符(诸如条目号,其中从日志块325中的第一条条目开始枚举日志块325中的条目)。
如上所述,在本发明构思的一些实施例中,键记录器545可以将日志块325存储在专用存储器中,该专用存储器是图1的主机105经由键值请求无法访问的。在本发明构思的这样的实施例中,日志删除请求630可用于删除日志块325中的信息。但在本发明构思的实施例中,日志块325可作为键值对(类似于用户数据)存储在图5的闪存芯片515-1至515-8中,图1的主机105可以通过发出删除请求610来删除日志块325。在本发明构思的这样的实施例中,可以省略日志删除请求630以支持删除请求610。
图7示出了根据本发明构思的实施例的执行合并键所涉及的操作的替代视图。在图7中,主机105可以向键值存储设备125发送迭代请求625。在响应705中,键值存储设备125可以从图3的日志块325返回信息。如上所述,迭代请求625和响应705可以适当地执行多次。然后,主机105可以从响应705中返回的信息中提取键,如操作710中所示。
然后,主机105可以发送读取请求715以读取图5的辅索引结构535,键值存储设备125响应720返回图5的辅索引结构535。在主机105尚未存储辅索引结构535的情况下可以执行操作715和720:例如,如果电源中断导致图1的主机105的图1的存储器115中的图5的辅索引结构535丢失。(如上所述,在键值存储设备125上存储图5的辅索引结构535可以避免在这种情况下从头重新创建图5的辅索引结构535的需要。)如果主机105已经具有图5的辅索引结构535的副本,则可以省略操作715和720。
然后,主机105可对图5的辅索引结构535执行更新操作725。该更新操作725可涉及执行合并排序操作以向图5的辅索引结构535添加键,如图3的日志块325的更新所示(并从图5的辅索引结构535删除键,如图3的日志块325的更新所示),并产生排序的结构。
最后,主机105可以向键值存储设备125发送写入请求730以将图5的辅索引结构535写入(同样,为了避免主机105需要从头重新创建图5的辅索引结构535)。写入请求730是可选的,因为键值存储设备125可能不需要存储图5的辅索引结构535。最后,主机105可以向键值存储设备125发送日志删除请求720,以从图3的日志块325删除更新。
图8示出了根据本发明构思的实施例,图1的处理器110将键合并到图5的辅索引结构535中。在图8中,处理器110可以接收日志块325(或者更准确地说,从日志块325接收更新)。然后,处理器110可以使用这些更新将合并排序键到第二辅索引结构805中以产生新的辅索引结构535。
在本发明构思的一些实施例中,协同键排序可以由图1的键值存储设备125执行键记录来执行,而图1的主机105可以执行辅索引结构535的更新。这种组合利用图1的键值存储设备125的能力来追踪需要对图5的辅索引结构535进行哪些更改,并利用图1的主机105的处理能力来对辅索引结构535进行更新以避免键值存储设备125在更新图5的主索引结构530时临时阻塞I/O。但是,由于处理器110可以是任何类型的处理器,因此图1的键值存储设备125应该包括处理器,该处理器可用于向图1的键值存储设备125内部生成辅索引结构535,而不涉及图1的主机105。因此,如果图1的键值存储设备125包括处理器,则其可以是CPU、GPU、GPGPU、适当配置的FPGA、适当设计的ASIC,或者任何其他类型的处理器,此处理器,而不是图1的主机105,可以负责生成辅索引结构535。换句话说,本发明构思的实施例可以包括上述和/或以下所述的任何功能,这些功能是由图1的主机105执行的,而不是由图1的键值存储设备125的处理器执行的(为了避免图1的键值存储设备125的其他处理被延迟,在本发明构思的一些实施例中,可以生成和/或更新辅索引结构535的该处理器可以与任何其他处理器分离,诸如由图5的SSD控制器510使用的处理器,这可能是图1的键值存储设备125的一部分。)
图9示出了根据本发明构思的实施例的用于图1的存储设备125执行键记录的示例过程的流程图。在图9中,在块905,图5的键值命令处理程序540可从图1的主机105接收请求,诸如图6的写入请求605或图6的删除请求610。在块910,图5的键值命令处理程序540可处理该请求。在块915,图5的键值命令处理程序540可以更新图5的主索引结构530以反映由请求引起的任何改变。
在块920,图5的键记录器545可将键和其它信息记录在图3的日志块325中。如上文参考图3所讨论的,该其它信息可包括图3的操作码330-1、330-2和330-3和/或图3的选项340-1、340-2和340-3。此外,图5的键记录器545可以在记录键和其他信息时使用请求中的信息,诸如键组元数据。最后,在块925,图1的键值存储设备125可以将请求的结果返回给图1的主机105。
图10示出了根据本发明构思的实施例的用于图5的键记录器使用键组元数据记录键的示例过程的流程图。在图10中,在块1005,图5的键记录器545可以确定请求是否包括任何键组元数据。如果是,则在块1010,图5的键记录器545可以将与该键组相关联的关于请求的信息记录在图3的日志块325中。否则,在块1015,图5的键记录器545可将关于请求的信息记录在图3的日志块325中,它是通用的(即,与特定键组无关)。
图11A-11B示出了根据本发明构思的实施例的用于图1的存储设备125以帮助图1的处理器110将键合并到图5的辅索引结构535中的示例过程的流程图。在图11A中,在块1105,图5的键值命令处理程序540可以从图1的主机105接收图6的迭代请求625。在块1110,图5的键记录器545可以确定图3的日志块325是否作为对象(即,键值对)存储在图1的键值存储设备125的主储存器中。如果是这样,然后,在块1115,图5的键记录器545可以将与图3的日志块325相关联的键确定为键值对,并且在块1120,图5的键记录器545可以将该键返回到图1的主机105。如果在图1的键值存储设备125的主储存器中存在作为对象存储的图3的多个日志块325,块1115和1120可以分别用于识别每个这样的日志块对象的键。或者,图5的键记录器545可以仅返回作为对象存储在图1的键值存储设备125的主储存器中的图3的一个日志块325的键,并且让图1的主机105分别对每个这样的日志块重复迭代请求625(块1105)。
另一方面,如果图3的日志块325没有作为对象存储在图1的键值存储设备125的主储存器中(换句话说,日志块325存储在图1的键值存储设备125的主储存器之外的某处,诸如图5的附加存储元件550-1和/或550-2,因此可能无法由图1的主机105直接访问),则在块1125,图5的键记录器545可以访问关于存储在图3的日志块325中的操作的信息,并且在块1130,图5的键记录器545可以将这样的信息返回到图1的主机105。如果存在图3的多于一个的日志块325,可以针对图3的每个日志块325重复块1125和1130,或者图1的主机105可以多次发出图6的迭代请求625以接收关于图1的键值存储设备125中更新的键值的请求的所有信息。
在本发明构思的又一实施例中,即使图3的日志块325可以作为对象存储在图1的键值存储设备125的主储存器中,图5的键值日志器545也可以继续执行块1125和1130。因此,即使图3的日志块325作为对象存储在图1的键值存储设备125中,图5的键记录器545仍然可以迭代来自图3的日志块325的信息,而不是仅仅提供与图3的日志块325相关联的键并让图1的主机105读取存储图3的日志块325的对象。
无论图5的键记录器545是将关于从图3的日志块325的更新的信息直接返回到图1的主机105,还是图5的键记录器545向图1的主机105提供识别图3的日志块325存储的图1的键值存储设备125的主储存器中的对象的键,在块1135(图11B),图5的键值命令处理程序540可以接收日志删除请求630。(注意,在图3的日志块325作为对象存储在图1的键值存储设备125的主储存器中的情况下,日志删除请求630可以是图6的删除请求610,因为图3的日志块325可以像存储在图1的键值存储设备125的主储存器中的任何其它对象一样被删除)。然后,在块1140,图1的键值存储设备125可以删除图3的日志块325(或者正在删除图1的键值存储设备125的主储存器中存储图3的日志块325的对象,或者通过图5的键值日志器545从图3的日志块325删除更新,作为适当的如何存储图3的日志块325)。
图12示出了根据本发明构思的实施例的图1的处理器110将键合并到图5的辅索引结构535中的示例过程的流程图。在图12中,在块1205,图1的主机105可以从图1的键值存储设备125请求来自图3的日志块325的键(和其它信息),并且在块1210,图1的主机105可以从图1的键值存储设备125接收该键(和其它信息)。(图1的主机105可以使用图6的迭代命令625执行该请求。)
在块1215,图5的主机105可以使用从图1的键值存储设备125接收的键(和其他信息)来生成图5的辅索引结构535,图1的主机105可以向图1的键值存储设备125发送图6的写入请求605以将图5的辅索引结构535写入。最后,在块1225,图1的主机105可以向图1的键值存储设备125发送图6的日志删除请求630以删除图3的日志块325。
如上所述,在本发明构思的一些实施例中,图1的键值存储设备125可以执行图5的辅索引结构535的更新,特别是当图1的键值存储设备125可包括图1的处理器110(和存储器115)(或其自身的处理器110和/或图1的存储器115)以在不干扰图1的键值存储设备125的其它操作(特别是I/O操作)的情况下执行更新时。当图1的键值存储设备125的一部分可以使用图12中概述的示例过程时,图1的处理器110还可以以某些方式利用其在图1的键值存储设备125中的存在。图14示出了根据本发明构思的实施例的图1的键值存储设备将键合并到图5的辅索引结构中的示例过程的流程图。
图13示出了根据本发明构思的实施例的用于图1的处理器110从图3的日志块325访问键的示例过程的流程图。具体地,图13示出了当图3的日志块325存储在图1的键值存储设备125的主储存器中时,图1的处理器110从图3的日志块325访问键的示例过程的流程图。在图13中,图1的主机105可以从图1的键值存储设备125接收识别存储在图1的键值存储设备125的主储存器中的对象的键。在块1310,图1的主机105可以使用接收的键向键值存储设备125发送读取请求。在块1315,响应于读取请求,图1的主机105可以从键值存储设备125接收图3的日志块325。最后,在块1320,图1的主机105可以访问从图1的键值存储设备125接收的来自图3的日志块325的键(和其他信息)。
图14类似于图12,但是当图1的处理器110包括在图1的键值存储设备125中时,图1的处理器110可以直接访问图3的日志块325,而不是从图1的键值存储设备125请求键,无论是存储在图1的键值存储设备125的主储存器中,还是存储在图5的附加存储元件550-1和/或550-2中(图1的主机105可能无法访问)。因此,在图14的块1405,图1的处理器110可以访问图3的日志块325,并且在块1410,图1的处理器110可以从图3的日志块325读取键(和其他信息)。图14的其余(块1215、1220和1225)可以由图1的处理器110在图1的键值存储设备125内执行,与由图12的主机105执行的相同,如图12的示例过程的流程图所示。当包括在图1的键值存储设备125中时,也可以由图1的处理器110执行下面的图15-16,无论是否明确描述。
图15示出了根据本发明构思的实施例的图1的处理器110将键与图8的第二辅索引结构805合并的示例过程的流程图。在图15中,在块1505,图1的处理器110可以从图1的键值存储设备125读取图8的第二辅索引结构805。在块1510,图1的处理器110可以执行合并排序操作,以将从图3的日志块325读取的键(和其他信息)合并到图8的第二辅索引结构805中,以产生图5的第二辅索引结构535。
图16示出了根据本发明构思的实施例的图1的处理器110请求删除图3的日志块325的示例过程的流程图。在图16中,在块1605,图1的处理器110可以发送图6的日志删除请求630,请求图5的键记录器545删除图3的日志块325。或者(例如,如果图3的日志块325存储在图1的键值存储设备125的主储存器中),图1的处理器110可以发送图6的删除请求610以删除图3的日志块325。在块1605,图1的处理器110可以发送与日志块相关联的键的删除请求。
在图16中未示出的是,当图1的处理器110包括在图1的键值存储设备125中时,可以使用图1的主机105不可用的其他手段直接删除图3的日志块325(即,使用仅在图1的键值存储设备125内部可用的功能,诸如能够直接从附加存储元件550-1和/或550-2中删除数据)。本发明构思的实施例可以包括使用任何其他手段删除图3的日志块325来删除图3的日志块325。
图9-图16中,示出了本发明构思的一些实施例。但是本领域技术人员将认识到,通过改变块的顺序、通过省略块或者通过包括附图中未示出的链接,而不考虑任何可以具体省略的元素也可以实现本发明构思的其他实施例。无论是否明确描述,流程图的所有这些变化都被认为是本发明构思的实施例。
本发明构思的实施例包括相对于一些实现的技术优势。通过分离键记录和合并的过程,在将合并过程留给主机时,键值存储设备可以支持键记录。此外,由于合并过程的结果是辅索引结构,因此用于管理键值存储设备中的键值对的主索引结构不受合并过程的影响。此事实意味着键值存储设备可以继续将主索引结构用于输入/输出目的,即使辅索引结构正在被更新。通过避免键值存储设备必须中断或以其他方式延迟输入/输出处理,键值存储设备可以提供改进的性能。但是辅索引结构仍然可以用来满足范围查询。
以下讨论旨在提供可在其中实施本发明构思的某些方面的一个或多个适当机器的简要、一般性描述。至少部分地,可以通过来自诸如键盘、鼠标等的输入设备的输入,以及通过从另一台机器接收的指令、与虚拟现实(VR)环境的交互、生物测定反馈或其他输入信号来控制机器或多个机器。如本文所使用的,术语“机器”指在广泛地包括单个机器、虚拟机或通信耦合机器、虚拟机或一起操作的设备的系统。示例性机器包括诸如个人计算机、工作站、服务器、便携式计算机、手持设备、电话、平板电脑等的计算设备,以及诸如私人或公共交通(例如,汽车、火车、出租车等)的运输设备。
机器或多个机器可以包括嵌入式控制器,诸如可编程或不可编程逻辑设备或阵列、专用集成电路(ASIC)、嵌入式计算机、智能卡等。机器或多个机器可以利用到一个或多个远程机器的一个或多个连接,诸如通过网络接口、调制解调器或其他通信耦合。机器可以通过物理和/或逻辑网络(诸如内联网、因特网、局域网、广域网等)互连。本领域技术人员将理解,网络通信可以利用各种有线和/或无线短程或远程载波和协议,包括射频(RF)、卫星、微波、电气与电子工程师协会(Institute of Electrical and Electronics Engineers,IEEE)802.11、光学、红外线、电缆、激光等。
本发明构思的实施例可以通过参考或结合相关联的数据来描述,相关数据包括功能、程序、数据结构、应用程序等,当被机器访问时,这些功能、过程、数据结构、应用程序等导致机器执行任务或定义抽象数据类型或低级硬件上下文。相关联的数据可以存储在例如易失性和/或非易失性存储器(例如,RAM、ROM等)中,或者存储在其他存储设备及其相关联的存储介质中,包括硬盘驱动器、软盘、光存储器、磁带、闪存存储器、记忆棒、数字视频盘、生物存储器等。相关联的数据可以以分组、串行数据、并行数据、传播信号等形式在传输环境(包括物理和/或逻辑网络)上被传送,并且可以以压缩或加密格式被使用。相关联的数据可以在分布式环境中被使用,并且可以本地和/或远程存储以供机器访问。
本发明构思的实施例可以包括有形的、非暂时性的机器可读介质,所述介质包括可由一个或多个处理器执行的指令,所述指令包括执行如本文所述的本发明构思的元件的指令。
在参考图示实施例描述和图示了本发明构思的原理之后,将认识到图示实施例可以在不脱离这些原理的情况下在布置和细节上进行修改,并且可以以任何所需的方式进行组合。并且,尽管前面的讨论集中于特定实施例,但是其他配置被考虑。特别地,即使在本文中使用诸如“根据本发明构思的实施例”等的表达,这些短语意指一般地引用实施例可能性,并且不意指将本发明构思限制到特定实施例配置。如本文所使用的,这些术语可以引用可组合到其他实施例中的相同或不同实施例。
上述说明性实施例不应被解释为限制其发明构思。尽管已经描述了一些实施例,但是本领域技术人员将容易理解,在实质上不脱离本公开的新颖教导和优点的情况下,可以对这些实施例进行许多修改。因此,所有这些修改意在包括在权利要求书中定义的本发明构思的范围内。
本公开的实施例可以扩展到以下声明(statement),但不限于此:
声明1.本发明构思的实施例包括一种键值(KV)存储设备,包括:
第一储存器,用于存储数据,所述第一储存器包括持久储存器;
第二储存器,用于存储主索引结构,所述主索引结构将第一键映射到存储值的所述第一储存器中的第一位置,所述第一键和所述值形成键值对;
控制器,使用所述第一储存器来处理从主机接收的读取请求、写入请求或删除请求中的至少一个;和
第三储存器,用于存储辅索引结构,所述辅索引结构存储所述第一键,其中,所述辅索引结构被排序。
声明2.本发明构思的一个实施例包括根据声明1所述的KV存储设备,其中,KV存储设备包括KV固态驱动器(SSD)。
声明3.本发明构思的一个实施例包括根据声明1所述的KV存储设备,其中,第三储存器将键映射到存储所述值的第一储存器中的第一位置。
声明4.本发明构思的一个实施例包括根据声明1所述的KV存储设备,其中,KV存储设备可以使用第一辅索引结构来响应范围查询。
声明5.本发明构思的一个实施例包括根据声明1所述的KV存储设备,其中,第一辅索引结构包括B+-树、B-树、时隙页或跳跃表中的至少一个。
声明6.本发明构思的一个实施例包括根据声明1所述的KV存储设备,其中,第一存储设备包括第二存储器和第三存储器中的至少一个。
声明7.本发明构思的一个实施例包括根据声明1所述的KV存储设备,还包括第四储存器,所述第四储存器存储日志块,所述日志块包括第二键,所述第二键和第二位置被存储在所述主索引结构中。
声明8.本发明构思的一个实施例包括根据声明7所述的KV存储设备,其中,所述第一辅索引结构不包括所述第二键。
声明9.本发明构思的一个实施例包括根据声明7所述的KV存储设备,其中,所述第四储存器包括非易失性存储器和电池支持的易失性存储器中的至少一个。
声明10.本发明构思的一个实施例包括根据声明7所述的KV存储设备,其中,所述第四储存器包括块存储器、键值存储器或字节可寻址存储器中的至少一个。
声明11.本发明构思的一个实施例包括根据声明7所述的KV存储设备,其中,所述第一存储设备包括所述第四存储设备。
声明12.本发明构思的一个实施例包括根据声明7所述的KV存储设备,其中,所述日志块还包括操作标识符和元数据中的至少一个。
声明13.本发明构思的一个实施例包括根据声明7所述的KV存储设备,其中,所述日志块与至少两个日志块中的一个相关联,至少两个日志块中的每个日志块与键组标识符相关联。
声明14.本发明构思的一个实施例包括根据声明13所述的KV存储设备,其中,所述写入请求或所述删除请求中的至少一个可以包括键组标识符作为元数据。
声明15.本发明构思的一个实施例包括根据声明7所述的KV存储设备,还包括键记录器,用于至少部分地基于来自所述主机的所述写入请求或所述删除请求中的至少一个将所述第二键添加到所述日志块,包括所述第二键的所述写入请求或删除请求中的至少一个。
声明16.本发明构思的一个实施例包括根据声明15所述的KV存储设备,其中,所述键记录器至少部分地基于从所述主机接收到迭代请求而向所述主机发送所述第二键。
声明17.本发明构思的一个实施例包括根据声明15所述的KV存储设备,其中,所述键记录器发送与所述日志块相关联的第三键。
声明18.本发明构思的一个实施例包括根据声明17所述的KV存储设备,其中,所述主机可以使用所述读取请求来请求所述日志块。
声明19.本发明构思的一个实施例包括根据声明15所述的KV存储设备,其中,所述键记录器至少部分地基于从所述主机接收到日志删除请求来删除所述日志块。
声明20.本发明构思的一个实施例包括根据声明15所述的KV存储设备,还包括从所述日志块生成所述第一辅索引结构的处理器。
声明21.本发明构思的一个实施例包括根据声明20所述的KV存储设备,其中,处理器包括中央处理单元(CPU)、图形处理单元(GPU)、通用GPU(GPGPU)、现场可编程门阵列(FPGA)、以及专用集成电路(ASIC)中的至少一个。
声明22.本发明构思的一个实施例包括根据声明20所述的KV存储设备,其中,所述处理器从所述日志块生成所述第一辅索引结构和第二辅索引结构。
声明23.本发明构思的一个实施例包括根据声明22所述的KV存储设备,其中,所述处理器对所述第二辅索引结构中的所述第二键和数据执行合并排序算法。
声明24.本发明构思的一个实施例包括根据声明15所述的KV存储设备,其中,所述键记录器至少部分地基于来自所述主机的所述写入请求将所述第二位置添加到所述日志块。
声明25.本发明构思的一个实施例包括根据声明24所述的KV存储设备,其中,所述键记录器至少部分地基于从所述主机接收到迭代请求而将所述第二位置发送到所述主机。
声明26.本发明构思的一个实施例包括一种方法,包括:
在键值(KV)存储设备处从主机接收请求,请求至少包括操作和第一键,操作包括写入操作或删除操作中的至少一个;
至少部分地基于操作和所述第一键,使用所述KV存储设备的第一储存器来处理所述请求,从而确定与所述第一键相关联的所述第一储存器中的位置;
至少部分地基于所述操作、所述第一键和所述位置来更新所述KV存储设备的主索引结构;
将所述操作和所述第一键记录在所述KV存储设备的日志块中;以及
将请求的结果从所述KV存储设备返回给所述主机。
声明27.本发明构思的一个实施例包括根据声明26所述的方法,其中,记录所述KV存储设备的日志块中的所述操作和所述第一键包括记录所述KV存储设备的所述日志块中的位置。
声明28.本发明构思的一个实施例包括根据声明26所述的方法,其中,所述KV存储设备包括KV固态驱动器(SSD)。
声明29.本发明构思的一个实施例包括根据声明26所述的方法,其中,至少部分地基于所述操作、所述第一键、所述位置,在所述KV存储设备处从所述主机接收所述请求、使用所述KV存储设备的所述第一储存器处理所述请求、更新所述KV存储设备的主索引结构,并且记录所述KV存储设备的所述日志块中的所述操作和所述第一键作为原子操作处理。
声明30.本发明构思的一个实施例包括根据声明26所述的方法,其中:
所述请求还包括键组元数据;和
将所述操作和所述第一键记录在所述KV存储设备的所述日志块中包括至少部分基于所述键组元数据将所述操作和所述第一键记录在所述KV存储设备的至少两个日志块之一中。
声明31.本发明构思的一个实施例包括根据声明26所述的方法,还包括:
接收迭代请求,其中,所述迭代请求不同于读取请求;
从日志块读取所述第一键;和
返回所述第一键。
声明32.本发明构思的一个实施例包括根据声明31所述的方法,其中:
从所述日志块读取所述第一键包括从所述日志块读取位置;和
返回所述第一键包括返回所述位置。
声明33.本发明构思的一个实施例包括根据声明31所述的方法,还包括:
接收日志删除请求,其中,所述日志删除请求不同于删除请求;和
从所述KV存储设备中删除所述日志块。
声明34.本发明构思的一个实施例包括根据声明26所述的方法,还包括:
接收迭代请求,其中,所述迭代请求不同于读取请求;
识别与所述日志块相关联的第二键;和
返回所述第二键。
声明35.本发明构思的一个实施例包括一种方法,包括:
从键值(KV)存储设备上的日志块请求第一键;
从所述KV存储设备接收所述第一键;和
至少部分地基于所述第一键生成第一辅索引结构,所述第一辅索引结构至少根据所述第一键和第二键被排序,
其中,第一辅索引结构不同于由所述KV存储设备用于处理包括所述第一键的读取请求、包括所述第一键的写入请求或包括所述键的删除请求的主索引结构。
声明36.本发明构思的一个实施例包括根据声明35所述的方法,其中:
从所述KV存储设备上的所述日志块请求所述第一键包括从所述KV存储设备上的所述日志块请求位置;
从所述KV存储设备接收所述第一键包括从所述KV存储设备接收所述位置;和
至少部分基于所述第一键生成第一辅索引结构包括至少部分基于所述第一键和所述位置生成所述第一辅索引结构。
声明37.本发明构思的一个实施例包括根据声明35的方法,其中,所述KV存储设备包括KV固态驱动器(SSD)。
声明38.本发明构思的一个实施例包括根据声明35的方法,其中,所述第一辅索引结构包括B+-树、B-树、时隙页或跳跃表中的至少一个。
声明39.本发明构思的一个实施例包括根据声明35所述的方法,其中:
从所述KV存储设备上的所述日志块请求所述键包括由主机从所述KV存储设备上的所述日志块请求所述第一键;
从所述KV存储设备接收所述第一键包括在所述主机处从所述KV存储设备接收所述第一键;和
生成所述第一辅索引结构包括至少部分基于所述第一键在主机上生成所述第一辅索引结构。
声明40.本发明构思的一个实施例包括根据声明39所述的方法,其中,在主机处从所述KV存储设备接收所述第一键包括:
从所述KV存储设备接收与所述主机处的所述日志块相关联的第二键;
由所述主机使用所述第二键从所述KV存储设备请求所述日志块;
从所述KV存储设备接收主机处的所述日志块;和
由主机从所述日志块访问所述第一键。
声明41.本发明构思的一个实施例包括根据声明35所述的方法,其中:
从所述KV存储设备上的所述日志块请求所述第一键包括由所述KV存储设备的处理器从所述KV存储设备上的所述日志块请求所述第一键;
从所述KV存储设备接收所述第一键包括在所述KV存储设备的所述处理器处接收所述第一键;和
生成所述第一辅索引结构包括至少部分地基于所述第一键在所述KV存储设备的所述处理器上生成所述第一辅索引结构。
声明42.本发明构思的一个实施例包括根据声明41所述的方法,其中:
由所述KV存储设备的处理器从所述KV存储设备上的所述日志块请求所述第一键包括访问所述KV存储设备上的所述日志块的位置;
在所述KV存储设备的所述处理器处接收所述第一键包括从所述KV存储设备上的所述日志块的位置读取所述第一键。
声明43.本发明构思的一个实施例包括根据声明35所述的方法,其中,至少部分基于所述第一键生成所述第一辅索引结构包括将所述第一键与第二辅索引结构合并。
声明44.本发明构思的一个实施例包括根据声明43的方法,其中,所述第二辅索引结构被存储在存储器中。
声明45.本发明构思的一个实施例包括根据声明44的方法,其中,至少部分基于所述第一键生成所述第一辅索引结构还包括将第二辅索引结构从所述KV存储设备读入所述存储器。
声明46.本发明构思的一个实施例包括根据声明43的方法,至少部分基于所述第一键生成所述第一辅索引结构还包括请求从所述KV存储设备中删除所述日志块。
声明47.本发明构思的一个实施例包括根据声明46的方法,其中,请求从所述KV存储设备删除所述日志块包括从主机向所述KV存储设备发送请求以从所述KV存储设备删除所述日志块。
声明48.本发明构思的一个实施例包括根据声明46的方法,其中,请求所述日志块从所述KV存储设备被删除包括从所述KV存储设备删除所述日志块。
声明49.本发明构思的一个实施例包括根据声明43的方法,至少部分基于所述第一键生成所述第一辅索引结构还包括将所述第一辅索引结构写入所述KV存储设备。
声明50.本发明构思的一个实施例包括一种物品(article),所述物品包括一种非暂时性存储介质,该非暂时性存储介质在其上存储有指令,当由机器执行指令时,该指令会导致:
在键值(KV)存储设备处从主机接收请求,所述请求包括至少一个操作和第一键,所述操作包括写入操作或删除操作中的至少一个;
至少部分地基于所述操作和所述第一键,使用所述KV存储设备的第一储存器来处理所述请求,从而确定与所述第一键相关联的的所述第一储存器中的位置;
至少部分地基于所述操作、所述第一键和所述位置来更新所述KV存储设备的主索引结构;
将所述操作和所述第一键记录在所述KV存储设备的日志块中;和
从所述KV存储设备向所述主机返回请求的结果。
声明51.本发明构思的一个实施例包括根据声明50的物品,其中,记录所述KV存储设备的所述日志块中的所述操作和所述第一键包括记录所述KV存储设备的所述日志块中的位置。
声明52.本发明构思的一个实施例包括根据声明50的物品,其中,所述KV存储设备包括KV固态驱动器(SSD)。
声明53.本发明构思的一个实施例包括根据声明50的物品,其中,至少部分地基于所述操作、所述第一键和所述位置,从所述主机在所述KV存储设备处接收请求、使用所述KV存储设备的所述第一储存器处理请求、更新所述KV存储设备的所述主索引结构、所述第一键和所述位置,并且记录所述KV存储设备的所述日志块中的所述操作和所述第一键作为原子操作处理。
声明54.本公开的一个实施例包括根据声明50所述的物品,其中:
请求还包括键组元数据;和
将所述操作和所述第一键记录在所述KV存储设备的所述日志块中包括至少部分基于所述键组元数据将所述操作和所述第一键记录在所述KV存储设备的至少两个日志块之一中。
声明55.本发明构思的一个实施例包括根据声明50所述的物品,非暂时性存储介质在其上还存储了指令,当机器执行指令时,该指令会导致:
接收迭代请求,其中,所述迭代请求不同于读取请求;
从所述日志块读取所述第一键;和
返回所述第一键。
声明56.本发明构思的一个实施例包括根据声明55所述的物品,其中:
从所述日志块读取所述第一键包括从所述日志块读取位置;和
返回所述第一键包括返回所述位置。
声明57.本发明构思的一个实施例包括根据声明55所述的物品,非暂时性存储介质在其上还存储了指令,当机器执行指令时,该指令会导致:
接收日志删除请求,其中,所述日志删除请求不同于删除请求;和
从所述KV存储设备中删除所述日志块。
声明58.本发明构思的一个实施例包括根据声明50所述的物品,非暂时性存储介质在其上还存储了指令,当机器执行指令时,该指令会导致:
接收迭代请求,其中,所述迭代请求不同于读取请求;
识别与所述日志块相关联的第二键;和
返回所述第二键。
声明59.本发明构思的一个实施例包括一种物品,所述物品包括一种非暂时性存储介质,该非暂时性存储介质在其上存储有指令,当由机器执行指令时,该指令会导致:
从键值(KV)存储设备上的日志块请求键;
从所述KV存储设备接收第一键;和
至少部分地基于所述第一键生成第一辅索引结构,所述第一辅索引结构根据至少所述第一键和第二键被排序,
其中,所述第一辅索引结构不同于由所述KV存储设备用于处理包括所述第一键的读取请求、包括所述第一键的写入请求或包括所述第一键的删除请求的主索引结构。
声明60.本发明构思的一个实施例包括根据声明59所述的物品,其中:
从所述KV存储设备上的所述日志块请求所述第一键包括从所述KV存储设备上的所述日志块请求位置;
从所述KV存储设备接收所述第一键包括从所述KV存储设备接收所述位置;和
至少部分基于所述第一键生成辅索引结构包括至少部分基于所述第一键和所述位置生成所述第一辅索引结构。
声明61.本发明构思的一个实施例包括根据声明59所述的物品,其中,所述KV存储设备包括KV固态驱动器(SSD)。
声明62.本发明构思的一个实施例包括根据声明59所述的物品,其中,所述第一辅索引结构包括B+-树、B-树、时隙页或跳跃表中的至少一个。
声明63.本发明构思的一个实施例包括根据声明59所述的物品,其中:
从所述KV存储设备上的所述日志块请求所述第一键包括由主机从所述KV存储设备上的所述日志块请求所述第一键;
从所述KV存储设备接收所述第一键包括在所述主机处从所述KV存储设备接收所述第一键;和
生成所述第一辅索引结构包括至少部分基于所述第一键在所述主机上生成所述第一辅索引结构。
声明64.本发明构思的一个实施例包括根据声明63的物品,其中,在所述主机处从所述KV存储设备接收第一键包括:
从所述KV存储设备接收与主所述机处的所述日志块相关联的第二键;
由所述主机使用所述第二键从所述KV存储设备请求所述日志块;
从所述KV存储设备接收所述主机处的所述日志块;和
由所述主机从所述日志块访问所述第一键。
声明65.本发明构思的一个实施例包括根据声明59所述的物品,其中:
从所述KV存储设备上的所述日志块请求所述第一键包括由所述KV存储设备的处理器从所述KV存储设备上的所述日志块请求所述第一键;
从所述KV存储设备接收所述第一键包括在所述KV存储设备的所述处理器处接收所述第一键;和
生成所述第一辅索引结构包括至少部分地基于所述第一键在所述KV存储设备的所述处理器上生成所述第一辅索引结构。
声明66.本发明构思的一个实施例包括根据声明65所述的物品,其中:
由所述KV存储设备的处理器从所述KV存储设备上的所述日志块请求所述第一键包括访问所述KV存储设备上的所述日志块的位置;
在所述KV存储设备的所述处理器处接收所述第一键包括从所述KV存储设备上的所述日志块的位置读取所述第一键。
声明67.本发明构思的一个实施例包括根据声明59所述的物品,其中,至少部分基于所述第一键生成所述第一辅索引结构包括将所述第一键与第二辅索引结构合并。
声明68.本发明构思的一个实施例包括根据声明67所述的物品,其中,所述第二辅索引结构被存储在存储器中。
声明69.本发明构思的一个实施例包括根据声明68所述的物品,其中,至少部分基于所述第一键生成所述第一辅索引结构还包括将所述第二辅索引结构从所述KV存储设备读入所述存储器。
声明70.本发明构思的一个实施例包括根据声明67所述的物品,至少部分基于所述第一键生成所述第一辅索引结构还包括请求所述日志块从所述KV存储设备中被删除。
声明71.本发明构思的一个实施例包括根据声明70所述的物品,其中,请求所述日志块从所述KV存储设备中被删除包括从主机向所述KV存储设备发送请求以从所述KV存储设备删除所述日志块。
声明72.本发明构思的一个实施例包括根据声明70所述的物品,其中,请求所述日志块从所述KV存储设备中被删除包括从所述KV存储设备中删除所述日志块。
声明73.本发明构思的一个实施例包括根据声明67所述的物品,至少部分基于所述第一键生成所述第一辅索引结构还包括将所述第一辅索引结构写入所述KV存储设备。
因此,鉴于对本文所描述的实施例的各种各样的排列,该详细描述和随附材料旨在仅是说明性的,而不应被视为限制本发明构思的范围。因此,所要求保护的发明构思是所有在以下权利要求及其等效物的范围和精神内的这些修改。
Claims (20)
1.一种键值KV存储设备,包括:
第一储存器,用于存储数据,所述第一储存器包括持久储存器;
第二储存器,用于存储主索引结构,所述主索引结构将第一键映射到存储值的所述第一储存器中的第一位置,所述第一键和所述值形成键值对;
控制器,用于使用所述第一储存器来处理从主机接收的读取请求、写入请求或删除请求中的至少一个;和
第三储存器,用于存储辅索引结构,所述辅索引结构存储所述第一键,其中,所述辅索引结构被排序。
2.根据权利要求1所述的KV存储设备,还包括第四储存器,所述第四储存器存储日志块,所述日志块包括第二键,所述第二键和第二位置被存储在所述主索引结构中。
3.根据权利要求2所述的KV存储设备,其中,所述日志块还包括操作的标识符和元数据中的至少一个。
4.根据权利要求2所述的KV存储设备,还包括键记录器,用于至少部分地基于来自所述主机的所述写入请求或所述删除请求中的至少一个,将所述第二键添加到所述日志块,所述写入请求或所述删除请求中的至少一个包括所述第二键。
5.根据权利要求4所述的KV存储设备,其中,所述键记录器至少部分地基于从所述主机接收到迭代请求,向所述主机发送所述第二键。
6.根据权利要求4所述的KV存储设备,其中,所述键记录器发送与所述日志块相关联的第三键。
7.根据权利要求4所述的KV存储设备,其中,所述键记录器至少部分地基于从所述主机接收到日志删除请求,来删除所述日志块。
8.根据权利要求4所述的KV存储设备,还包括处理器,用于从所述日志块生成所述辅索引结构。
9.一种数据存储方法,包括:
在键值KV存储设备处从主机接收请求,所述请求至少包括操作和第一键,所述操作包括写入操作或删除操作中的至少一个;
至少部分地基于所述操作和所述第一键,使用所述KV存储设备的第一储存器来处理所述请求,从而确定与所述第一键相关联的所述第一储存器中的位置;
至少部分地基于所述操作、所述第一键和所述位置来更新所述KV存储设备的主索引结构;
将所述操作和所述第一键记录在所述KV存储设备的日志块中;以及
将所述请求的结果从所述KV存储设备返回给所述主机。
10.根据权利要求9所述的方法,还包括:
接收迭代请求,其中,所述迭代请求不同于读取请求;
从所述日志块读取所述第一键;以及
返回所述第一键。
11.根据权利要求10所述的方法,还包括:
接收日志删除请求,其中,所述日志删除请求不同于删除请求;以及
从所述KV存储设备中删除所述日志块。
12.根据权利要求9所述的方法,还包括:
接收迭代请求,其中,所述迭代请求不同于读取请求;
识别与所述日志块相关联的第二键;以及
返回所述第二键。
13.一种数据存储方法,包括:
从键值KV存储设备上的日志块请求键;
从所述KV存储设备接收所述键;以及
至少部分地基于所述键生成第一辅索引结构,所述第一辅索引结构根据至少所述键和第二键被排序,
其中,所述第一辅索引结构不同于主索引结构,所述主索引结构被所述KV存储设备用于处理包括所述键的读取请求、包括所述键的写入请求、或包括所述键的删除请求。
14.根据权利要求13所述的方法,其中:
从所述KV存储设备上的日志块请求键包括由主机从所述KV存储设备上的所述日志块请求所述键;
从所述KV存储设备接收键包括在所述主机处从所述KV存储设备接收所述键;以及
生成第一辅索引结构包括至少部分基于所述键在所述主机上生成所述第一辅索引结构。
15.根据权利要求13所述的方法,其中:
从所述KV存储设备上的日志块请求键包括由所述KV存储设备的处理器从所述KV存储设备上的所述日志块请求所述键;
从所述KV存储设备接收键包括在所述KV存储设备的所述处理器处接收所述键;以及
生成第一辅索引结构包括至少部分基于所述键在所述KV存储设备的所述处理器上生成所述第一辅索引结构。
16.根据权利要求13所述的方法,其中,至少部分地基于所述键生成所述第一辅索引结构包括将所述键与第二辅索引结构合并。
17.根据权利要求16所述的方法,其中,至少部分地基于所述键生成所述第一辅索引结构还包括请求从所述存储设备删除所述日志块。
18.根据权利要求17所述的方法,其中,请求从所述存储设备删除所述日志块包括从主机向所述KV存储设备发送请求以从所述KV存储设备删除所述日志块。
19.根据权利要求17所述的方法,其中,请求从所述存储设备删除所述日志块包括从所述KV存储设备删除所述日志块。
20.根据权利要求16所述的方法,其中,至少部分地基于所述键生成所述第一辅索引结构还包括将所述第一辅索引结构写入所述KV存储设备。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202063049619P | 2020-07-08 | 2020-07-08 | |
US63/049,619 | 2020-07-08 | ||
US17/029,026 | 2020-09-22 | ||
US17/029,026 US20220011948A1 (en) | 2020-07-08 | 2020-09-22 | Key sorting between key-value solid state drives and hosts |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113918089A true CN113918089A (zh) | 2022-01-11 |
Family
ID=76829486
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110771324.5A Pending CN113918089A (zh) | 2020-07-08 | 2021-07-08 | 键值存储设备和排序键值的方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20220011948A1 (zh) |
EP (1) | EP3937000A1 (zh) |
JP (1) | JP2022016366A (zh) |
KR (1) | KR20220006458A (zh) |
CN (1) | CN113918089A (zh) |
TW (1) | TW202203016A (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230017732A1 (en) * | 2021-07-16 | 2023-01-19 | Samsung Electronics Co., Ltd. | Key packing for flash key value store operations |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102310246B1 (ko) * | 2014-04-23 | 2021-10-08 | 삼성전자주식회사 | 세컨더리 인덱스 생성 방법 및 세컨더리 인덱스 저장 장치 |
US10891264B2 (en) * | 2015-04-30 | 2021-01-12 | Vmware, Inc. | Distributed, scalable key-value store |
US20170193041A1 (en) * | 2016-01-05 | 2017-07-06 | Sqrrl Data, Inc. | Document-partitioned secondary indexes in a sorted, distributed key/value data store |
US11042330B2 (en) * | 2017-03-01 | 2021-06-22 | Samsung Electronics Co., Ltd. | Methods and systems for distributed data storage |
US10795760B2 (en) * | 2017-03-20 | 2020-10-06 | Samsung Electronics Co., Ltd. | Key value SSD |
KR102545167B1 (ko) * | 2017-11-23 | 2023-06-19 | 삼성전자주식회사 | 키-밸류 스토리지 장치 및 상기 키-밸류 스토리지 장치의 동작 방법 |
US11392544B2 (en) * | 2018-02-06 | 2022-07-19 | Samsung Electronics Co., Ltd. | System and method for leveraging key-value storage to efficiently store data and metadata in a distributed file system |
WO2020055977A1 (en) * | 2018-09-14 | 2020-03-19 | Google Llc | Staggered merging in log-structured merge forests |
US10956071B2 (en) * | 2018-10-01 | 2021-03-23 | Western Digital Technologies, Inc. | Container key value store for data storage devices |
US11449430B2 (en) * | 2020-04-02 | 2022-09-20 | Samsung Electronics Co., Ltd. | Key-value store architecture for key-value devices |
-
2020
- 2020-09-22 US US17/029,026 patent/US20220011948A1/en active Pending
-
2021
- 2021-05-21 KR KR1020210065497A patent/KR20220006458A/ko active Search and Examination
- 2021-07-07 EP EP21184327.1A patent/EP3937000A1/en active Pending
- 2021-07-07 JP JP2021113019A patent/JP2022016366A/ja active Pending
- 2021-07-08 CN CN202110771324.5A patent/CN113918089A/zh active Pending
- 2021-07-08 TW TW110125076A patent/TW202203016A/zh unknown
Also Published As
Publication number | Publication date |
---|---|
US20220011948A1 (en) | 2022-01-13 |
TW202203016A (zh) | 2022-01-16 |
EP3937000A1 (en) | 2022-01-12 |
JP2022016366A (ja) | 2022-01-21 |
KR20220006458A (ko) | 2022-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11086774B2 (en) | Address translation for storage device | |
CN105843551B (zh) | 高性能和大容量储存重复删除中的数据完整性和损耗电阻 | |
US10037158B2 (en) | Vertically integrated storage | |
US9612774B2 (en) | Metadata structures for low latency and high throughput inline data compression | |
US10216418B2 (en) | Storage apparatus and method for autonomous space compaction | |
US11722064B2 (en) | Address translation for storage device | |
US11042328B2 (en) | Storage apparatus and method for autonomous space compaction | |
WO2018076633A1 (zh) | 一种远程数据复制方法、存储设备及存储系统 | |
KR102669897B1 (ko) | 부팅 가능한 키 값 장치 | |
WO2017113211A1 (zh) | 访问请求处理方法、装置及计算机系统 | |
CN113918089A (zh) | 键值存储设备和排序键值的方法 | |
US20150121033A1 (en) | Information processing apparatus and data transfer control method | |
US11226769B2 (en) | Large-scale storage system and data placement method in large-scale storage system | |
US10990486B2 (en) | Data storage system with repair of mid-level mapping blocks of internal file system | |
US20150356108A1 (en) | Storage system and storage system control method | |
US20200311030A1 (en) | Optimizing file system defrag for deduplicated block storage | |
US20210034292A1 (en) | Encoded virtual block deferred reference counting | |
TWI475419B (zh) | 用於在儲存系統上存取檔案的方法和系統 | |
KR101685839B1 (ko) | 플래시 메모리에 대한 중복 제거 방법 및 ssd에 대한 오프라인 중복 제거를 지원하는 호스트 장치 | |
CN118363955A (zh) | 一种数据处理方法、设备及系统 |
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 |