CN111832065A - 使用电路实现的软件和用于密钥-值存储的方法 - Google Patents
使用电路实现的软件和用于密钥-值存储的方法 Download PDFInfo
- Publication number
- CN111832065A CN111832065A CN202010307199.8A CN202010307199A CN111832065A CN 111832065 A CN111832065 A CN 111832065A CN 202010307199 A CN202010307199 A CN 202010307199A CN 111832065 A CN111832065 A CN 111832065A
- Authority
- CN
- China
- Prior art keywords
- key
- index
- value
- metadata
- highest
- 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
- 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
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
-
- 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
- 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
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9014—Indexing; Data structures therefor; Storage structures hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/907—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
-
- 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/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/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- 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/0662—Virtualisation aspects
- G06F3/0667—Virtualisation aspects at data level, e.g. file, record or object virtualisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Library & Information Science (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开一种可使用电路实现的软件。所述软件可包括应用编程接口(API),以从应用接收与密钥‑值固态驱动器(KV‑SSD)的密钥‑值对相关的请求。密钥‑值对可包括密钥及值;所述应用可由处理器执行。所述软件还可包括:组合器软件,将密钥与索引组合以产生索引密钥;以及执行软件,使用索引密钥及值在密钥‑值固态驱动器上执行操作。也提供一种用于密钥‑值存储的方法。
Description
[相关申请数据]
本申请主张2019年4月18日提出申请的序列号为62/836,065的美国 临时专利申请的权益,所述美国临时专利申请出于所有目的通过引用并入 本文。
技术领域
本发明概念一般涉及计算机***,且更具体地说,涉及增强密钥-值固 态驱动器(KV-SSD)的功能。
背景技术
密钥-值存储是数据库管理***的最简单形式。其可存储多对密钥及 值,也可在已知密钥时检索值。这些简单的***通常不适用于没有附加特 征的复杂应用。例如,这些***不支持向密钥追加值。
仍然需要支持对密钥-值存储的追加操作。
发明内容
根据本发明概念的一方面,提供了一种使用电路实现的软件,包括应 用编程接口、组合器软件和执行软件。应用编程接口从应用接收与密钥-值 固态驱动器的密钥-值对相关的请求,密钥-值对包括密钥及值,应用由处理 器执行。组合器软件将密钥与索引组合,以产生索引密钥;执行软件使用 索引密钥及值在密钥-值固态驱动器上执行操作。
根据本发明概念的一方面,提供了一种用于密钥-值存储的方法,包括: 从应用接收写入请求,以将与密钥相关联的值存储在密钥-值固态驱动器上 作为密钥-值对,应用由处理器执行;确定密钥的基本索引;将基本索引与 密钥组合以产生索引密钥;及,在密钥-值固态驱动器上实行存储操作以将 索引密钥与值相关联。
根据本发明概念的一方面,提供了一种用于密钥-值存储的方法,包括: 从应用接收追加请求,以将第二值追加到密钥-值固态驱动器上与密钥相关 联的值作为密钥-值对,应用由处理器执行;确定密钥的最高追加索引;递 增最高追加索引以产生新的最高追加索引;将新的最高追加索引与密钥组 合以产生追加索引密钥;及,在密钥-值固态驱动器上实行第二存储操作以 将追加索引密钥与第二值相关联。
附图说明
图1示出根据本发明概念的实施例的机器,所述机器被设计成使用密 钥值虚拟化(Key Value Virtualization,KVV)层来支持对存储在密钥-值固 态驱动器(Key-ValueSolid State Drive,KV-SSD)中的值的追加操作。
图2示出图1的机器的附加细节。
图3示出图1的KV-SSD的细节。
图4示出图1的应用、图1的KVV以及图1的KV-SSD,其在图1的 KV-SSD上实行写入操作。
图5示出图1的应用、图1的KVV以及图1的KV-SSD,其在图1的 KV-SSD上实行追加操作。
图6示出图1的应用、图1的KVV以及图1的KV-SSD,其在图1的 KV-SSD上实行读取操作。
图7示出图1的应用、图1的KVV以及图1的KV-SSD,其在图1的 KV-SSD上实行删除操作。
图8示出图1的KVV的细节。
图9示出图8的组合器软件将密钥与索引组合以产生索引密钥。
图10示出根据本发明概念的实施例的图1的元数据的结构。
图11示出图8的第二组合器软件将值与元数据组合以产生修改值。
图12示出根据本发明概念的各种实施例,图8的索引确定软件可用来 确定图1的KV-SSD上的密钥的最高追加索引的不同技术。
图13A到图13C示出根据本发明概念的实施例,图1的KVV支持在 图1的KV-SSD上的图4的写入请求的示例性程序的流程图。
图14A到图14B示出根据本发明概念的实施例的将密钥的元数据存储 在图1的散列表中的示例性程序的流程图。
图15A到图15B示出根据本发明概念的实施例,图1的KVV支持在 图1的KV-SSD上的图5的追加请求的示例性程序的流程图。
图16A到图16C示出根据本发明概念的实施例,图1的KVV支持在 图1的KV-SSD上的图6的读取请求的示例性程序的流程图。
图17A到图17C示出根据本发明概念的实施例,图1的KVV支持在 图1的KV-SSD上的图7的删除请求的示例性程序的流程图。
图18A到图18B示出根据本发明概念的实施例,图1的KVV在图1 的KV-SSD上确定密钥的最高追加索引的示例性程序的流程图。
图19A到图19B示出根据本发明概念的另一实施例,图1的KVV在 图1的KV-SSD上确定密钥的最高追加索引的示例性程序的流程图。
图20示出根据本发明概念的再一实施例,图1的KVV在图1的KV-SSD 上确定密钥的最高追加索引的示例性程序的流程图。
[符号的说明]
105:机器;
110、330:处理器;
115:操作***;
120:应用;
125:密钥-值固态驱动器/存储装置;
130:内存;
135:内存控制器;
140:装置驱动器;
145-1、145-2、145-3:密钥-值对;
150-1、150-2、150-3:密钥;
155-1、155-2、155-3:值;
160:密钥-值虚拟化;
165:散列表;
170-1、170-2:元数据;
175-1、175-2:年龄;
205:时钟;
210:网络连接件;
215:总线;
220:用户接口;
225:输入/输出引擎;
305:主机接口逻辑;
310:KV-SSD控制器;
315-1、315-2、315-3、315-4、315-5、315-6、315-7、315-8:闪存芯片;
320-1、320-2、320-3、320-4:通道;
325:转换层;
405:写入请求;
410、415、430、510、515、525、530、610、620-1、625、630、710、 715-1、715-2、720-1、720-2、725:操作;
420-1、420-2、520:写入操作;
425-1、620-2:操作/结果;
425-2:结果;
505:追加请求;
605:读取请求;
615-1:读取操作/第一读取请求;
615-2:读取操作;
705:删除请求;
805:API;
810:组合器软件;
815:执行软件;
820:结果软件;
825:元数据软件;
830:第二组合器软件;
835:散列表软件;
840:驱逐软件;
845:划分软件;
850:索引确定软件;
905:索引;
910:索引密钥;
1005:追加偏移;
1010:追加长度;
1015:追加搜索结构;
1105:修改值;
1305、1310、1315、1320、1325、1330、1340、1345、1350、1355、 1360、1365、1370、1375、1380、1385、1405、1410、1415、1425、1430、 1435、1440、1445、1450、1455、1505、1510、1515、1520、1525、1530、 1535、1540、1545、1605、1610、1615、1625、1630、1635、1645、1650、1655、1660、1665、1670、1675、1680、1685、1705、1710、1715、1720、 1725、1730、1735、1740、1745、1750、1755、1760、1770、1805、1810、 1815、1820、1825、1830、1835、1905、1910、1915、1920、1925、1930、 1940、1945、1950、2005、2010:方框;
1420、1620、1640、1765:虚线。
具体实施方式
现在将详细参考本发明概念的实施例,所述实施例的示例示于附图中。 在下面的详细说明中,阐述许多具体细节,以能够透彻理解本发明概念。 然而,应理解,本领域中的普通技术人员可在没有这些具体细节的情况下 实践本发明概念。在其他情况下,没有详细阐述众所周知的方法、程序、 组件、电路及网络,以免不必要地使实施例的各个方面模糊不清。
将理解,尽管本文中可能使用用语“第一”、“第二”等来阐述各种元 件,然而这些元件不应受这些用语限制。这些用语仅用于区分各个元件。 例如,在不背离本发明概念的范围的条件下,可称第一模块为第二模块, 且相似地,可称第二模块为第一模块。
本文中,在发明概念的说明中使用的术语仅是为了阐述特定实施例, 而不旨在限制本发明概念。除非上下文中另外清楚地指出,否则在本发明 概念的说明及所附权利要求书中所使用的单数形式“一(a、an)”及“所述 (the)”也旨在包括复数形式。还将理解,本文中使用的用语“和/或”是 指并囊括相关联列出项中的一个或多个项的任何及所有可能的组合。将进 一步理解,用语“包括(comprises和/或comprising)”当在本说明书中使用 时,是具体说明所陈述的特征、整数、步骤、操作、元件和/或组件的存在, 但不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或其群 组的存在或添加。附图的组件及特征不必按比例绘制。
在高级别上,追加功能可将每个追加写成单独的密钥-值对,以维持内 存中(in-memory)使用最近最少使用的(Least Recently Used,LRU)散列 表。为了持久性,密钥元数据可为写入KV-SSD的每个值加前缀。架构可 被实现为应用与密钥-值固态驱动器(KV-SSD)之间(例如,操作***内) 的层或者实现为操作***与KV-SSD之间(或者KV-SSD本身上的固件内) 的层。
为了实行追加操作,可将单独的密钥值对写入KV-SSD。原始密钥可以 追加索引的序列号(‘追加索引’)的两个字节作为前缀,但也可支持其他 长度的追加索引。当数据针对密钥第一次被写入KV-SSD时,所使用的追 加索引可为0,或者密钥可保持不变。
对于每个密钥,在LRU散列表中可维持内存中的数据结构,以跟踪追 加。如果内存中的LRU散列表缺少存储新密钥的空间,则可选择现有密钥 进行驱逐。以下论文中阐述的技术可被实施以在多核***中提供并发控制: 例如“CPHash:利用LRU驱逐的高速缓存分区散列表(A cache-partitioned hash table with LRU eviction)”,麻省理工学院电气工程及计算机科学系的兹 维阿德梅特列韦利(Zviad Metreveli in the Department ofElectrical Engineering and Computer Science at the Massachusetts Institute ofTechnology)提交的硕士论文,其并入本文供参考。散列表的大小可为可存 储在KV-SSD中的密钥数量及***中可用的内存量的函数。最近最少使用 的密钥可被驱逐,以为新密钥腾出空间。
存储在散列表中的元数据可存储当前追加信息及具有所有追加的信息 的自平衡二叉搜索树(或其他数据结构)。元数据的示例性数据结构可为:
树(或其他数据结构)中的每个节点可包含每个追加请求的序列号(追 加索引)、偏移及长度。元数据的这种表示可提高利用偏移的GET的性能。
向自平衡二叉搜索树(或其他数据结构)中的***可相对于追加索引 单调增加。当使用自平衡二叉搜索树时,两个普遍选择是AVL树及红黑树 (Red Black tree)。
AVL树
在AVL树中,任何节点的两个子树的高度相差至多1;如果其在任何 时候相差大于1,则进行再平衡以恢复这种性质。在平均情况及最差情况下, 查找、***及删除均需要O(log n)时间,其中‘n’是操作之前树中的节点 数。***及删除可能需要通过一个或多个树旋转来使树再平衡。
红黑树
红黑树的平衡并不完美,但足以使其保证在O(log n)时间内进行搜索, 其中‘n’是树中要素的总数。***及删除操作以及树的重新排列及重新着 色也是在O(log n)时间内实行的。对于单调增加的数据,红色及黑色树在插 入与查找性能之间提供良好的平衡。由于追加索引是单调增加的,因此红 色及黑色树是跟踪元数据的良好方式。
为了在所需的内存量与缓存未命中之间达到平衡,追加操作的最大数 量可为固定的:例如,1K(1024)个追加。追加的这一最大数量可为可配 置的,且可为密钥的数量、可用内存及应用的追加要求的函数。
每个追加值都可用元数据作为前缀,以实现持久性。序列化‘元数据’ 可被编码,为值加前缀,并写入KV-SSD。
重要的考虑因素可包括***性能(将所实行的装置读取操作及写入操 作的数量最小化)及持久性(确保追加操作是可持久及可恢复的)。
在最优情况下,每个追加请求可向KV-SSD仅产生一个写入输入/输出 (Input/Output,I/O)请求。如果元数据在内存中不可用,则最差情况应引 起“log n”次附加读取,以从具有最高序列号的追加中检索元数据,其中 ‘n’是所允许的(可配置的)追加的最大数量。
处理来自应用的PUT(Key1,Value,Overwrite)请求
1)在散列表中查找密钥1(Key1)的元数据。如果在散列表中找不到 Key1元数据,则通过实行二叉搜索从KV-SSD检索Key1元数据,以找到 之前使用的最高追加索引。
2)如果找不到Key1元数据,则这必须是新密钥,且可产生散列表中 的新条目以及Key1元数据的新实例。
3)如果找到Key1元数据:
a)如果设定‘覆写(overwrite)’标记,则删除现有密钥的所有追 加。
b)如果未设定‘覆写’标记,则将‘密钥存在错误’返回给应用。
4)如果这是此密钥的第一次写入,则将追加索引设定为“0”,并将新 节点(追加索引、此追加的偏移、值的长度)***Key1元数据中。
5)将追加索引作为密钥的前缀,将序列化Key1元数据作为值的前缀, 并将其写入KV-SSD。
处理来自应用的Append(Key1,Value)请求
1)在散列表中查找密钥1(Key1)的元数据。如果在内存中找不到 Key1元数据,则通过对之前使用的最高追加索引实行二叉搜索从KV-SSD 检索Key1元数据。
2)如果找不到Key1元数据,则将‘未找到密钥错误’返回给应用。
3)如果找到Key1元数据,则递增追加索引,并将新节点(追加索引、 此追加的偏移、值的长度)***Key1元数据中。
5)将追加索引作为密钥的前缀,将序列化Key1元数据作为值的前缀, 并将其写入KV-SSD。
处理来自应用的Get(Key1)请求
1)在散列表中查找Key1的元数据。如果在散列表中找不到Key1元数 据,则实行二叉搜索以找到最高追加索引,并从KV-SSD检索Key1元数据。
2)如果在KV-SSD中找不到Key1元数据,则将错误返回给应用。
3)利用Key1元数据中的信息,可通过检索所有追加的值来组合密钥 的整个值。应用也可选择接收能够一次检索一个追加的迭代器。
注意:KV-SSD的‘利用偏移的获取(GET with an OFFSET)’能力可 通过避免内存拷贝来提高性能。
处理来自应用的Delete(Key1,Value,Overwrite)请求
1)在散列表中查找Key1的元数据。如果在内存中找不到Key1元数据, 则通过对之前使用的最高追加索引实行二叉搜索从KV-SSD检索Key1元数 据。
2)如果找不到Key1元数据,则将‘未找到密钥错误’返回给应用。
3)如果找到Key1元数据,则删除所述密钥的所有追加(包括追加索 引为0000的原始写入请求)。
4)或者,由于目标是删除所有追加请求,因此可向KV-SSD发送删除 请求,从追加索引0000开始直到KV-SSD返回‘未找到密钥’错误,而无 需首先搜索最高追加索引。
本发明概念的实施例支持以下技术优点。首先,本发明概念的实施例 引入目前KV-SSD不提供的追加语义。其次,追加语义防止数据丢失或数 据损坏(例如,在电力故障的情况下)。第三,追加语义会避免与传统的读 取-修改-写入序列相关联的性能损失以将新数据追加到值。第四,追加语义 能够存储超过KV-SSD的最大对象大小的数据值,而应用不必管理向多个 对象的数据存储。
其他优化也是可能的:
1)散列表可被周期性地清除,这可减少在电力故障及其他错误情况下 恢复元数据所需的二叉搜索。
2)散列表可存储在永久内存中(或者存储在主内存中或者KV-SSD控 制器的永久内存内),这可避免对LRU散列表的需要以及在电力故障的情 况下重建元数据的需要。
3)高级技术可用于将散列表及相关联元数据存储在KV-SSD上的某处, 从而消除对第三方非易失性内存技术的需要。
4)代替使用标准LRU替换算法,从散列表中选择要驱逐的数据可使 用另一种算法,例如加权LRU替换算法。
5)为了避免(可配置但以其他方式固定的)追加的最大数量,可使用 级联追加来存储更多数据。
6)在没有任何追加的密钥的情况下,可使用布隆过滤器(bloom filter) 来提高性能。
7)当密钥的元数据旋转出散列表时,可使用特殊密钥-值对(例如,使 用追加索引-1及原始密钥)来存储密钥的当前最高追加索引,而不是搜索 KV-SSD来得到最高追加索引。然后,当元数据被加载回散列表时,可访问 这个特殊密钥来立即确定最高追加索引。为了避免陈旧数据,当密钥的元 数据被加载到散列表中时,这个特殊密钥可被删除。这样,如果当元数据 存储在散列表中时发生电源故障(并因此丢失),则元数据可从存储在 KV-SSD上的元数据完全重建。
8)根据应用的指令或者当满足其他条件(例如,低固态驱动器活动, 或者作为垃圾收集的一部分或者以其他方式与垃圾收集相关)时,可读取 具有大量追加的密钥,其可适合更少的对象(取决于追加的大小及SSD的 最大对象大小),追加数据被合并到单个对象或更小的对象集中,然后被写 回SSD(其中原始对象及追加对于以后的垃圾收集及重复使用是无效的)。
9)作为对密钥的GET请求的一部分,应用可为追加索引提供可选值。 然后,根据实现方式和/或来自应用的其他参数,***可返回原始数据加上 直到所提供的追加索引的任何追加(并且排除来自以后的追加操作的任何 数据)、与追加索引相关联地追加的数据或者与所述追加索引以及所有后续 追加操作相关联地追加的数据。应用还可提供两个追加索引,以指定要返 回的追加操作的范围(并排除在那些追加索引之外追加的任何数据)。追加 索引可用关于要包括多少追加操作的替代指示符来替换:例如,日期/时间 戳(如果此种信息被包括在二叉搜索树或其他数据结构中的元数据/节点 中)。
图1示出根据本发明概念的实施例的机器,所述机器被设计成使用密 钥值虚拟化(KVV)层来支持对存储在密钥-值固态驱动器(KV-SSD)中 的值的追加操作。在图1中,示出机器105。机器105可包括处理器110。 处理器110可为任何种类的处理器:例如,英特尔至强(Intel Xeon)、赛扬 (Celeron)、安腾(Itanium)或凌动(Atom)处理器、高级微装置(Advanced Micro Devices,AMD)皓龙处理器(AMD Opteron processor)、高级精简指 令集机器(Advanced RISC Machine,ARM)处理器等。尽管图1示出机器105中的单个处理器110,但机器105可包括任何数量的处理器,每个处理 器可为单核或多核处理器,且可以任何期望的组合混合。
处理器110可执行操作***115及应用120。操作***115可为任何期 望的操作***,除其他可能性之外,其示例可包括任何版本的微软视窗操作***或类似尤尼斯(Unix)的操作***。(微软及视窗是微软公司在美 国及其他国家的商标或注册商标。)应用120可为可发出例如密钥-值固态驱 动器(125)(下面讨论)等存储装置的输入/输出(I/O)请求的任何应用。
机器105也可包括内存130。内存130可为任何种类的内存,例如闪存、 动态随机存取存储器(Dynamic Random Access Memory,DRAM)、静态随 机存取存储器(Static RandomAccess Memory,SRAM)、永久随机存取存 储器、铁电随机存取存储器(FerroelectricRandom Access Memory,FRAM) 或非易失性随机存取存储器(Non-Volatile RandomAccess Memory, NVRAM),例如磁阻随机存取存储器(Magnetoresistive Random AccessMemory,MRAM)等。内存130也可为不同内存类型的任何期望的组合。 内存130可由内存控制器135管理。
机器105还可包括密钥-值固态驱动器(KV-SSD)125,其可由装置驱 动器140控制。例如,KV-SSD 125被示为存储各种密钥-值对145-1、145-2 及145-3,每个密钥-值对145-1、145-2及145-3包括密钥(分别为150-1、 150-2及150-3)及值(分别为155-1、155-2及155-3)。单个密钥-值对145-1、 145-2或145-3可存储在KV-SSD 125上的对象中:值155-1、155-2或155-3 可被写入KV-SSD 125中的特定物理地址,且密钥150-1、150-2或150-3可 与所述物理地址相关联地存储,从而允许稍后容易地检索值150-1、150-2 或150-3。尽管图1示出存储三个密钥-值对145-1、145-2及145-3的KV-SSD 125,但本发明概念的实施例可包括存储任何数量的密钥-值对的KV-SSD 125。
尽管图1仅示出一个KV-SSD 125,但本发明概念的实施例可支持任意 数量的KV-SSD 125。如下所述,多个KV-SSD 125可被虚拟化以表现为单 个KV-SSD。KV-SSD 125可具有不同的制造商、型号和/或容量。此外, KV-SSD 125可包括使用类似密钥-值存储***的其他存储装置(例如,存储 在其他类型的一个或多个存储装置(例如块访问SSD或硬盘驱动器)上的 密钥-值数据库)。
处理器110还可执行密钥-值虚拟化(KVV)160,其可提供KV-SSD 的虚拟化视图。KVV 160可在任何期望的位置实现。例如,KVV 160可在 操作***115内实现,或者作为在处理器110上运行的操作***115与 KV-SSD 125之间的单独层来实现。KVV 160也可使用耦合到处理器110的 单独逻辑来实现。KVV 160也可被实现为在KV-SSD 125上运行的固件(或其他软件)的一部分。最后,KVV 160可使用作为位于处理器110与KV-SSD 125之间的硬件组件的一部分的电路来实现:例如,***在KV-SSD 125上 的连接件与机器105中的某个电路板上的连接件之间。除其他可能性之外, 可用于实现KVV 160的电路的示例包括现场可编程门阵列(Field Programmable Gate Array,FPGA)、图形处理单元(Graphics ProcessingUnit, GPU)及专用集成电路(Application-Specific Integrated Circuit,ASIC)。
KVV 160还可支持多个KV-SSD 125的虚拟化。例如,如果机器105 包括两个或更多个KV-SSD 125,则KVV 160可通过内嵌在应用120与 KV-SSD 125之间,使其看起来好像仅存在一个KV-SSD 125(但提供多个 KV-SSD 125的组合容量)。KVV 160然后可负责确定任何特定密钥-值对所 存储之处。此种管理可以任何期望的方式来实现。由应用分配的密钥可用于确定哪个KV-SSD 125存储密钥-值对:例如,密钥可被散列,或者可使 用密钥的最低有效位将密钥-值对映射到特定的KV-SSD。与应用相关联的 标识(ID)可用于确定哪个KV-SSD125存储密钥-值对(其将在单个KV-SSD 125上保持与特定应用相关联的所有数据)。KVV160也可任意地将数据分 配给不同的KV-SSD 125(但在这种情况下,当需要从KV-SSD 125读取数 据时,KVV 160可能需要搜索所有KV-SSD 125)。KVV 160还可使用其他 技术来确定哪个KV-SSD 125应存储特定密钥-值对。在此文件的剩余部分 中,假设机器105仅包括单个KV-SSD 125,但本发明概念的实施例仍可通 过添加适当的逻辑来包括任意数量的KV-SSD125以确定哪个KV-SSD 125 存储哪个密钥-值对。
内存130可用于存储散列表165。散列表165可存储关于与存储在 KV-SSD 125上的值配对的各种密钥的元数据。例如,图1将散列表165示 出为分别存储密钥150-1及150-2的元数据170-1及170-2。注意到,散列 表165不存储密钥150-3的元数据:这一事实表明在任何时间点,散列表 165可存储或可不存储与存储在KV-SSD 125上的数据相关联的任何特定密 钥的元数据。
散列表165还可存储密钥150-1及150-2的年龄175-1及175-2。年龄 175-1及175-2可存储与密钥150-1及150-2相关的老化信息,然后当新密 钥的元数据将被存储在散列表165中时,所述老化信息可用于确定从散列 表165中驱逐哪些元数据。年龄175-1及175-2可以任何期望的方式进行管 理。例如,年龄175-1及175-2可存储密钥150-1及150-2的元数据最后分 别从散列表165中被访问的时钟时间。或者,年龄175-1及175-2可存储表 示从密钥150-1及150-2的元数据最后分别被访问以来散列表165的访问次 数的值:每当密钥的元数据被访问时,所述密钥的年龄可被设定为零,且 散列表165中所有其他密钥的年龄可递增1。也可使用其他技术来确定年龄 175-1及175-2,且在一些实现方式中可省略年龄175-1及175-2而不失去功 能。
因此,当应用120发出目的地为KV-SSD 125的输入/输出请求时,KVV 160可改为接收所述输入/输出请求,并根据支持数据追加请求的新语义来 对其进行处理。KVV 160然后可向KV-SSD 125发出适当的输入/输出请求, 并最终将任何结果信息返回给应用120。
尽管图1将机器105描绘为服务器(其可为独立的或机架式服务器), 但本发明概念的实施例可包括任何期望类型的机器105,而没有限制。例如, 机器105可用桌上型计算机或膝上型计算机或可受益于本发明概念的实施 例的任何其他机器来替换。机器105还可包括专用便携式计算机器、平板 计算机、智能手机及其他计算机器。
图2示出图1的机器的附加细节。在图2中,典型地,机器105包括 一个或多个处理器110,所述一个或多个处理器110可包括内存控制器135 及时钟205,其可用于协调机器105的组件的操作。例如,处理器110也可 耦合到内存130,内存130可包括随机存取存储器(RAM)、只读存储器 (read-only memory,ROM)或其他状态保存介质。处理器110还可耦合到存储装置125及网络连接件210,网络连接件210可为例如以太网连接件或 无线连接件。处理器110也可连接到总线215,总线215可附接到用户接口 220及输入/输出接口端口,所述输入/输出接口端口可使用输入/输出引擎 225以及其他组件来管理。
图3示出图1的KV-SSD的细节。在图3中,KV-SSD 125可包括主机 接口逻辑305、KV-SSD控制器310及各种闪存芯片315-1到315-8,闪存 芯片315-1到315-8可被组织成各种通道320-1到320-4。主机接口逻辑305 可管理图1的KV-SSD 125与机器105之间的通信。KV-SSD控制器310可 管理闪存芯片315-1到315-8上的读取操作及写入操作以及垃圾收集及其他 操作。
KV-SSD控制器310可包括转换层325。转换层325可实行将图1的应 用120在输入/输出请求中所提供的密钥转换成存储在KV-SSD 125上的对 象的物理地址的传统功能。KV-SSD 310还可包括处理器330,处理器330 可执行支配如何使用KV-SSD 125的指令。因此,KV-SSD 125还可包括KVV 160,而不是由图1的处理器110执行的KVV 160。为了完全支持KVV160, KV-SSD控制器310还可包括散列表165(其可存储在KV-SSD 125中的内 存(易失性或非易失性的)中(这一内存在图3中未示出))。
尽管图3将KV-SSD 125示为包括组织成四个通道320-1到320-4的八 个闪存芯片315-1到315-8,但本发明概念的实施例可支持组织成任何数量 的通道的任何数量的闪存芯片。
图4示出图1的应用120、图1的KVV 160及图1的KV-SSD 125,其 在图1的KV-SSD125上实行写入操作。在图4中,应用120可发送写入请 求405,写入请求405可为向KV-SSD125写入数据的请求。典型地,KV-SSD 125接收结构化为PUT(key,value[,parameter])的命令,其中“PUT”是命 令,key是密钥-值对的密钥(例如图1的密钥150-1、150-2及150-3),value 是密钥-值对的值(例如图1的值155-1、155-2及155-3),且parameter是 可选参数,但在本发明概念的各种实施例中,可使用其他语法、不同的参 数名称及不同的参数列表。可使用的示例性参数是“覆写(overwrite)”。如 果“覆写”未被包括作为参数,且KV-SSD125存储具有密钥key的密钥- 值对,则KV-SSD 125可返回错误而不是实行写入操作(省略参数“覆写” 可防止可将不同数据与KV-SSD 125上的同一密钥相关联的多个应用之间 的冲突)。通过包括参数“覆写”,应用120可指示包括密钥key的任何现有 密钥-值对可被删除,且使用密钥key的新密钥-值对可被替代使用。可使用 的另一个示例性参数是指示密钥-值对不受追加命令管制的参数。当使用这 种参数时,KVV 160可简单地将写入请求405直接传递给KV-SSD 125,而 无需修改。在这种情况下,应用120将自身负责处理追加(而不是依赖于 KVV 160):但如果应用120知道或预期数据不会被修改,则这种成本可能 是可接受的。
在本发明概念的一些实施例中,由KVV 160的应用编程接口(API) 提供的写入请求405的语法可不同于由KV-SSD 125提供的语法。在本发明 概念的其他实施例中,写入请求405的语法可相同于由KV-SSD 125提供的 语法。通过在可能的情况下使用相同的API,可避免需要软件更新的应用以 受益于KVV 160的使用。
在操作410中,KVV 160可确定基本索引以用于要在写入请求405中 写入的密钥-值对。此基本索引可为零,或者可使用任何其他期望的值。在 操作415中,KVV 160可创建元数据,例如图1的元数据170-1及170-2。
在写入操作420-1中,KVV 160可发送写入请求(再次,可能使用PUT 命令或由KV-SSD 125的API提供的类似命令)以在KV-SSD 125上存储密 钥-值对。但代替存储由应用120在写入请求405中发送的原始值,或者将 由应用120在写入请求405中发送的所述值与原始密钥相关联,KVV 160 可发送存储具有索引密钥的修改值的请求。索引密钥可为基本索引(如在 操作410中确定的)与由应用120在写入请求405中发送的原始密钥的组 合。类似地,修改值可为元数据的序列化形式与由应用120在写入请求405 中发送的原始值的组合。最后,在操作425-1中,KV-SSD 125可将写入结 果返回给KVV 160,且在操作430中,KVV 160可将写入结果返回给应用 120。
用语“组合”旨在意指用于将两个数据片段组合的任何期望的机制。 例如,索引密钥可为基本索引与原始密钥的串接(concatenation),而修改 的数据可为序列化元数据与原始值的串接。或者,串接的顺序可颠倒。可 添加或省略分隔符,或者可将组合的各种数据设定为固定长度,以使其可 一致地产生。因此,例如,索引可为索引密钥的前两个字节,其余的索引 密钥长度由原始密钥构成。可使用将两个值“组合”的任何其他期望的机 制:唯一的“警告(caveat)”是被“组合”的数据应是可单独恢复的。(这 种警告甚至不一定延伸到索引密钥,因为可能不存在用于查询哪些密钥存 储在KV-SSD 125上的机制。由于唯一重要的方面是知道特定密钥是否识别 存储在KV-SSD 125上的数据,因此可能唯一重要的是能够确定性地产生密 钥而不是使所述过程逆反。因此,例如,假设散列函数在KV-SSD 125上产 生唯一散列,散列函数可以某种方式应用于基本索引与原始密钥的某种组 合。)
注意到,图4示出从KVV 160发送到KV-SSD 125的多个PUT命令。 这旨在表示原始值可大于可存储在KV-SSD 125上的单个对象中的值。例 如,考虑其中KV-SSD 125具有1GB的最大对象大小,且应用120在写入 请求405中发送2GB值的情况。传统上,KV-SSD 125将向应用120返回 指示所述值太大而无法存储的错误。但KVV 160可确定所述值太大而无法 存储在单个对象中,且可将所述值分成多个部分来分别写入。为了模拟目 的,考虑KVV 160将单个写入请求405处理成对第一GB数据的写入请求, 然后是对第二GB数据的追加请求。(实际上,KVV 160可需要将所述值分 成三个部分,因为序列化元数据将占用对象所使用的一些空间,但为了基 本理解,这个考虑可被忽略。)因此,KVV 160可向KV-SSD 125发送两个写入操作420-1及420-2,并接收两个结果425-1及425-2。尽管图4示出两 个写入操作420-1及420-2,但本发明概念的实施例可包括从KVV 160发送 到KV-SSD 125的任何数量的写入操作。
注意到,在写入操作420-1中,使用的索引是基本索引(base index, BI),而在写入操作420-2中,使用的索引是追加索引(append index,AI)。 追加索引可以任何期望的方式确定,如同基本索引以任何期望的方式确定 那样。在本发明概念的一些实施例中,追加索引可比基本索引大1(即,基 本索引的增量)。如果KVV 160需要发送两个以上的写入操作420-1及 420-2,则可在第一个写入操作之后为每个写入操作递增追加索引。这种途 径为存储在KV-SSD 125上的对象创建唯一密钥,尽管所有的对象都是相关 的(作为对特定密钥的早期数据的追加),但允许依序容易地重建追加(用 于以后从KV-SSD 125读取值,如下面的图6中所论述的)。
在写入操作420-1及420-2中,相同的元数据被示为用于存储在KV-SSD 125上的修改值。这个事实在本发明概念的一些实施例中可为真实的(因为 各种写入操作是来自应用120的单个写入请求405的结果)。在本发明概念 的其他实施例中,用于修改存储在KV-SSD125上的值的每个部分的元数据 可变化(例如,以模仿单独的写入请求及追加请求)。
图5示出图1的应用120、图1的KVV 160及图1的KV-SSD 125,其 在图1的KV-SSD125上实行追加操作。在图5中,应用120可发送追加请 求505,追加请求505可为将数据追加到存储在KV-SSD 125上的值的请求。 由KVV 160提供的追加语法(其在KV-SSD 125的API中可能没有类似物) 可为APPEND(key,value)的形式,其中“APPEND”是命令,key是密钥- 值对的密钥(例如图1的密钥150-1、150-2及150-3),而value是要追加 到密钥-值对的现有值(例如图1的值155-1、155-2及155-3)的值。在本 发明概念的实施例中,这种追加语法还可包括此处没有论述的可选参数, 且可不同于这种形式。
在操作510中,KVV 160可确定新的最高追加索引以用于要在追加请 求505中写入的密钥-值对。此新的最高追加索引可通过识别迄今为止使用 的最高追加索引,然后产生下一个追加索引(例如,通过递增现有的最高 追加索引)来确定。在操作515中,KVV 160可创建元数据,例如图1的 元数据170-1及170-2。
在写入操作520中,KVV 160可发送写入请求(再次,可能使用PUT 命令或由KV-SSD125的API提供的类似命令)以在KV-SSD 125上存储密 钥-值对。如同图4的写入操作420-1及420-2,KVV 160可发送包括索引密 钥及修改值的写入操作520。索引密钥可为新的最高追加索引(如在操作 510中确定的)与由应用120在追加请求505中发送的原始密钥的组合。类 似地,修改值可为元数据的序列化形式与由应用120在追加请求505中发 送的原始值的组合。最后,在操作525中,KV-SSD 125可将写入结果返回 给KVV 160,且在操作530中,KVV160可将写入结果返回给应用120。
图5仅示出从KVV 160发送到KV-SSD 125的单个写入操作520,这 意味着被追加到密钥的值将适合KV-SSD 125上的单个对象。但与图4的写 入请求405的处理一样,如果需要,KVV 160可将追加值分成多个部分, 将每个部分分配给唯一追加索引(并因此分配给唯一索引密钥),并将与那 些唯一索引密钥相关联的部分(由元数据修改的)存储在KV-SSD125上。 如同图4,当在KV-SSD 125上存储值的各个部分时,可使用相同的元数据, 或者当在KV-SSD 125上存储值的不同部分时,可使用不同的元数据。
图6示出图1的应用120、图1的KVV 160及图1的KV-SSD 125,其 在图1的KV-SSD125上实行读取操作。在图6中,应用120可发送读取请 求605,读取请求605可为从KV-SSD125读取数据的请求。典型地,KV-SSD 125接收结构化为GET(key[,parameter])的命令,其中“GET”是命令,key 是密钥-值对的密钥(例如图1的密钥150-1、150-2及150-3),且parameter 是可选参数,但在本发明概念的各种实施例中可使用其他语法、不同的参 数名称及不同的参数列表。可使用的示例性参数是指示密钥-值对不受追加 命令管制的参数。当使用这种参数时,KVV 160可简单地将读取请求605 直接传递给KV-SSD 125,而无需修改。可使用的另一个示例性参数是一个 或多个追加索引,以指定要检索的值的特定部分。例如,应用可请求在追 加索引的特定范围内发生的所有追加,或者通过特定追加索引从原始写入 请求写入的所有数据,或者从特定追加索引直到追加结束而写入的所有数 据。在没有这些参数的情况下,默认操作可为检索与所述密钥相关联的整 个值,包括所有追加。
假设读取请求605通过最后的追加请求来请求数据,在操作610中, KVV 160可确定迄今为止使用的最高追加索引。在读取操作615-1中,KVV 160可发送读取请求(再次,可能使用GET命令或由KV-SSD 125的API 提供的类似命令)以在KV-SSD 125上读取与索引密钥相关联的值。此第一 读取请求615-1可将所述密钥与所述密钥的基本索引组合(如图所示,如果 应用120没有指定要读取的追加范围的下端),或者其可将所述密钥与由应 用120在读取请求605中提供的所述范围的下端组合。类似地,在操作620-1 中,KV-SSD 125可返回存储在KV-SSD 125上的修改值。KVV 160可发送 与要检索的追加索引一样多的读取请求,如读取操作615-2所示,KV-SSD 125可向其返回结果620-2:尽管图6示出两个读取操作615-1及615-2,但 可存在从KVV 160发送到KV-SSD 125的任何数量的读取操作。在操作620-1及620-2中接收到修改值之后,KVV 160可从存储在KV-SSD 125上 的修改值中的元数据中分离出原始值(在本发明概念的一些实施例中,元 数据可被丢弃,因为其没有被返回给应用120)。
在操作625中,KVV 160可将这些值组合以产生完整的值(可包括与 来自图4的写入请求405及图5的所有后续追加请求505的值一样多的值)。 最后,在操作630中,KVV 160可将完整的值发送回应用120。
在本发明概念的一些实施例中,KVV 160还可将所述密钥的最高追加 索引返回给应用120。此信息可能对应用120有用。例如,如果应用120需 要分配内存来存储返回值,则密钥的最高追加索引与存储在KV-SSD 125上 的对象的最大大小相结合,可提供关于存储所述值将需要多少内存的粗略 指南。例如,如果存储在KV-SSD 125上的对象的最大大小是1GB,且在 图4的写入请求405之后存在图5的两个追加请求505,则最高追加索引将 是2。将此索引增加1(以考虑到图4的写入请求405)并乘以1GB指示完 全值所需的总存储不会超过3GB。假若KVV 160将最高追加索引返回给应 用120,则KVV 160通常会在发送与所述密钥相关联的值(如所构造的) 之前返回这个值。
图7示出图1的应用120、图1的KVV 160及图1的KV-SSD 125,其 在图1的KV-SSD125上实行删除操作。在图7中,应用120可发送删除请 求705,删除请求705可为删除KV-SSD125上与密钥相关联的数据的请求。 典型地,KV-SSD 125接收结构化为ERASE(key[,parameter])的命令,其中 “ERASE”是命令,key是密钥-值对的密钥(例如图1的密钥150-1、150-2 及150-3),且parameter是可选参数,但在本发明概念的各种实施例中可使 用其他语法、不同的参数名称及不同的参数列表。
在操作710中,KVV 160可确定用于要在删除请求705中删除的密钥- 值对的最高追加索引。然后,对于每个追加索引(从基本索引开始),在操 作715-1及715-2中,KVV 160可向KV-SSD 125发送删除请求以删除与索 引密钥相关联的值,KV-SSD 125可在操作720-1及720-2中对其做出响应。 尽管图7示出从KVV 160发送到KV-SSD 125的两个删除操作,但本发明 概念的实施例可包括任意数量的删除操作(因为可存在存储在KV-SSD 125 上的任何数量的索引密钥)。最后,在操作725中,KVV 160可将删除请求 705的结果报告给应用120。
尽管图7示出KVV 160首先在操作710中确定迄今为止使用的最高追 加索引,但这一操作可被省略。例如,KVV 160可针对每个索引密钥简单 地向KV-SSD 125发送删除请求,直到KV-SSD 125作出没有找到这种密钥 的响应,此时KVV 160知道所述密钥的所有追加已经被删除。
图8示出图1的KVV 160的细节。在图8中,KVV 160被示为包括 API 805、组合器软件810、执行软件815、结果软件820、元数据软件825、 第二组合器软件830、散列表软件835、驱逐软件840、划分软件845及索 引确定软件850。尽管图8示出各种元件,但并非所有元件对于每个实现方 式都是必需的,且本发明概念的不同实施例可根据需要包括或省略各种元 件。此外,一些(或全部)元件可组合成实现所述两个(全部)软件目标 的单个“封装”,和/或由一个元件实行的所述功能可使用不同的元件来实现。 最后,尽管图4中所示的各种元件都被标记为“软件”,但本发明概念的实 施例可将这些元件实现为适当编程的电路,而不是由处理器执行的软件: 用语“软件”旨在意指可使用一些电路设计来实现的指令的一般概念,而 不是受限于存储在某一内存(或其他存储)中并由通用处理器执行的指令。 因此,“软件”可包括存储在操作***文件中并由主处理器(例如中央处理 器(CentralProcessing Unit,CPU))执行的指令、存储在固件中并由图1 的KV-SSD 125中的处理器或GPU执行的指令、适当设计和/或编程的FPGA 或ASIC或者计算机或其等效物可借以被理解为执行特定指令集的任何其 他机制。
API 805是揭露可由图1的应用120访问的功能的API。API 805可被 设计成使其包括通常由图1的KV-SSD 125的API提供的所有功能,加上受 益于KVV 160引入的能力的一些附加功能。例如,API 805可包括与由 KV-SSD 125的API提供的(且以上参考图4及图6到图7所述)那些相似 的PUT功能、GET功能及ERASE功能,但可包括其他功能,例如APPEND (如上参考图5所述)。可由API 805揭露的其他功能可包括合并 (CONSOLIDATE)功能(如同PUT、GET、ERASE及APPEND一样,这 种功能可使用不同的名称来提供)。合并可用作内置的读取-修改-擦除功能, 使得应用120能够要求KVV 160将与单个密钥相关联的所有追加数据合并到单个对象中。也就是说,图1的应用120可要求KVV 160合并特定密钥。 KVV 160然后可对所述密钥实行读取请求(类似于上面参考图6所描述的), 但代替将所述值返回给应用,KVV160然后可对所述密钥实行删除请求(类 似于上面参考图7所描述的),之后是对具有合并值的密钥的写入请求(类 似于上面参考图4所描述的)。通过将所述值合并到单个对象中,图1的 KV-SSD 125上的一些空间可被释放用于其他用途(当然,受制于在闪存装 置上实行的传统垃圾收集)。
组合器软件810可获得索引及密钥,并将所述二者组合成索引密钥。 如上所述,索引密钥提供一种机制,通过所述机制,与同一密钥(如图1 的应用120所提供的)相关联的多个不同对象可存储在图1的KV-SSD 125 上(因为图1的KV-SSD 125不允许用给定密钥存储多于一个对象),且容 易检索数据。图9示出组合器软件810的操作:给定密钥150-1及索引905, 组合器软件810可产生索引密钥910。如上所述,索引密钥910可为索引 905与密钥150-1的任何期望的组合,包括(例如)索引905与密钥150-1 的串接。
回到图8,执行软件815可向图1的KV-SSD 125发送命令,并从图1 的KV-SSD 125接收结果。换句话说,执行软件815可使用KV-SSD 125提 供的功能来实现KVV 160提供的增强功能。结果软件820可向图1的应用 120返回适合由应用120发出的请求的结果。
元数据软件825可创建元数据,KVV 160可使用所述元数据来处理图 4到图7所示的请求。图10详细说明此元数据,且示出除其他要素外,元 数据170-1及170-2可包括追加索引905(分配给由图1的应用120发出的 特定追加请求的索引)、追加偏移1005(之前在图4的针对此密钥的原始写 入请求405中或者在图5的针对此密钥的追加请求505中写入了多少数据)、 追加长度1010(在图5的针对此密钥的此追加请求505中写入了多少数据) 以及追加搜索结构1015(所述数据结构存储关于到目前为止图5的针对此 密钥的所有追加请求505的信息,包括图4的针对此密钥的原始写入请求 405)。
回到图8,第二组合器软件830可将序列化元数据与要写入图1的 KV-SSD 125的值组合,以产生修改值。此修改值允许元数据及所述值二者 一起存储在图1的KV-SSD 125上,以允许基于同一索引密钥检索二者。图 11示出第二组合器软件830的操作:给定值155-1及元数据170-1,第二组 合器软件830可产生修改值1105。如上所述,修改值1105可为元数据170-1 与值155-1的任何期望的组合,包括(例如)元数据170-1与值155-1的串 接。由于组合器软件810及第二组合器软件830操作相同(仅针对不同的 数据),因此组合器软件810及第二组合器软件830可为相同的软件,而不 是不同的软件。
回到图8,散列表软件835可管理图1的散列表165。此管理可包括向 图1的散列表165添加新条目,并针对给定密钥从图1的散列表165中查 找元数据。例如,散列表软件845可接收密钥,定位相关联的元数据(或 者报告图1的散列表165不存储相关联的元数据),且报告用于所述密钥的 最高追加索引:然后可使用此信息来实行图5的进一步追加请求505。散列 表软件845还可包括驱逐软件840,驱逐软件840可负责选择图1的散列表 165中的条目用于驱逐(在这种情况下,驱逐软件840是散列表软件840的 一部分)。
划分软件845可将给定值划分成多个部分。如上面参考图4所论述的, 可能发生图1的应用120可请求写入比可存储在图1的KV-SSD 125上的单 个对象中的值更大的值。划分软件845可将所述值划分成多个部分,每个 部分可适合图1的KV-SSD 125上的单个对象。例如,如果图1的KV-SSD 125上的对象的最大大小是1GB且要存储3GB的值,则划分软件845可将所述值划分为三个部分。划分软件还可考虑可与写入之前的值的部分组 合的任何序列化元数据的大小,因为所述信息可影响值应划分成多少部分。
最后,索引确定软件850可确定给定密钥的追加索引。索引确定软件 850可使用存储在图1的散列表165中的密钥的元数据(这可涉及使用散列 表软件835访问所述元数据),或者索引确定软件850可直接从存储在 KV-SSD 125上的对象确定此信息。
图12示出根据本发明概念的各种实施例,图8的索引确定软件850可 用来确定图1的KV-SSD 125上的密钥的最高追加索引的不同技术。图12 示出本发明概念的各种实施例:这些实施例可以任何期望的方式组合。也 就是说,这些实施例不应被认为是互相排斥的。
如图12所示,在本发明概念的一个实施例中,索引确定软件850可简 单地从存储在散列表165中的元数据中访问最高追加索引。在本发明概念 的第二实施例中,索引确定软件850可对可存储在KV-SSD 125上的索引实 行依序搜索。例如,索引确定软件850可将基本索引与密钥组合(可使用 图8的组合器软件810),并查询KV-SSD 125以得到与所述索引密钥相关 联的任何值。如果KV-SSD 125指示为所述索引密钥存储值,则索引确定软 件850可随后递增基本索引,将新索引与所述密钥组合,并再次查询KV-SSD 125。此过程可重复,直到KV-SSD 125指示在KV-SSD 125上没有找到特 定索引密钥,此时索引确定软件已经确定出用于所述密钥的最高追加索引 (产生成功查询的最后索引)。在本发明概念的第三实施例中,索引确定软 件850可实行相同的依序搜索,但从可能的最高追加索引而不是基本索引 开始,递减索引而不是递增索引,且知道当KV-SSD 125第一次指示成功查 询时已经定位了最高追加索引。
在本发明概念的第四实施例中,索引确定软件850可实行最高追加索 引的二叉搜索。在二叉搜索中,识别出可能的值的范围:例如,从基本索 引开始且在可能的最高追加索引结束的范围(例如,如果图1的KVV 160 支持总共1024个写入加追加,则为0与1023)。这个范围可被分成两半, 且选择中间的值(继续以上示例,511)。然后,可将所述中间索引与所述 密钥组合以产生索引密钥,且可查询KV-SSD 125以得到与所述索引密钥相 关联的任何值。如果查询成功(也就是说,KV-SSD 125存储所述索引密钥 的对象),则所述范围的下端可用中间索引替换;否则,所述范围的上端可 用中间索引替换(继续以上示例,如果没有找到索引密钥,则所述范围的 上端可从1023减少到511)。可重复选择中间索引、将中间索引与密钥组合 以及查询KV-SSD 125以得到所述索引密钥的过程,直到所述范围已经被减 少到单个索引,然后可将所述单个索引确定为所述密钥的最高追加索引。
在本发明概念的第五实施例中,索引确定软件850可识别存储所述密 钥的最高追加索引的特殊密钥。例如,当从散列表165中驱逐特定密钥的 元数据时,可使用特殊密钥来存储此最高追加索引值。继续以上示例,如 果密钥的追加索引可从0变化到1023,则可从-1与密钥的组合中产生特殊 密钥(可使用图8的组合器软件810)。或者(由于不应使用没有与索引组 合的原始密钥将数据写入KV-SSD 125),特殊密钥可为未经修改的原始密 钥。特殊密钥可以任何其他期望的方式形成。通过在KV-SSD 125上的索引 对象中存储所述密钥的最高追加索引,可使用来自KV-SSD 125的单个读取 请求来实现确定所述密钥的最高追加索引。
本发明概念的各种实施例可提供不同级别的性能。一般来说,本发明 概念的第一实施例可预期运行最快(因为对内存的查询倾向于比对KV-SSD 125的查询更快),但仅当元数据存储在散列表165中时。如果元数据没有 存储在散列表165中,则可需要本发明概念的另一个实施例。
上述本发明概念的第二实施例、第三实施例及第四实施例可预期花费 不同的时间量。如果n表示可能的最高追加索引(即,单个密钥的写入加 追加的最大数量),则平均来说,本发明概念的第二实施例及第三实施例可 预期需要对KV-SSD 125进行n/2次查询来找到最高追加索引(数学上,这 可表示为Θ(n),其识别平均情况下所需的多项式时间量)。但在最差情况下, 可能需要对KV-SSD 125进行n次查询(在数学上,这可表示为O(n),其 识别在最差情况下所需的多项式时间量)。相反,本发明概念的第四实施例 可预期在平均情况及最差情况下都需要对KV-SSD 125进行log2 n次查询 (Θ(log2 n)及O(log2 n))。另一方面,在最好的情况下,本发明概念的第二 实施例及第三实施例可需要对KV-SSD 125进行不超过两次查询来找到最 高追加索引,而即使在最好的情况下,本发明概念的第四实施例仍然需要 对KV-SSD 125进行log2 n次查询。因此,哪种途径最好可取决于图1的 KVV 160可能预先不知道的情况。
最后,本发明概念的第五实施例可仅需要对KV-SSD 125进行一次查询 来确定最高追加索引:但与上述本发明概念的第一实施例一样,本发明概 念的第五实施例取决于存储在KV-SSD 125上的索引对象。在本发明概念的 第五实施例中,当元数据被加载到散列表165中时,索引对象可被删除。(在 元数据被加载到散列表165中并在其中更新之后,此种选择会防止索引对 象在电力故障的情况下提供陈旧信息:在这种情况下,可搜索KV-SSD 125来重建元数据。)如果索引对象不存储在KV-SSD 125上,则索引确定软件 850可需要使用不同的途径来识别密钥的最高追加索引。
图13A到图13C示出根据本发明概念的实施例,图1的KVV 160支持 图1的KV-SSD125上的图4的写入请求405的示例性程序的流程图。在图 13A中,在方框1305中,图1的应用120可向图1的KVV 160发送图4 的写入请求405,以请求图1的值155-1在存储在图1的KV-SSD 125上时, 与图1的密钥150-1配对。在方框1310中,图1的KVV 160可确定图1的 密钥150-1的基本索引。在方框1315中,图8的组合器软件810可将基本 索引与图1的密钥150-1组合,以形成图9的索引密钥910。在方框1320 中,图8的元数据软件825可产生图1的密钥150-1的图1的元数据170-1。 在方框1325中,图1的KVV 160可确定图1的值155-1是大于还是将适合 KV-SSD 125上的单个对象。
如果图1的值155-1将适合图1的KV-SSD 125上的单个对象,则在方 框1330(图13B)中,图8的第二组合器软件830可将图1的元数据170-1 与图1的值150-1组合,以形成图11的修改值1105。在方框1335中,图8 的执行软件815可在KV-SSD 125上执行存储操作,以存储与图9的索引密 钥910相关联的图1的修改值1105。在方框1340中,图1的KVV 160可 将图1的元数据170-1存储在图1的散列表165中。最后,在方框1345中, 结果软件820可将来自图1的KVV 160的结果返回给图1的应用120。
或者,如果图1的值155-1将不适合图1的KV-SSD 125上的单个对象, 则在方框1350中,图8的划分软件845可将图1的值155-1划分成多个部 分。在方框1355中,图3的第二组合器软件830可将图1的元数据170-1 与图1的值155-1的第一部分组合,以形成图11的修改值1105。在方框1360 中,执行软件815可将与图9的索引密钥910相关联的图11的修改值1105 存储在图1的KV-SSD 125上。
在方框1365(图13C)中,图1的KVV 160可确定图1的值155-1的 所有部分是否已经存储在图1的KV-SSD 125上。如果是,则在图13B的 方框1340中继续进行处理。否则,在方框1370(图13C)中,图1的KVV 160可递增或以其他方式将索引调整到新索引值。在方框1375中,图8的 组合器软件810可将新索引与图1的密钥150-1组合,以形成图9的新索引 密钥910。在方框1380中,图3的第二组合器软件830可将图1的元数据 170-1与图1的值155-1的下一部分组合,以形成图11的新修改值1105。 在方框1385中,执行软件815可将与图9的新索引密钥910相关联的图11 的新修改值1105存储在图1的KV-SSD 125上,之后控制返回方框1365。
图14A到图14B示出根据本发明概念的实施例的将密钥的元数据存储 在图1的散列表165中的示例性程序的流程图。在图14A中,在方框中, 图8的散列表软件835可检查以查看图1的散列表165是否已满。如果是, 则图8的散列表软件835需要在新的元数据可存储在图1的散列表165中 之前从图1的散列表165中驱逐条目。在方框1405中,图8的驱逐软件840 可选择用于驱逐的条目。图8的驱逐软件840可使用例如图1的年龄175-1 及175-2来帮助决定驱逐哪个条目。图8的驱逐软件840可选择驱逐最近最 少使用的条目或最不频繁使用的条目,或者可使用任何其他期望的机制选 择条目。一旦被选择,在方框1410中,图8的驱逐软件840可驱逐所选择 的条目。在方框1415中,图8的执行软件815可存储其元数据正被从图1 的散列表165中驱逐的密钥的最高追加索引:此最高追加索引可存储在图1 的KV-SSD 125上的索引对象中。如虚线1420所示,可省略方框1415。
此时,在图1的散列表165中存在至少一个开放的条目(或者是由于 图1的散列表165在方框1425中未满,或者是由于在方框1410中图8的 驱逐软件840从图1的散列表165中驱逐出条目)。在方框1430(图14B) 中,图8的散列表软件835可在图1的散列表165中选择可用条目来存储 新的元数据。由于新的元数据尚未在图1的散列表165中,因此图8的散 列表软件835需要从图1的KV-SSD 125加载元数据。在方框1435中,图 8的索引确定软件850可确定其元数据将被存储在图1的散列表165中的密 钥的最高追加索引。参考以下图18A到图20进一步论述图8的索引确定软 件850的操作。或者,在方框1440中,图8的散列表软件835可从存储在 图1的KV-SSD 125上的索引对象访问最高追加索引。无论哪种方式,在方 框1445中,可使用组合器软件810将最高追加索引与图1的密钥150-1组 合,以形成图9的索引密钥910。在方框1450中,图8的散列表软件835 可使用图8的执行软件815针对图9的索引密钥910从图1的KV-SSD 125 访问图11的修改值1105,之后,图8的散列表软件835可将图1的元数据 170-1与图11的修改值1105隔离。最后,在方框1455中,图8的散列表 软件835可将图1的元数据170-1存储在图1的散列表165中。
图15A到图15B示出根据本发明概念的实施例,图1的KVV 160支持 图1的KV-SSD125上的图5的追加请求505的示例性程序的流程图。在图 15A中,在方框1505中,图1的应用120可向图1的KVV 160发送图5 的追加请求505。在方框1510中,图8的索引确定软件850可确定图1的 密钥150-1的最高追加索引。参考以下图18A到图20进一步论述图8的索 引确定软件850的操作。在方框1515中,图1的KVV 160可递增最高追加 索引,以形成新的最高追加索引。在方框1520中,图8的组合器软件810 可将新的最高追加索引与图1的密钥150-1组合,以形成图9的索引密钥 910。在方框1525中,图8的元数据软件825可产生图1的密钥150-1的图 1的元数据170-1。
在方框1530(图15B)中,图8的第二组合器软件830可将图1的元 数据170-1与图1的值155-1组合,以形成图11的修改值1105。在方框1535 中,图8的执行软件815可发送KV-SSD 125上的存储操作,以存储与图9 的索引密钥910相关联的图1的修改值1105。在方框1540中,可使用图8 的散列表软件835在图1的散列表165中存储和/或更新图1的元数据170-1。 注意到,除了如果图1的元数据170-1已经在图1的散列表165中,则图1 的散列表165中的图1的元数据170-1仅需要用新的元数据信息(例如图9 的新的最高追加索引905及图10的更新的追加搜索结构1015)更新,而不 是直接存储新的以外,方框1540几乎与图13B的方框1340相同。最后, 在方框1545中,图8的结果软件820可将来自图1的KVV 160的图5的追 加请求505的结果返回给图1的应用120。
图16A到图16C示出根据本发明概念的实施例,图1的KVV 160支持 图1的KV-SSD125上的图6的读取请求605的示例性程序的流程图。在图 16A中,在方框1605中,图1的应用120可向图1的KVV 160发送图6 的读取请求605。在方框1610中,图8的索引确定软件850可确定图1的 密钥150-1的最高追加索引。参考以下图18A到图20进一步论述图8的索 引确定软件850的操作。在方框1615中,图8的结果软件820可向图1的 应用120报告图1的密钥150-1的最高追加索引。如上面参考图6所论述的, 图1的应用120可使用此信息来分配足够的内存或其他资源来使用图1的 值155-1。如虚线1620所示,可省略方框1615。
在方框1625中,图8的组合器软件810可将图1的密钥150-1的最高 追加索引与图1的密钥150-1组合,以形成图9的索引密钥910。在方框1630 中,图8的执行软件815可使用图9的索引密钥910从图1的KV-SSD 125 访问图1的元数据170-1,之后(在方框1635中),图8的散列表软件835 可将图1的元数据170-1存储在图1的散列表165中。如虚线1640所示, 可省略方框1625、1630及1635。
一旦图1的KVV 160知道图1的密钥150-1的最高追加索引,在方框 1645(图16B)中,图1的KVV 160可确定图1的密钥150-1的基本索引。 在方框1650中,图8的组合器软件810可将基本索引与图1的密钥150-1 组合,以产生图9的索引密钥910。在方框1655中,图8的执行软件815 可从图1的KV-SSD 125访问图11的修改值1105,并提取包括在图4的原 始写入请求405中的图1的值155-1。
在方框1660(图16C)中,图1的KVV 160可确定是否已经从图1的 KV-SSD 125访问了所有请求的数据。换句话说,图1的KVV 160可将用 于从图1的KV-SSD 125访问图1的值155-1的当前索引与图1的密钥150-1 的最高追加索引进行比较。如果仍然存在对要从图1的KV-SSD 125访问的 图1的密钥150-1的图5的追加请求505,则在方框1665中,图1的KVV160可将索引递增或调整到下一个值。在方框1670中,图1的组合器软件 810可将新索引与图1的密钥150-1组合,以形成图9的新索引值910。在 方框1675中,图8的执行软件815可从图1的KV-SSD 125访问图11的修 改值1105,并提取包括在图5的索引追加请求505中的图1的值155-1,之 后控制返回方框1660。
一旦图1的KVV 160已经检索到与图1的密钥150-1相关联的所有数 据,则在方框1680中,图1的KVV 160可串接各种检索到的值,以形成图 1的应用120所期望的值。最后,在方框1685中,图8的结果软件820可 将组合的值返回给图1的应用120。
注意到,图16A到图16C所示的示例性程序可在不首先确定图1的密 钥150-1的最高追加索引的情况下操作。具体来说,由于图1的KVV 160 将需要从图1的KV-SSD 125读取原始写入值及所有后续追加值,因此图1 的KVV 160可通过简单地从基本索引开始依次读取图1的密钥150-1的每 个索引,且当图1的KV-SSD 125报告图1的KV-SSD 125不存储特定索引 密钥的值时结束来操作。并且即使图8的结果软件820需要在组合值被返 回之前向图1的应用120报告最高追加索引,图1的KVV 160仍可在报告 最高追加索引之后临时存储组合值,以给予图1的应用120使用最高追加 索引的时间。
在图16A到图16C中,假设图6的读取请求605是请求密钥150-1的 整个值,从图4的原始写入请求405开始,且包括图5的每个追加请求505。 如果在图6的读取请求605中只期望这些写入/追加请求的子集,则图16A 到图16C中提到的基本索引可用图1的应用120提供的较低追加索引替换, 且最高追加索引可用图1的应用120提供的较高追加索引替换。
在本发明概念的一些实施例中,图6的读取请求605可支持偏移参数。 偏移参数可指示将仅返回数据的一部分,以开始相对于所述值的特定偏移。 本发明概念的这些实施例可使用图1的元数据170-1来找到存储从所述偏移 开始的数据的用于图5的追加请求505的追加索引。也就是说,本发明概 念的实施例可搜索图1的元数据170-1来定位图9的追加索引905,使得图 10的追加偏移1005小于或等于期望偏移,且图10的追加偏移1005加上图 10的追加长度1010大于或等于期望偏移。此搜索可使用传统技术以任何期 望的方式实行,以访问图10的追加搜索结构1015中的信息。在本发明概 念的这些实施例中,以上在关于图16A到图16C的论述中提到的基本索引 然后可用包括期望偏移的追加索引替换。
图17A到图17C示出根据本发明概念的实施例,图1的KVV 160支持 图1的KV-SSD125上的图7的删除请求705的示例性程序的流程图。在图 17A中,在方框1705中,图1的应用120可向图1的KVV 160发送图7 的删除请求705。在方框1710中,图8的索引确定软件850可确定图1的 密钥150-1的最高追加索引。参考以下图18A到图20进一步论述图8的索 引确定软件850的操作。在方框1715中,图1的KVV 160可确定图1的密 钥150-1的基本索引。在方框1720中,图8的组合器软件810可将基本索 引与图1的密钥150-1组合,以形成图9的索引密钥910。在方框1725中, 图8的执行软件815可指令图1的KV-SSD 125删除索引密钥。
在方框1730(图17B)中,图1的KVV 160可确定是否已经删除了图 1的密钥150-1的所有追加索引。图1的KVV 160可通过将当前索引与图1 的密钥150-1的最高追加索引进行比较来作出这种确定:如果当前索引小于 图1的密钥150-1的最高追加索引,则没有删除图1的密钥150-1的所有追 加索引。如果没有删除图1的密钥150-1的所有追加索引,则在方框1735 中,图1的KVV 160可将索引递增或以其他方式修改为下一个值,且控制 可返回图17A的方框1720。否则,在方框1740中,图8的散列表软件835 可确定图1的密钥150-1的图1的元数据170-1是否在图1的散列表165中。
如果图1的元数据170-1在图1的散列表165中,则在方框1745(图 17C)中,图8的散列表软件835可定位图1的元数据170-1,且在方框1750 中,图8的散列表软件835可从图1的散列表165中移除(即,删除)图1 的元数据170-1。
无论图1的散列表165是否包含图1的元数据170-1,在方框1755中, 图1的KVV 160均可形成表示可存在并存储图1的密钥150-1的最高追加 索引的索引对象的密钥。然后,在方框1760中,图8的执行软件815可指 令图1的KV-SSD 125删除索引对象。如虚线1765所示,可省略方框1755 及1760。最后,在方框1770中,图8的结果软件820可将来自图1的KVV 160的图7的删除请求705的结果返回给图1的应用120。
在图14A到图17C中,存在包括确定密钥的最高追加索引的一些方框。 图18A到图20示出用于确定密钥的最高追加索引的各种实施例。如上参考 图12所述,这些实施例可组合,且不相互排斥。
图18A到图18B示出根据本发明概念的实施例,图1的KVV 160在图 1的KV-SSD 125上确定密钥的最高追加索引的示例性程序的流程图。在图 18A中,在方框1805中,图8的索引确定软件850可确定可能的最高追加 索引。如上所述,图1的KVV 160可对可实行的追加操作的数量设定限制: 此限制涉及可能的最高追加索引。例如,如果对于给定密钥允许总计1024 个写入/追加请求且基本索引是0,则可能的最高追加索引将是1023。
在方框1810中,图8的组合软件810可将可能的最高追加索引与图1 的密钥150-1组合,以形成图9的索引密钥910。在方框1815中,图8的 执行软件815可试图从图1的KV-SSD125访问与图9的此索引密钥910相 关联的值。
在方框1820(图18B)中,图8的索引确定软件850可确定图1的KV-SSD 125是否存储具有图9的索引密钥910的对象。如果是,则在方框1825中, 所述索引是图1的密钥150-1的最高追加索引,且处理可结束。否则,图1 的KV-SSD 125不存储具有图9的索引密钥910的对象。在方框1830中, 图8的索引确定软件850可递减索引,且在方框1835中,图8的组合软件810可将新索引与图1的密钥150-1组合,以形成图1的新索引密钥910。 处理然后可返回方框1815,以查看图1的KV-SSD 125是否存储具有图9 的新索引密钥910的对象。以这种方式,图8的索引确定软件850可迭代 地搜索图1的密钥150-1的最高追加索引。
注意到,在图18A到图18B中,图8的索引确定软件850可从可能的 最高追加索引开始依序向下搜索,以定位图1的密钥150-1的最高追加索引。 但图8的索引确定软件850也可从基本索引开始依序向上搜索,递增索引, 直到图1的KV-SSD 125指示针对特定的索引密钥没有找到对象,此时图8 的索引确定软件850将知道先前的索引是所述密钥的最高追加索引。
图19A到图19B示出根据本发明概念的另一实施例,图1的KVV 160 在图1的KV-SSD125上确定密钥的最高追加索引的示例性程序的流程图。 在图19A中,在方框1905中,图8的索引确定软件850可确定图1的密钥 150-1的基本索引。在方框1910中,图8的索引确定软件850可确定图1 的密钥150-1的可能的最高追加索引。如同图18A的方框1805,最高追加 索引可相对于图1的KVV 160所允许的对密钥的追加请求的最大数量来确 定。其之间的方框1905及1910界定要搜索以得到图1的密钥150-1的最高 追加索引的可能的追加索引的范围。
在方框1915中,图8的索引确定软件850可检查以查看所述范围是否 已经缩小到单个索引:即,所述范围的下端等于所述范围的上端。如果是, 则在方框1920中,已经找到图1的密钥150-1的最高追加索引,且处理可 结束。
否则,在方框1925(图19B)中,图8的索引确定软件850可选择所 述范围中间的索引。例如,如果低(low)表示范围下端的索引,且高(high) 表示范围上端的索引,则此中间索引可计算为(高-低)÷2(如果所述值 不是整数,则可选择刚好高于或低于这个值的数字)。在方框1930中,图8 的组合器软件810可将这个中间索引值与图1的密钥150-1组合,以形成图 9的索引密钥910。在方框1935中,图8的执行软件815可试图从图1的 KV-SSD 125访问图9的索引密钥910的值。在方框1940中,图8的索引 确定软件850可确定访问是否成功:即,图1的KV-SSD 125存储了具有索 引密钥的对象。注意到,图8的索引确定软件850在此处不关心存储在图1 的KV-SSD 125上的对象中的任何值:图8的所有索引确定软件850感兴趣的是所述对象是否存在于图1的KV-SSD 125上。如果访问成功,则在方框 1945中,图8的索引确定软件850可用中间索引替换所述范围的下端;否 则,在方框1950中,图8的索引确定软件850可用中间索引替换所述范围 的上端。无论哪种方式,控制返回方框1915(图19A),以查看是否已经定 位了最高追加索引。
图20示出根据本发明概念的再一实施例,图1的KVV 160在图1的 KV-SSD 125上确定密钥的最高追加索引的示例性程序的流程图。在图20 中,在方框2005中,图8的索引确定软件850可确定与存储在图1的KV-SSD 125上的索引对象相关联的密钥,所述索引对象存储图1的密钥150-1的最 高追加索引。最后,在方框2010中,图8的执行软件815可从图1的KV-SSD 125上的索引对象访问最高追加索引。
在图13A到图20中,示出本发明概念的一些实施例。但本领域中的技 术人员将认识到,通过改变方框的顺序、通过省略方框或者通过包括附图 中未示出的链接,本发明概念的其他实施例也是可能的。无论是否明确阐 述,流程图的所有这些变化都被认为是本发明概念的实施例。
本发明概念的实施例提供优于现有技术的技术优点。本发明概念的实 施例提供一种机制,通过所述机制,数据可被追加到存储在图1的KV-SSD 125上的现有值。在传统***中,当图1的应用120想要将新数据追加到存 储在KV-SSD 125上的值时,应用120必须读取现有值,修改所述值以追加 新数据,并将修改值存储回图1的KV-SSD 125上(为了重复使用原始密钥, 这需要使存储在图1的KV-SSD 125上的原始对象无效)。这种途径需要由 图1的应用120向图1的KV-SSD 125发送的读取请求、写入请求及删除请 求,加上对值进行修改以追加新数据所需的任何处理器周期。此外,删除 操作意指在图1的KV-SSD 125上存在更多存储,其存储需要垃圾收集的无 效数据,这可为昂贵(耗时)的过程。
相反,假设图1的元数据170-1存储在图1的散列表165中(这在大多 数情况下应是正确的假设),在本发明概念的实施例中,不需要图1的KV-SSD 125的读取请求或删除请求。所需要的只是图1的KV-SSD 125的 写入请求,以存储追加信息。此外,修改所述值不需要处理器周期。最后, 通过避免需要从图1的KV-SSD 125中删除对象,可减少对图1的KV-SSD125上的垃圾收集的需要。
追加语义还提供其他有益之处。在传统***中,图1的应用120必须 处理特定值可能超过图1的KV-SSD 125上所允许的最大对象大小的可能 性。利用由本发明概念的实施例提供的追加语义,图1的KVV 160可处理 特定值可能太大而不适合图1的KV-SSD 125上的单个对象的可能性,从而 消除对图1的应用120处置这种情况的需要。
以下论述旨在提供对可在其中实施本发明概念某些方面的一个或多个 合适的机器的简短总体说明。所述一个或多个机器可至少部分地通过以下 来控制:来自例如键盘、鼠标等传统输入装置的输入;以及从另一机器接 收到的指令、与虚拟现实(virtualreality,VR)环境的互动、生物反馈 (biometric feedback)或其他输入信号。本文中所用用语“机器”旨在广泛 地囊括单一机器、虚拟机器或由以通信方式耦合的一起运行的机器、虚拟 机器或装置形成的***。示例性机器包括计算装置(例如个人计算机、工 作站、服务器、便携式计算机、手持式装置、电话、平板计算机(tablet) 等)以及运输装置(例如私人或公共运输(例如汽车、火车、计程车等))。
所述一个或多个机器可包括嵌入式控制器,例如可编程或非可编程逻 辑装置或阵列、专用集成电路(ASIC)、嵌入式计算机、智能卡等。所述一 个或多个机器可利用到一个或多个远程机器的一个或多个连接(例如通过 网络接口、调制解调器或其他通信性耦合)。机器可通过例如内部网 (intranet)、互联网、局域网、广域网等物理网络和/或逻辑网络进行互连。 本领域中的技术人员将理解,网络通信可利用各种有线和/或无线短程或长 程载体及协议,所述载体及协议包括射频(radio frequency,RF)、卫星、 微波、电气及电子工程师学会(Institute of Electrical and Electronics Engineers,IEEE)802.11、蓝牙、光学、红外、缆线、激光等。
本发明概念的实施例可通过参考或结合相关联的数据来阐述,相关联 的数据包括当由机器访问时会使机器实行任务或定义抽象数据类型或低级 硬件上下文的函数、程序、数据结构、应用程序等。相关联的数据可存储 在例如易失性和/或非易失性存储器(例如,RAM、ROM等)中或其他存 储装置及其相关联的存储介质(包括硬盘驱动器、软盘、光学存储、磁带、 闪存、记忆棒(memory stick)、数字视频盘、生物存储等)中。相关联的 数据可以数据包、串行数据、并行数据、传播信号等形式通过传输环境(包 括物理网络和/或逻辑网络)进行递送,且可以压缩或加密的格式使用。相 关联的数据可在分布式环境中使用且可本地和/或远程地存储以供机器访 问。
本发明概念的实施例可包括有形的、非暂时性的机器可读介质,所述 机器可读介质包括可由一个或多个处理器执行的指令,所述指令包括实行 本文所述的本发明概念的元件的指令。
上述方法的各种操作可通过能够实行这些操作的任何合适的手段来实 行,例如各种硬件和/或软件组件、电路和/或模块。所述软件可包括用于实 现逻辑功能的可执行指令的有序列表,且可实施在任何“处理器可读介质” 中,以供指令执行***、设备或装置(例如单核或多核处理器或包含处理 器的***)使用或与前述元件结合使用。
结合本文中所公开的实施例阐述的方法或者算法及功能的方框或步骤 可直接以硬件实施、以由处理器执行的软件模块实施、或以二者的组合来 实施。如果以软件实施,则所述功能可作为一个或多个指令或代码存储在 有形的非暂时性计算机可读介质上或通过有形的非暂时性计算机可读介质 传送。软件模块可驻留在随机存取存储器(RAM)、闪存、只读存储器 (ROM)、电可编程ROM(Electrically Programmable ROM,EPROM)、电 可擦可编程ROM(Electrically Erasable Programmable ROM,EEPROM)、 寄存器、硬盘、可移动磁盘(removable disk)、压缩盘只读存储器(compact disk ROM,CD ROM)或本领域中已知的任何其他形式的存储介质中。
已参考所示实施例阐述并示出了本发明概念的原理,将认识到,在不 背离这些原理的条件下可对所示实施例进行排列及细节上的修改且可以任 何期望的方式对所示实施例进行组合。且尽管以上论述着重于特定实施例, 但也预期存在其他配置。具体来说,即使本文中使用例如“根据本发明概 念的实施例”等表达,这些短语也意指一般性地提及实施例的可能性,而 不旨在将本发明概念限制到特定的实施例配置。本文中所用的这些用语可提及可组合到其他实施例中的相同或不同的实施例。
上述说明性实施例不应被视为对说明性实施例的本发明概念进行限 制。尽管已阐述了几个实施例,但本领域技术人员将容易理解,在不实质 上背离本公开的新颖教示及优点的条件下,可对这些实施例进行许多修改。 因此,所有这些修改均旨在包含于由权利要求书所界定的本发明概念的范 围内。
本发明概念的实施例可延伸到以下陈述,但不受限制:
陈述1.本发明概念的实施例包括使用电路实现的软件,所述软件包括:
应用编程接口(API),从应用接收与密钥-值固态驱动器(KV-SSD) 的密钥-值对相关的请求,所述密钥-值对包括密钥及值,所述应用由处理器 执行;
组合器软件,将所述密钥与索引组合,以产生索引密钥;及
执行软件,使用所述索引密钥及所述值在所述KV-SSD上执行操作。
陈述2.本发明概念的实施例包括根据陈述1所述的使用电路实现的软 件,所述软件还包括将请求的结果返回给应用的结果软件。
陈述3.本发明概念的实施例包括根据陈述1所述的使用电路实现的软 件,其中所述电路包括第二处理器。
陈述4.本发明概念的实施例包括根据陈述3所述的使用电路实现的软 件,其中所述第二处理器是执行应用的处理器。
陈述5.本发明概念的实施例包括根据陈述4所述的使用电路实现的软 件,其中所述软件是由处理器执行的操作***的一部分。
陈述6.本发明概念的实施例包括根据陈述3所述的使用电路实现的软 件,其中第二处理器是KV-SSD的组件。
陈述7.本发明概念的实施例包括根据陈述1所述的使用电路实现的软 件,其中所述电路包括现场可编程门阵列(FPGA)、图形处理单元(GPU) 及专用集成电路(ASIC)中的至少一个。
陈述8.本发明概念的实施例包括根据陈述1所述的使用电路实现的软 件,所述软件还包括产生密钥的元数据的元数据软件。
陈述9.本发明概念的实施例包括根据陈述8所述的使用电路实现的软 件,其中元数据包括对密钥-值对的追加请求的追加索引、追加偏移、追加 长度及数据结构中的至少一个。
陈述10.本发明概念的实施例包括根据陈述8所述的使用电路实现的 软件,所述软件还包括:
将元数据与值组合以产生修改值的第二组合器软件;且
执行软件可操作以使用索引密钥及修改值在KV-SSD上执行操作。
陈述11.本发明概念的实施例包括根据陈述8所述的使用电路实现的 软件,所述软件还包括散列表软件,所述散列表软件使用内存中的散列表 来存储与所述密钥相关联的所述元数据。
陈述12.本发明概念的实施例包括根据陈述11所述的使用电路实现的 软件,其中散列表软件包括从散列表中驱逐旧元数据的驱逐软件。
陈述13.本发明概念的实施例包括根据陈述1所述的使用电路实现的 软件,其中:
所述请求包括写入请求及追加请求中的一个;且
执行软件可操作以将与索引密钥相关联的所述值存储在KV-SSD上。
陈述14.本发明概念的实施例包括根据陈述13所述的使用电路实现的 软件,其中:
所述值大于KV-SSD上的对象的最大大小;
组合器软件可操作以将密钥与多个索引组合,从而产生多个索引密钥;
使用电路实现的软件还包括将所述值划分成多个部分的划分软件;且
执行软件可操作以将与所述多个索引密钥相关联的所述多个部分存储 在KV-SSD上。
陈述15.本发明概念的实施例包括根据陈述14所述的使用电路实现的 软件,其中
散列表软件可操作以在散列表中为密钥添加条目。
陈述16.本发明概念的实施例包括根据陈述14所述的使用电路实现的 软件,其中
散列表软件可操作以在散列表中为密钥更新条目。
陈述17.本发明概念的实施例包括根据陈述1所述的使用电路实现的 软件,其中:
所述请求包括读取请求;且
所述执行软件可操作以读取与所述KV-SSD上的多个索引密钥相关联 的多个值,并将所述多个值组合以产生所述值。
陈述18.本发明概念的实施例包括根据陈述1所述的使用电路实现的 软件,其中:
所述请求包括删除请求;且
所述执行软件可操作以删除KV-SSD上的多个索引密钥。
陈述19.本发明概念的实施例包括根据陈述18所述的使用电路实现的 软件,其中
散列表软件可操作以在散列表中为密钥删除条目。
陈述20.本发明概念的实施例包括根据陈述1所述的使用电路实现的 软件,所述软件还包括确定密钥的最高追加索引的索引确定软件。
陈述21.本发明概念的实施例包括根据陈述20所述的使用电路实现的 软件,其中索引确定软件可操作以从存储在内存中的散列表中的密钥的元 数据中访问密钥的最高追加索引。
陈述22.本发明概念的实施例包括根据陈述20所述的使用电路实现的 软件,其中索引确定软件可操作以搜索KV-SSD来得到密钥的最高追加索 引。
陈述23.本发明概念的实施例包括根据陈述22所述的使用电路实现的 软件,其中索引确定软件可操作以依序试图访问KV-SSD上的索引密钥, 从而确定所述密钥的最高追加索引。
陈述24.本发明概念的实施例包括根据陈述22所述的使用电路实现的 软件,其中索引确定软件可操作以在KV-SSD上实行索引密钥范围的二叉 搜索,从而确定最高追加索引。
陈述25.本发明概念的实施例包括根据陈述20所述的使用电路实现的 软件,其中索引确定软件可操作以从KV-SSD上的索引对象访问最高追加 索引。
陈述26.本发明概念的实施例包括一种方法,所述方法包括:
从应用接收写入请求,以将与密钥相关联的值存储在密钥-值固态驱动 器(KV-SSD)上作为密钥-值对,所述应用由处理器执行;
确定所述密钥的基本索引;
将所述基本索引与所述密钥组合以产生索引密钥;及
在所述KV-SSD上实行存储操作以将所述索引密钥与所述值相关联。
陈述27.本发明概念的实施例包括根据陈述26所述的方法,所述方法 还包括将存储操作的写入结果返回给应用。
陈述28.本发明概念的实施例包括根据陈述26所述的方法,其中:
所述方法还包括:
建立所述密钥的第一元数据;及
将所述值与第一元数据组合以产生第一修改值;及
在所述KV-SSD上实行存储操作以将所述索引密钥与所述值相关联包 括在所述KV-SSD上实行所述存储操作以将所述索引密钥与所述第一修改 值相关联。
陈述29.本发明概念的实施例包括根据陈述28所述的方法,其中第一 元数据包括密钥的基本索引。
陈述30.本发明概念的实施例包括根据陈述29所述的方法,其中第一 元数据还包括第一追加偏移及第一追加长度。
陈述31.本发明概念的实施例包括根据陈述29所述的方法,其中第一 元数据还包括对密钥-值对的追加写入请求的第一数据结构。
陈述32.本发明概念的实施例包括根据陈述29所述的方法,所述方法 还包括将第一元数据存储在内存中的散列表中,第一元数据与所述密钥相 关联。
陈述33.本发明概念的实施例包括根据陈述32所述的方法,其中将第 一元数据存储在内存中的散列表中包括从散列表中驱逐与第二密钥相关联 的现有元数据。
陈述34.本发明概念的实施例包括根据陈述33所述的方法,其中从散 列表中驱逐与第二密钥相关联的现有元数据包括在散列表中选择第二密钥 作为最近最少使用的密钥。
陈述35.本发明概念的实施例包括根据陈述26所述的方法,其中:
所述方法还包括,至少部分地基于所述值超过所述KV-SSD上的对象 的最大大小,确定存储所述值所需的对象的数量;
将所述基本索引与所述密钥组合以产生索引密钥包括将多个索引与所 述密钥组合以产生多个索引密钥,其中所述多个索引密钥至少与存储所述 值所需的对象的数量一样大;及
在所述KV-SSD上实行存储操作以将所述索引密钥与所述值相关联包 括在所述KV-SSD上实行多个存储操作以将所述多个索引密钥中的每一个 与所述值的一部分相关联。
陈述36.本发明概念的实施例包括根据陈述26所述的方法,所述方法 还包括绕过确定密钥的基本索引、将基本索引与密钥组合以产生索引密钥 以及在KV-SSD上实行存储操作以将索引密钥与值相关联的操作,而代替 地在KV-SSD上实行传统存储操作以将密钥与值相关联。
陈述37.本发明概念的实施例包括根据陈述36所述的方法,其中绕过 确定密钥的基本索引、将基本索引与密钥组合以产生索引密钥以及在 KV-SSD上实行存储操作以将索引密钥与值相关联的操作,而代替地在 KV-SSD上实行传统存储操作以将密钥与值相关联是至少部分地基于写入 请求指定传统存储操作。
陈述38.本发明概念的实施例包括根据陈述26所述的方法,所述方法 还包括:
从所述应用接收追加请求以将第二值追加到所述KV-SSD上与所述密 钥相关联的所述值;
确定所述密钥的最高追加索引;
递增所述最高追加索引以产生新的最高追加索引;
将所述新的最高追加索引与所述密钥组合以产生追加索引密钥;及
在所述KV-SSD上实行第二存储操作以将所述追加索引密钥与所述第 二值相关联。
陈述39.本发明概念的实施例包括根据陈述38所述的方法,所述方法 还包括将第二存储操作的追加结果返回给应用。
陈述40.本发明概念的实施例包括根据陈述38所述的方法,其中:
所述方法还包括:
建立所述密钥的第二元数据;及
将所述第二值与第二元数据组合以产生第二修改值;及
在所述KV-SSD上实行第二存储操作以将所述追加索引密钥与所述第 二值相关联包括在所述KV-SSD上实行所述第二存储操作以将所述追加索 引密钥与所述第二修改值相关联。
陈述41.本发明概念的实施例包括根据陈述40所述的方法,其中第二 元数据包括密钥的追加索引。
陈述42.本发明概念的实施例包括根据陈述41所述的方法,其中第二 元数据还包括第二追加偏移及第二追加长度。
陈述43.本发明概念的实施例包括根据陈述41所述的方法,其中第二 元数据还包括对密钥-值对的追加请求的第二数据结构。
陈述44.本发明概念的实施例包括根据陈述41所述的方法,所述方法 还包括将第二元数据存储在内存中的散列表中,第二元数据与所述密钥相 关联。
陈述45.本发明概念的实施例包括根据陈述44所述的方法,其中将第 二元数据存储在内存中的散列表中包括从散列表中驱逐与第二密钥相关联 的现有元数据。
陈述46.本发明概念的实施例包括根据陈述45所述的方法,其中从散 列表中驱逐与第二密钥相关联的现有元数据包括在散列表中选择第二密钥 作为最近最少使用的密钥。
陈述47.本发明概念的实施例包括根据陈述44所述的方法,其中将第 二元数据存储在内存中的散列表中,第二元数据与所述密钥相关联,包括:
确定所述散列表不存储与所述密钥相关联的所述第一元数据;
确定所述密钥的所述最高追加索引;及
响应于所述密钥的所述最高追加索引,从所述KV-SSD访问所述第一 元数据。
陈述48.本发明概念的实施例包括根据陈述47所述的方法,其中确定 所述密钥的所述最高追加索引包括***地请求与来自所述KV-SSD的密钥 相关联的数据,直到确定出所述密钥的所述最高追加索引。
陈述49.本发明概念的实施例包括根据陈述48所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 所述最高追加索引包括:
确定所述密钥的可能的最高追加索引;
将密钥的可能的最高追加索引与密钥组合,以产生测试密钥;及
试图访问与所述测试密钥相关联的所述数据。
陈述50.本发明概念的实施例包括根据陈述49所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 所述最高追加索引还包括:
递减所述密钥的可能的最高追加索引,以产生可能的新追加索引;
将密钥的可能的新追加索引与密钥组合,以产生新测试密钥;
试图访问与新测试密钥相关联的数据;及
至少部分地基于KV-SSD对试图访问与新测试密钥相关联的数据的响 应,重复递减密钥的可能的最高追加索引、将密钥的可能的新追加索引与 密钥组合、以及试图访问所述数据直到KV-SSD报告与新测试密钥相关联 的数据的操作。
陈述51.本发明概念的实施例包括根据陈述48所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 所述最高追加索引包括:
确定所述密钥的可能的最高追加索引的范围;
在所述密钥的可能的最高追加索引的所述范围的中间选择中间追加索 引;
将所述中间追加索引与所述密钥组合以产生测试密钥;
试图访问与所述测试密钥相关联的所述数据;
至少部分地基于所述KV-SSD对所述试图访问与所述测试密钥相关联 的所述数据的响应,将所述密钥的可能的最高追加索引的所述范围缩小到 前半范围及后半范围中的一个;及
重复选择中间追加索引、将所述中间追加索引与所述密钥组合、缩小 所述密钥的可能的最高追加索引的所述范围、以及试图访问与所述测试密 钥相关联的所述数据直到所述范围包括单个可能的最高追加索引的操作。
陈述52.本发明概念的实施例包括根据陈述47所述的方法,其中确定 密钥的最高追加索引包括从KV-SSD上的密钥的索引对象访问密钥的最高 追加索引。
陈述53.本发明概念的实施例包括根据陈述44所述的方法,所述方法 还包括至少部分地基于所述密钥被选择以从散列表中驱逐,将新的最高追 加索引存储在KV-SSD上的密钥的索引对象中。
陈述54.本发明概念的实施例包括根据陈述38所述的方法,所述方法 还包括:
从所述应用接收读取请求,以从所述KV-SSD读取与所述密钥相关联 的值;
确定所述密钥的基本索引;
确定所述密钥的新的最高追加索引;
将从所述密钥的基本索引到所述密钥的新的最高追加索引的每个索引 与所述密钥组合,以产生至少两个索引密钥;
在所述KV-SSD上对所述至少两个索引密钥中的每一个实行读取操作, 以产生至少两个读取值;
将所述至少两个读取值组合以产生所述值;及
响应于读取请求,将所述值返回给应用。
陈述55.本发明概念的实施例包括根据陈述54所述的方法,其中:
KV-SSD存储与密钥相关联的第一元数据及与密钥相关联的第二元数 据,第一元数据包括对密钥-值对的追加请求的第一追加索引、第一偏移、 第一长度及第一数据结构中的至少一个,第二元数据包括对密钥-值对的追 加请求的新的最高追加索引、第二偏移、第二长度及第二数据结构中的至 少一个,第二元数据也存储在内存中的散列表中;及
确定密钥的新的最高追加索引包括从散列表中的第二元数据确定密钥 的新的最高追加索引。
陈述56.本发明概念的实施例包括根据陈述54所述的方法,所述方法 还包括将与密钥相关联的第二元数据存储在内存中的散列表中,第二元数 据包括对密钥-值对的追加请求的新的最高追加索引、第二偏移、第二长度 及第二数据结构中的至少一个。
陈述57.本发明概念的实施例包括根据陈述56所述的方法,其中将第 二元数据存储在内存中的散列表中包括从散列表中驱逐与第二密钥相关联 的现有元数据。
陈述58.本发明概念的实施例包括根据陈述57所述的方法,其中从散 列表中驱逐与第二密钥相关联的现有元数据包括在散列表中选择第二密钥 作为最近最少使用的密钥。
陈述59.本发明概念的实施例包括根据陈述56所述的方法,其中将第 二元数据存储在内存中的散列表中,第二元数据与所述密钥相关联,包括:
确定所述散列表不存储与所述密钥相关联的所述第二元数据;及
响应于所述密钥的新的最高追加索引,从所述KV-SSD访问所述第二 元数据。
陈述60.本发明概念的实施例包括根据陈述59所述的方法,其中确定 所述密钥的所述最高追加索引包括***地请求与来自所述KV-SSD的密钥 相关联的数据,直到确定出所述密钥的所述新的最高追加索引。
陈述61.本发明概念的实施例包括根据陈述60所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 新的最高追加索引包括:
确定所述密钥的可能的最高追加索引;
将密钥的可能的最高追加索引与密钥组合,以产生测试密钥;及
试图访问与所述测试密钥相关联的所述数据。
陈述62.本发明概念的实施例包括根据陈述61所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 所述最高追加索引还包括:
递减所述密钥的可能的最高追加索引,以产生可能的新追加索引;
将密钥的可能的新追加索引与密钥组合,以产生新测试密钥;
试图访问与新测试密钥相关联的数据;及
至少部分地基于KV-SSD对试图访问与新测试密钥相关联的数据的响 应,重复递减密钥的可能的最高追加索引、将密钥的可能的新追加索引与 密钥组合、以及试图访问所述数据直到KV-SSD报告与新测试密钥相关联 的数据的操作。
陈述63.本发明概念的实施例包括根据陈述60所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 新的最高追加索引包括:
确定所述密钥的可能的最高追加索引的范围;
在所述密钥的可能的最高追加索引的所述范围的中间选择中间追加索 引;
将所述中间追加索引与所述密钥组合以产生测试密钥;
试图访问与所述测试密钥相关联的所述数据;
至少部分地基于所述KV-SSD对所述试图访问与所述测试密钥相关联 的所述数据的响应,将所述密钥的可能的最高追加索引的所述范围缩小到 前半范围及后半范围中的一个;及
重复选择中间追加索引、将所述中间追加索引与所述密钥组合、缩小 所述密钥的可能的最高追加索引的所述范围、以及试图访问与所述测试密 钥相关联的所述数据直到所述范围包括单个可能的最高追加索引的操作。
陈述64.本发明概念的实施例包括根据陈述59所述的方法,其中确定 密钥的新的最高追加索引包括从KV-SSD上的密钥的索引对象访问密钥的 新的最高追加索引。
陈述65.本发明概念的实施例包括根据陈述56所述的方法,所述方法 还包括至少部分地基于密钥被选择以从散列表中驱逐,将新的最高追加索 引存储在KV-SSD上的密钥的索引对象中。
陈述66.本发明概念的实施例包括根据陈述54所述的方法,所述方法 还包括将新的最高追加索引返回给应用。
陈述67.本发明概念的实施例包括根据陈述66所述的方法,其中将新 的最高追加索引返回给应用包括在响应于读取请求将所述值返回给应用之 前将新的最高追加索引返回给应用。
陈述68.本发明概念的实施例包括根据陈述38所述的方法,所述方法 还包括:
从所述应用接收删除请求,以删除在密钥-值固态驱动器(KV-SSD)上 作为密钥-值对的与密钥相关联的值;
确定所述密钥的基本索引;
将所述基本索引与所述密钥组合以产生第一索引密钥;
在所述KV-SSD上对所述第一索引密钥实行第一删除操作;
确定所述密钥的至少一个追加索引;
将所述至少一个追加索引与所述密钥组合,以产生至少一个第二索引 密钥;及
在所述KV-SSD上对所述至少一个第二索引密钥实行至少一个第二删 除操作。
陈述69.本发明概念的实施例包括根据陈述68所述的方法,所述方法 还包括将第一删除操作及所述至少一个第二删除操作的删除结果返回给应 用。
陈述70.本发明概念的实施例包括根据陈述68所述的方法,所述方法 还包括:
在内存中的散列表中定位元数据,所述元数据与密钥相关联;及
从内存中的散列表中移除元数据。
陈述71.本发明概念的实施例包括根据陈述68所述的方法,所述方法 还包括:
识别存储在KV-SSD上的密钥的索引对象;及
从KV-SSD中删除密钥的索引对象。
陈述72.本发明概念的实施例包括一种方法,所述方法包括:
从应用接收追加请求,以将第二值追加到密钥-值固态驱动器(KV-SSD) 上与密钥相关联的值作为密钥-值对,所述应用由处理器执行;
确定所述密钥的最高追加索引;
递增所述最高追加索引以产生新的最高追加索引;
将所述新的最高追加索引与所述密钥组合以产生追加索引密钥;及
在所述KV-SSD上实行第二存储操作以将所述追加索引密钥与所述第 二值相关联。
陈述73.本发明概念的实施例包括根据陈述72所述的方法,所述方法 还包括将第二存储操作的追加结果返回给应用。
陈述74.本发明概念的实施例包括根据陈述72所述的方法,其中:
所述KV-SSD存储与所述密钥相关联的第一元数据,所述第一元数据 包括对所述密钥-值对的追加请求的最高追加索引、第一偏移、第一长度及 第一数据结构中的至少一个;
所述方法还包括:
建立所述密钥的第二元数据;及
将所述第二值与第二元数据组合以产生第二修改值;及
在所述KV-SSD上实行第二存储操作以将所述追加索引密钥与所述第 二值相关联包括在所述KV-SSD上实行所述第二存储操作以将所述追加索 引密钥与所述第二修改值相关联。
陈述75.本发明概念的实施例包括根据陈述74所述的方法,其中第二 元数据包括密钥的新的最高追加索引。
陈述76.本发明概念的实施例包括根据陈述75所述的方法,其中第二 元数据还包括第二追加偏移及第二追加长度。
陈述77.本发明概念的一个实施例包括根据陈述75所述的方法,其中 第二元数据还包括对密钥-值对的追加请求的第二数据结构。
陈述78.本发明概念的实施例包括根据陈述75所述的方法,所述方法 还包括将第二元数据存储在内存中的散列表中,第二元数据与所述密钥相 关联。
陈述79.本发明概念的实施例包括根据陈述78所述的方法,其中将第 二元数据存储在内存中的散列表中包括从散列表中驱逐与第二密钥相关联 的现有元数据。
陈述80.本发明概念的实施例包括根据陈述79所述的方法,其中从散 列表中驱逐与第二密钥相关联的现有元数据包括在散列表中选择第二密钥 作为最近最少使用的密钥。
陈述81.本发明概念的实施例包括根据陈述78所述的方法,其中将第 二元数据存储在内存中的散列表中,第二元数据与所述密钥相关联,包括:
确定所述散列表不存储与所述密钥相关联的所述第一元数据;
确定所述密钥的所述最高追加索引;及
响应于所述密钥的所述最高追加索引,从所述KV-SSD访问所述第一 元数据。
陈述82.本发明概念的实施例包括根据陈述81所述的方法,其中确定 所述密钥的所述最高追加索引包括***地请求与来自所述KV-SSD的密钥 相关联的数据,直到确定出所述密钥的所述最高追加索引。
陈述83.本发明概念的实施例包括根据陈述82所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 所述最高追加索引包括:
确定所述密钥的可能的最高追加索引;
将密钥的可能的最高追加索引与密钥组合,以产生测试密钥;及
试图访问与所述测试密钥相关联的所述数据。
陈述84.本发明概念的实施例包括根据陈述83所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 所述最高追加索引还包括:
递减所述密钥的可能的最高追加索引,以产生可能的新追加索引;
将密钥的可能的新追加索引与密钥组合,以产生新测试密钥;
试图访问与新测试密钥相关联的数据;及
至少部分地基于KV-SSD对试图访问与新测试密钥相关联的数据的响 应,重复递减密钥的可能的最高追加索引、将密钥的可能的新追加索引与 密钥组合、以及试图访问所述数据直到KV-SSD报告与新测试密钥相关联 的数据的操作。
陈述85.本发明概念的实施例包括根据陈述82所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 最高追加索引包括:
确定所述密钥的可能的最高追加索引的范围;
在所述密钥的可能的最高追加索引的所述范围的中间选择中间追加索 引;
将所述中间追加索引与所述密钥组合以产生测试密钥;
试图访问与所述测试密钥相关联的所述数据;
至少部分地基于所述KV-SSD对试图访问与所述测试密钥相关联的所 述数据的响应,将所述密钥的可能的最高追加索引的所述范围缩小到前半 范围及后半范围中的一个;及
重复选择中间追加索引、将所述中间追加索引与所述密钥组合、缩小 所述密钥的可能的最高追加索引的所述范围、以及试图访问与所述测试密 钥相关联的所述数据直到所述范围包括单个可能的最高追加索引的操作。
陈述86.本发明概念的实施例包括根据陈述81所述的方法,其中确定 密钥的最高追加索引包括从KV-SSD上的密钥的索引对象访问密钥的最高 追加索引。
陈述87.本发明概念的实施例包括根据陈述78所述的方法,所述方法 还包括至少部分地基于密钥被选择以从散列表中驱逐,将新的最高追加索 引存储在KV-SSD上的密钥的索引对象中。
陈述88.本发明概念的实施例包括一种方法,所述方法包括:
从应用接收读取请求,以从密钥-值固态驱动器(KV-SSD)读取与密钥 相关联的值作为密钥-值对,所述应用由处理器执行;
确定所述密钥的基本索引;
确定所述密钥的最高追加索引;
将从所述密钥的基本索引到所述密钥的最高追加索引的每个索引与所 述密钥组合,以产生至少两个索引密钥;
在所述KV-SSD上对所述至少两个索引密钥中的每一个实行读取操作, 以产生至少两个读取值;
将所述至少两个读取值组合以产生所述值;及
响应于读取请求,将所述值返回给应用。
陈述89.本发明概念的实施例包括根据陈述88所述的方法,其中:
KV-SSD存储与密钥相关联的第一元数据及与密钥相关联的第二元数 据,第一元数据包括对密钥-值对的追加请求的第一追加索引、第一偏移、 第一长度及第一数据结构中的至少一个,第二元数据包括对密钥-值对的追 加请求的最高追加索引、第二偏移、第二长度及第二数据结构中的至少一 个,第二元数据也存储在内存中的散列表中;且
确定密钥的最高追加索引包括从散列表中的第二元数据确定密钥的最 高追加索引。
陈述90.本发明概念的实施例包括根据陈述88所述的方法,所述方法 还包括将第二元数据存储在内存中的散列表中,第二元数据包括对密钥-值 对的追加请求的最高追加索引、第二偏移、第二长度及第二数据结构中的 至少一个。
陈述91.本发明概念的实施例包括根据陈述90所述的方法,其中将第 二元数据存储在内存中的散列表中包括从散列表中驱逐与第二密钥相关联 的现有元数据。
陈述92.本发明概念的实施例包括根据陈述91所述的方法,其中从散 列表中驱逐与第二密钥相关联的现有元数据包括在散列表中选择第二密钥 作为最近最少使用的密钥。
陈述93.本发明概念的实施例包括根据陈述90所述的方法,其中将第 二元数据存储在内存中的散列表中,第二元数据与所述密钥相关联,包括:
确定所述散列表不存储与所述密钥相关联的所述第二元数据;及
响应于所述密钥的所述最高追加索引,从所述KV-SSD访问所述第二 元数据。
陈述94.本发明概念的实施例包括根据陈述93所述的方法,其中确定 所述密钥的所述最高追加索引包括***地请求与来自所述KV-SSD的密钥 相关联的数据,直到确定出所述密钥的所述最高追加索引。
陈述95.本发明概念的实施例包括根据陈述94所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 所述最高追加索引包括:
确定所述密钥的可能的最高追加索引;
将密钥的可能的最高追加索引与密钥组合,以产生测试密钥;及
试图访问与所述测试密钥相关联的所述数据。
陈述96.本发明概念的实施例包括根据陈述95所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 所述最高追加索引还包括:
递减所述密钥的可能的最高追加索引,以产生可能的新追加索引;
将密钥的可能的新追加索引与密钥组合,以产生新测试密钥;
试图访问与新测试密钥相关联的数据;及
至少部分地基于KV-SSD对试图访问与新测试密钥相关联的数据的响 应,重复递减密钥的可能的最高追加索引、将密钥的可能的新追加索引与 密钥组合、以及试图访问所述数据直到KV-SSD报告与新测试密钥相关联 的数据的操作。
陈述97.本发明概念的实施例包括根据陈述94所述的方法,其中*** 地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥的 所述最高追加索引包括:
确定所述密钥的可能的最高追加索引的范围;
在所述密钥的可能的最高追加索引的所述范围的中间选择中间追加索 引;
将所述中间追加索引与所述密钥组合以产生测试密钥;
试图访问与所述测试密钥相关联的所述数据;
至少部分地基于所述KV-SSD对试图访问与所述测试密钥相关联的所 述数据的响应,将所述密钥的可能的最高追加索引的所述范围缩小到前半 范围及后半范围中的一个;及
重复选择中间追加索引、将所述中间追加索引与所述密钥组合、缩小 所述密钥的可能的最高追加索引的所述范围、以及试图访问与所述测试密 钥相关联的所述数据直到所述范围包括单个可能的最高追加索引的操作。
陈述98.本发明概念的实施例包括根据陈述93所述的方法,其中确定 密钥的最高追加索引包括从KV-SSD上的密钥的索引对象访问密钥的最高 追加索引。
陈述99.本发明概念的实施例包括根据陈述90所述的方法,所述方法 还包括至少部分地基于密钥被选择以从散列表中驱逐,将最高追加索引存 储在KV-SSD上的密钥的索引对象中。
陈述100.本发明概念的实施例包括根据陈述88所述的方法,所述方 法还包括将最高追加索引返回给应用。
陈述101.本发明概念的实施例包括根据陈述100所述的方法,其中将 最高追加索引返回给应用包括在响应于读取请求将值返回给应用之前将最 高追加索引返回给应用。
陈述102.本发明概念的实施例包括一种方法,所述方法包括:
从应用接收删除请求,以删除在密钥-值固态驱动器(KV-SSD)上作为 密钥-值对的与密钥相关联的值,所述应用由处理器执行;
确定所述密钥的基本索引;
将所述基本索引与所述密钥组合以产生第一索引密钥;
在所述KV-SSD上对所述第一索引密钥实行删除操作;
确定所述密钥的至少一个追加索引;
将所述至少一个追加索引与所述密钥组合,以产生至少一个第二索引 密钥;及
在所述KV-SSD上对所述至少一个第二索引密钥实行至少一个删除操 作。
陈述103.本发明概念的实施例包括根据陈述102所述的方法,所述方 法还包括将第一删除操作及所述至少一个第二删除操作的删除结果返回给 应用。
陈述104.本发明概念的实施例包括根据陈述102所述的方法,所述方 法还包括:
在内存中的散列表中定位元数据,所述元数据与密钥相关联;及
从内存中的散列表中移除元数据。
陈述105.本发明概念的实施例包括根据陈述102所述的方法,所述方 法还包括:
识别存储在KV-SSD上的密钥的索引对象;及
从KV-SSD中删除密钥的索引对象。
陈述106.本发明概念的实施例包括一种制品,所述制品包括非暂时性 存储介质,所述非暂时性存储介质上存储有指令,所述指令当由机器执行 时,使得:
从应用接收写入请求,以将与密钥相关联的值存储在密钥-值固态驱动 器(KV-SSD)上作为密钥-值对,所述应用由处理器执行;
确定所述密钥的基本索引;
将所述基本索引与所述密钥组合以产生索引密钥;及
在所述KV-SSD上实行存储操作以将所述索引密钥与所述值相关联。
陈述107.本发明概念的实施例包括根据陈述106所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 将存储操作的写入结果返回给应用。
陈述108.本发明概念的实施例包括根据陈述106所述的制品,其中:
所述方法还包括:
建立所述密钥的第一元数据;及
将所述值与第一元数据组合以产生第一修改值;及
在所述KV-SSD上实行存储操作以将所述索引密钥与所述值相关联包 括在所述KV-SSD上实行所述存储操作以将所述索引密钥与所述第一修改 值相关联。
陈述109.本发明概念的实施例包括根据陈述108所述的制品,其中第 一元数据包括密钥的基本索引。
陈述110.本发明概念的实施例包括根据陈述109所述的制品,其中第 一元数据还包括第一追加偏移及第一追加长度。
陈述111.本发明概念的实施例包括根据陈述109所述的制品,其中第 一元数据还包括对密钥-值对的追加写入请求的第一数据结构。
陈述112.本发明概念的实施例包括根据陈述109所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 将第一元数据存储在内存中的散列表中,第一元数据与密钥相关联。
陈述113.本发明概念的实施例包括根据陈述112所述的制品,其中将 第一元数据存储在内存中的散列表中包括从散列表中驱逐与第二密钥相关 联的现有元数据。
陈述114.本发明概念的实施例包括根据陈述113所述的制品,其中从 散列表中驱逐与第二密钥相关联的现有元数据包括在散列表中选择第二密 钥作为最近最少使用的密钥。
陈述115.本发明概念的实施例包括根据陈述106所述的制品,其中:
所述方法还包括,至少部分地基于所述值超过所述KV-SSD上的对象 的最大大小,确定存储所述值所需的对象的数量;
将所述基本索引与所述密钥组合以产生索引密钥包括将多个索引与所 述密钥组合以产生多个索引密钥,其中所述多个索引密钥至少与存储所述 值所需的对象的数量一样大;及
在所述KV-SSD上实行存储操作以将所述索引密钥与所述值相关联包 括在所述KV-SSD上实行多个存储操作以将所述多个索引密钥中的每一个 与所述值的一部分相关联。
陈述116.本发明概念的实施例包括根据陈述106所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 绕过确定密钥的基本索引、将基本索引与密钥组合以产生索引密钥以及在 KV-SSD上实行存储操作以将索引密钥与所述值相关联的操作,而代替地在 KV-SSD上实行传统存储操作以将密钥与所述值相关联。
陈述117.本发明概念的实施例包括根据陈述116所述的制品,其中绕 过确定密钥的基本索引、将基本索引与密钥组合以产生索引密钥以及在 KV-SSD上实行存储操作以将索引密钥与所述值相关联的操作,而代替地在 KV-SSD上实行传统存储操作以将密钥与所述值相关联是至少部分地基于 写入请求指定传统存储操作。
陈述118.本发明概念的实施例包括根据陈述106所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得:
从所述应用接收追加请求以将第二值追加到与所述KV-SSD上的所述 密钥相关联的所述值;
确定所述密钥的最高追加索引;
递增所述最高追加索引以产生新的最高追加索引;
将所述新的最高追加索引与所述密钥组合以产生追加索引密钥;及
在所述KV-SSD上实行第二存储操作以将所述追加索引密钥与所述第 二值相关联。
陈述119.本发明概念的实施例包括根据陈述118所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 将第二存储操作的追加结果返回给应用。
陈述120.本发明概念的实施例包括根据陈述118所述的制品,其中:
所述方法还包括:
建立所述密钥的第二元数据;及
将所述第二值与第二元数据组合以产生第二修改值;及
在所述KV-SSD上实行第二存储操作以将所述追加索引密钥与所述第 二值相关联包括在所述KV-SSD上实行所述第二存储操作以将所述追加索 引密钥与所述第二修改值相关联。
陈述121.本发明概念的实施例包括根据陈述120所述的制品,其中第 二元数据包括密钥的追加索引。
陈述122.本发明概念的实施例包括根据陈述121所述的制品,其中第 二元数据还包括第二追加偏移及第二追加长度。
陈述123.本发明概念的实施例包括根据陈述121所述的制品,其中第 二元数据还包括对密钥-值对的追加请求的第二数据结构。
陈述124.本发明概念的实施例包括根据陈述121所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 将第二元数据存储在内存中的散列表中,第二元数据与密钥相关联。
陈述125.本发明概念的实施例包括根据陈述124所述的制品,其中将 第二元数据存储在内存中的散列表中包括从散列表中驱逐与第二密钥相关 联的现有元数据。
陈述126.本发明概念的实施例包括根据陈述125所述的制品,其中从 散列表中驱逐与第二密钥相关联的现有元数据包括在散列表中选择第二密 钥作为最近最少使用的密钥。
陈述127.本发明概念的实施例包括根据陈述124所述的制品,其中将 第二元数据存储在内存中的散列表中,第二元数据与所述密钥相关联,包 括:
确定所述散列表不存储与所述密钥相关联的所述第一元数据;
确定所述密钥的所述最高追加索引;及
响应于所述密钥的所述最高追加索引,从所述KV-SSD访问所述第一 元数据。
陈述128.本发明概念的实施例包括根据陈述127所述的制品,其中确 定所述密钥的所述最高追加索引包括***地请求与来自所述KV-SSD的密 钥相关联的数据,直到确定出所述密钥的所述最高追加索引。
陈述129.本发明概念的实施例包括根据陈述128所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述最高追加索引包括:
确定所述密钥的可能的最高追加索引;
将密钥的可能的最高追加索引与密钥组合,以产生测试密钥;及
试图访问与所述测试密钥相关联的所述数据。
陈述130.本发明概念的实施例包括根据陈述129所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述最高追加索引还包括:
递减所述密钥的可能的最高追加索引,以产生可能的新追加索引;
将密钥的可能的新追加索引与密钥组合,以产生新测试密钥;
试图访问与新测试密钥相关联的数据;及
至少部分地基于KV-SSD对试图访问与新测试密钥相关联的数据的响 应,重复递减密钥的可能的最高追加索引、将密钥的可能的新追加索引与 密钥组合、以及试图访问所述数据直到KV-SSD报告与新测试密钥相关联 的数据的操作。
陈述131.本发明概念的实施例包括根据陈述128所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述最高追加索引包括:
确定所述密钥的可能的最高追加索引的范围;
在所述密钥的可能的最高追加索引的所述范围的中间选择中间追加索 引;
将所述中间追加索引与所述密钥组合以产生测试密钥;
试图访问与所述测试密钥相关联的所述数据;
至少部分地基于所述KV-SSD对试图访问与所述测试密钥相关联的所 述数据的响应,将所述密钥的可能的最高追加索引的所述范围缩小到前半 范围及后半范围中的一个;及
重复选择中间追加索引、将所述中间追加索引与所述密钥组合、缩小 所述密钥的可能的最高追加索引的所述范围、以及试图访问与所述测试密 钥相关联的所述数据直到所述范围包括单个可能的最高追加索引的操作。
陈述132.本发明概念的实施例包括根据陈述127所述的制品,其中确 定密钥的最高追加索引包括从KV-SSD上的密钥的索引对象访问密钥的最 高追加索引。
陈述133.本发明概念的实施例包括根据陈述124所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 至少部分地基于密钥被选择以从散列表中驱逐,将新的最高追加索引存储 在KV-SSD上的密钥的索引对象中。
陈述134.本发明概念的实施例包括根据陈述118所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得:
从所述应用接收读取请求,以从所述KV-SSD读取与所述密钥相关联 的值;
确定所述密钥的基本索引;
确定所述密钥的新的最高追加索引;
将从所述密钥的基本索引到所述密钥的新的最高追加索引的每个索引 与所述密钥组合,以产生至少两个索引密钥;
在所述KV-SSD上对所述至少两个索引密钥中的每一个实行读取操作, 以产生至少两个读取值;
将所述至少两个读取值组合以产生所述值;及
响应于读取请求,将所述值返回给应用。
陈述135.本发明概念的实施例包括根据陈述134所述的制品,其中:
KV-SSD存储与密钥相关联的第一元数据及与密钥相关联的第二元数 据,第一元数据包括对密钥-值对的追加请求的第一追加索引、第一偏移、 第一长度及第一数据结构中的至少一个,第二元数据包括对密钥-值对的追 加请求的新的最高追加索引、第二偏移、第二长度及第二数据结构中的至 少一个,第二元数据也存储在内存中的散列表中;及
确定密钥的新的最高追加索引包括从散列表中的第二元数据确定密钥 的新的最高追加索引。
陈述136.本发明概念的实施例包括根据陈述134所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 将与密钥相关联的第二元数据存储在内存中的散列表中,第二元数据包括 对密钥-值对的追加请求的新的最高追加索引、第二偏移、第二长度及第二 数据结构中的至少一个。
陈述137.本发明概念的实施例包括根据陈述136所述的制品,其中将 第二元数据存储在内存中的散列表中包括从散列表中驱逐与第二密钥相关 联的现有元数据。
陈述138.本发明概念的实施例包括根据陈述137所述的制品,其中从 散列表中驱逐与第二密钥相关联的现有元数据包括在散列表中选择第二密 钥作为最近最少使用的密钥。
陈述139.本发明概念的实施例包括根据陈述136所述的制品,其中将 第二元数据存储在内存中的散列表中,第二元数据与所述密钥相关联,包 括:
确定所述散列表不存储与所述密钥相关联的所述第二元数据;及
响应于所述密钥的所述最高追加索引,从所述KV-SSD访问所述第二 元数据。
陈述140.本发明概念的实施例包括根据陈述139所述的制品,其中确 定所述密钥的所述最高追加索引包括***地请求与来自所述KV-SSD的密 钥相关联的数据,直到确定出所述密钥的所述新的最高追加索引。
陈述141.本发明概念的实施例包括根据陈述140所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述新的最高追加索引包括:
确定所述密钥的可能的最高追加索引;
将密钥的可能的最高追加索引与密钥组合,以产生测试密钥;及
试图访问与所述测试密钥相关联的所述数据。
陈述142.本发明概念的实施例包括根据陈述141所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述最高追加索引还包括:
递减所述密钥的可能的最高追加索引,以产生可能的新追加索引;
将密钥的可能的新追加索引与密钥组合,以产生新测试密钥;
试图访问与新测试密钥相关联的数据;及
至少部分地基于KV-SSD对试图访问与新测试密钥相关联的数据的响 应,重复递减密钥的可能的最高追加索引、将密钥的可能的新追加索引与 密钥组合、以及试图访问所述数据直到KV-SSD报告与新测试密钥相关联 的数据的操作。
陈述143.本发明概念的实施例包括根据陈述140所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述新的最高追加索引包括:
确定所述密钥的可能的最高追加索引的范围;
在所述密钥的可能的最高追加索引的所述范围的中间选择中间追加索 引;
将所述中间追加索引与所述密钥组合以产生测试密钥;
试图访问与所述测试密钥相关联的所述数据;
至少部分地基于所述KV-SSD对试图访问与所述测试密钥相关联的所 述数据的响应,将所述密钥的可能的最高追加索引的所述范围缩小到前半 范围及后半范围中的一个;及
重复选择中间追加索引、将所述中间追加索引与所述密钥组合、缩小 所述密钥的可能的最高追加索引的所述范围、以及试图访问与所述测试密 钥相关联的所述数据直到所述范围包括单个可能的最高追加索引的操作。
陈述144.本发明概念的实施例包括根据陈述139所述的制品,其中确 定密钥的新的最高追加索引包括从KV-SSD上的密钥的索引对象访问密钥 的新的最高追加索引。
陈述145.本发明概念的实施例包括根据陈述136所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 至少部分地基于密钥被选择以从散列表中驱逐,将新的最高追加索引存储 在KV-SSD上的密钥的索引对象中。
陈述146.本发明概念的实施例包括根据陈述134所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 将新的最高追加索引返回给应用。
陈述147.本发明概念的实施例包括根据陈述146所述的制品,其中将 新的最高追加索引返回给应用包括在响应于读取请求将值返回给应用之前 将新的最高追加索引返回给应用。
陈述148.本发明概念的实施例包括根据陈述118所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得:
从所述应用接收删除请求,以删除在密钥-值固态驱动器(KV-SSD)上 作为密钥-值对的与密钥相关联的值;
确定所述密钥的基本索引;
将所述基本索引与所述密钥组合以产生第一索引密钥;
在所述KV-SSD上对所述第一索引密钥实行第一删除操作;
确定所述密钥的至少一个追加索引;
将所述至少一个追加索引与所述密钥组合,以产生至少一个第二索引 密钥;及
在所述KV-SSD上对所述至少一个第二索引密钥实行至少一个第二删 除操作。
陈述149.本发明概念的实施例包括根据陈述148所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 将第一删除操作及所述至少一个第二删除操作的删除结果返回给应用。
陈述150.本发明概念的实施例包括根据陈述148所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得:
在内存中的散列表中定位元数据,所述元数据与密钥相关联;及
从内存中的散列表中移除元数据。
陈述151.本发明概念的实施例包括根据陈述148所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得:
识别存储在KV-SSD上的密钥的索引对象;及
从KV-SSD中删除密钥的索引对象。
陈述152.本发明概念的实施例包括一种制品,所述制品包括非暂时性 存储介质,所述非暂时性存储介质上存储有指令,所述指令当由机器执行 时,使得:
从应用接收追加请求,以将第二值追加到密钥-值固态驱动器(KV-SSD) 上与密钥相关联的值作为密钥-值对,所述应用由处理器执行;
确定所述密钥的最高追加索引;
递增所述最高追加索引以产生新的最高追加索引;
将所述新的最高追加索引与所述密钥组合以产生追加索引密钥;及
在所述KV-SSD上实行第二存储操作以将所述追加索引密钥与所述第 二值相关联。
陈述153.本发明概念的实施例包括根据陈述152所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 将第二存储操作的追加结果返回给应用。
陈述154.本发明概念的实施例包括根据陈述152所述的制品,其中:
所述KV-SSD存储与所述密钥相关联的第一元数据,所述第一元数据 包括对所述密钥-值对的追加请求的最高追加索引、第一偏移、第一长度及 第一数据结构中的至少一个;
所述方法还包括:
建立所述密钥的第二元数据;及
将所述第二值与第二元数据组合以产生第二修改值;且
在所述KV-SSD上实行第二存储操作以将所述追加索引密钥与所述第 二值相关联包括在所述KV-SSD上实行所述第二存储操作以将所述追加索 引密钥与所述第二修改值相关联。
陈述155.本发明概念的实施例包括根据陈述154所述的制品,其中第 二元数据包括密钥的新的最高追加索引。
陈述156.本发明概念的实施例包括根据陈述155所述的制品,其中第 二元数据还包括第二追加偏移及第二追加长度。
陈述157.本发明概念的实施例包括根据陈述155所述的制品,其中第 二元数据还包括对密钥-值对的追加请求的第二数据结构。
陈述158.本发明概念的实施例包括根据陈述155所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 将第二元数据存储在内存中的散列表中,第二元数据与密钥相关联。
陈述159.本发明概念的实施例包括根据陈述158所述的制品,其中将 第二元数据存储在内存中的散列表中包括从散列表中驱逐与第二密钥相关 联的现有元数据。
陈述160.本发明概念的实施例包括根据陈述159所述的制品,其中从 散列表中驱逐与第二密钥相关联的现有元数据包括在散列表中选择第二密 钥作为最近最少使用的密钥。
陈述161.本发明概念的实施例包括根据陈述158所述的制品,其中将 第二元数据存储在内存中的散列表中,第二元数据与所述密钥相关联,包 括:
确定所述散列表不存储与所述密钥相关联的所述第一元数据;
确定所述密钥的所述最高追加索引;及
响应于所述密钥的所述最高追加索引,从所述KV-SSD访问所述第一 元数据。
陈述162.本发明概念的实施例包括根据陈述161所述的制品,其中确 定所述密钥的所述最高追加索引包括***地请求与来自所述KV-SSD的密 钥相关联的数据,直到确定出所述密钥的所述最高追加索引。
陈述163.本发明概念的实施例包括根据陈述162所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述最高追加索引包括:
确定所述密钥的可能的最高追加索引;
将密钥的可能的最高追加索引与密钥组合,以产生测试密钥;及
试图访问与所述测试密钥相关联的所述数据。
陈述164.本发明概念的实施例包括根据陈述163所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述最高追加索引还包括:
递减所述密钥的可能的最高追加索引,以产生可能的新追加索引;
将密钥的可能的新追加索引与密钥组合,以产生新测试密钥;
试图访问与新测试密钥相关联的数据;及
至少部分地基于KV-SSD对试图访问与新测试密钥相关联的数据的响 应,重复递减密钥的可能的最高追加索引、将密钥的可能的新追加索引与 密钥组合、以及试图访问所述数据直到KV-SSD报告与新测试密钥相关联 的数据的操作。
陈述165.本发明概念的实施例包括根据陈述162所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述最高追加索引包括:
确定所述密钥的可能的最高追加索引的范围;
在所述密钥的可能的最高追加索引的所述范围的中间选择中间追加索 引;
将所述中间追加索引与所述密钥组合以产生测试密钥;
试图访问与所述测试密钥相关联的所述数据;
至少部分地基于所述KV-SSD对试图访问与所述测试密钥相关联的所 述数据的响应,将所述密钥的可能的最高追加索引的所述范围缩小到前半 范围及后半范围中的一个;及
重复选择中间追加索引、将所述中间追加索引与所述密钥组合、缩小 所述密钥的可能的最高追加索引的所述范围、以及试图访问与所述测试密 钥相关联的所述数据直到所述范围包括单个可能的最高追加索引的操作。
陈述166.本发明概念的实施例包括根据陈述161所述的制品,其中确 定密钥的最高追加索引包括从KV-SSD上的密钥的索引对象访问密钥的最 高追加索引。
陈述167.本发明概念的实施例包括根据陈述158所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 至少部分地基于密钥被选择以从散列表中驱逐,将新的最高追加索引存储 在KV-SSD上的密钥的索引对象中。
陈述168.本发明概念的实施例包括一种制品,所述制品包括非暂时性 存储介质,所述非暂时性存储介质上存储有指令,所述指令当由机器执行 时,使得:
从应用接收读取请求,以从密钥-值固态驱动器(KV-SSD)读取与密钥 相关联的值作为密钥-值对,所述应用由处理器执行;
确定所述密钥的基本索引;
确定所述密钥的最高追加索引;
将从所述密钥的基本索引到所述密钥的最高追加索引的每个索引与所 述密钥组合,以产生至少两个索引密钥;
在所述KV-SSD上对所述至少两个索引密钥中的每一个实行读取操作, 以产生至少两个读取值;
将所述至少两个读取值组合以产生所述值;及
响应于读取请求,将所述值返回给应用。
陈述169.本发明概念的实施例包括根据陈述168所述的制品,其中:
KV-SSD存储与密钥相关联的第一元数据及与密钥相关联的第二元数 据,第一元数据包括对密钥-值对的追加请求的第一追加索引、第一偏移、 第一长度及第一数据结构中的至少一个,第二元数据包括对密钥-值对的追 加请求的最高追加索引、第二偏移、第二长度及第二数据结构中的至少一 个,第二元数据也存储在内存中的散列表中;及
确定密钥的最高追加索引包括从散列表中的第二元数据确定密钥的最 高追加索引。
陈述170.本发明概念的实施例包括根据陈述168所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 在内存中的散列表中存储第二元数据,第二元数据包括对密钥-值对的追加 请求的最高追加索引、第二偏移、第二长度及第二数据结构中的至少一个。
陈述171.本发明概念的实施例包括根据陈述170所述的制品,其中将 第二元数据存储在内存中的散列表中包括从散列表中驱逐与第二密钥相关 联的现有元数据。
陈述172.本发明概念的实施例包括根据陈述171所述的制品,其中从 散列表中驱逐与第二密钥相关联的现有元数据包括在散列表中选择第二密 钥作为最近最少使用的密钥。
陈述173.本发明概念的实施例包括根据陈述170所述的制品,其中将 第二元数据存储在内存中的散列表中,第二元数据与所述密钥相关联,包 括:
确定所述散列表不存储与所述密钥相关联的所述第二元数据;及
响应于所述密钥的所述最高追加索引,从所述KV-SSD访问所述第二 元数据。
陈述174.本发明概念的实施例包括根据陈述173所述的制品,其中确 定所述密钥的所述最高追加索引包括***地请求与来自所述KV-SSD的密 钥相关联的数据,直到确定出所述密钥的所述最高追加索引。
陈述175.本发明概念的实施例包括根据陈述174所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述最高追加索引包括:
确定所述密钥的可能的最高追加索引;
将密钥的可能的最高追加索引与密钥组合,以产生测试密钥;及
试图访问与所述测试密钥相关联的所述数据。
陈述176.本发明概念的实施例包括根据陈述175所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述最高追加索引还包括:
递减所述密钥的可能的最高追加索引,以产生可能的新追加索引;
将密钥的可能的新追加索引与密钥组合,以产生新测试密钥;
试图访问与新测试密钥相关联的数据;及
至少部分地基于KV-SSD对试图访问与新测试密钥相关联的数据的响 应,重复递减密钥的可能的最高追加索引、将密钥的可能的新追加索引与 密钥组合、以及试图访问所述数据直到KV-SSD报告与新测试密钥相关联 的数据的操作。
陈述177.本发明概念的实施例包括根据陈述174所述的制品,其中系 统地请求与来自所述KV-SSD的密钥相关联的数据,直到确定出所述密钥 的所述最高追加索引包括:
确定所述密钥的可能的最高追加索引的范围;
在所述密钥的可能的最高追加索引的所述范围的中间选择中间追加索 引;
将所述中间追加索引与所述密钥组合以产生测试密钥;
试图访问与所述测试密钥相关联的所述数据;
至少部分地基于所述KV-SSD对试图访问与所述测试密钥相关联的所 述数据的响应,将所述密钥的可能的最高追加索引的所述范围缩小到前半 范围及后半范围中的一个;及
重复选择中间追加索引、将所述中间追加索引与所述密钥组合、缩小 所述密钥的可能的最高追加索引的所述范围、以及试图访问与所述测试密 钥相关联的所述数据直到所述范围包括单个可能的最高追加索引的操作。
陈述178.本发明概念的实施例包括根据陈述173所述的制品,其中确 定密钥的最高追加索引包括从KV-SSD上的密钥的索引对象访问密钥的最 高追加索引。
陈述179.本发明概念的实施例包括根据陈述170所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 至少部分地基于密钥被选择以从散列表中驱逐,将最高追加索引存储在 KV-SSD上的密钥的索引对象中。
陈述180.本发明概念的实施例包括根据陈述168所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 将最高追加索引返回给应用。
陈述181.本发明概念的实施例包括根据陈述180所述的制品,其中将 最高追加索引返回给应用包括在响应于读取请求将值返回给应用之前将最 高追加索引返回给应用。
陈述182.本发明概念的实施例包括一种制品,所述制品包括非暂时性 存储介质,所述非暂时性存储介质上存储有指令,所述指令当由机器执行 时,使得:
从应用接收删除请求,以删除在密钥-值固态驱动器(KV-SSD)上作为 密钥-值对的与密钥相关联的值,所述应用由处理器执行;
确定所述密钥的基本索引;
将所述基本索引与所述密钥组合以产生第一索引密钥;
在所述KV-SSD上对所述第一索引密钥实行删除操作;
确定所述密钥的至少一个追加索引;
将所述至少一个追加索引与所述密钥组合,以产生至少一个第二索引 密钥;及
在所述KV-SSD上对所述至少一个第二索引密钥实行至少一个删除操 作。
陈述183.本发明概念的实施例包括根据陈述182所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得 将第一删除操作及所述至少一个第二删除操作的删除结果返回给应用。
陈述184.本发明概念的实施例包括根据陈述182所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得:
在内存中的散列表中定位元数据,所述元数据与密钥相关联;及
从内存中的散列表中移除元数据。
陈述185.本发明概念的实施例包括根据陈述182所述的制品,所述非 暂时性存储介质上存储有进一步的指令,所述指令当由机器执行时,使得:
识别存储在KV-SSD上的密钥的索引对象;及
从KV-SSD中删除密钥的索引对象。
因此,考虑到本文所述的实施例的各种各样的排列,此详细说明及随 附的材料仅旨在为说明性的,而不应被视为限制本发明概念的范围。因此, 本发明概念主张所有这样的修改可处于随附权利要求书及其等效形式的范 围及精神内。
Claims (20)
1.一种使用电路实现的软件,包括:
应用编程接口,从应用接收与密钥-值固态驱动器的密钥-值对相关的请求,所述密钥-值对包括密钥及值,所述应用由处理器执行;
组合器软件,将所述密钥与索引组合,以产生索引密钥;及
执行软件,使用所述索引密钥及所述值在所述密钥-值固态驱动器上执行操作。
2.根据权利要求1所述的使用电路实现的软件,还包括产生所述密钥的元数据的元数据软件。
3.根据权利要求2所述的使用电路实现的软件,还包括散列表软件,所述散列表软件使用内存中的散列表来存储与所述密钥相关联的所述元数据。
4.根据权利要求1所述的使用电路实现的软件,其中:
所述请求包括读取请求;且
所述执行软件能够操作以在所述密钥-值固态驱动器上读取与多个索引密钥相关联的多个值,并将所述多个值组合以产生所述值。
5.根据权利要求1所述的使用电路实现的软件,其中:
所述请求包括删除请求;且
所述执行软件能够操作以删除所述密钥-值固态驱动器上的多个索引密钥。
6.一种用于密钥-值存储的方法,包括:
从应用接收写入请求,以将与密钥相关联的值存储在密钥-值固态驱动器上作为密钥-值对,所述应用由处理器执行;
确定所述密钥的基本索引;
将所述基本索引与所述密钥组合以产生索引密钥;及
在所述密钥-值固态驱动器上实行存储操作以将所述索引密钥与所述值相关联。
7.根据权利要求6所述的方法,还包括将所述存储操作的写入结果返回给所述应用。
8.根据权利要求6所述的方法,其中:
所述方法还包括:
建立所述密钥的第一元数据;及
将所述值与所述第一元数据组合以产生第一修改值;且
在所述密钥-值固态驱动器上实行存储操作以将所述索引密钥与所述值相关联包括在所述密钥-值固态驱动器上实行所述存储操作以将所述索引密钥与所述第一修改值相关联。
9.根据权利要求8所述的方法,其中所述第一元数据包括所述密钥的所述基本索引。
10.根据权利要求9所述的方法,还包括将所述第一元数据存储在内存中的散列表中,所述第一元数据与所述密钥相关联。
11.根据权利要求6所述的方法,其中:
所述方法还包括,至少部分地基于所述值超过所述密钥-值固态驱动器上的对象的最大大小,确定存储所述值所需的对象的数量;
将所述基本索引与所述密钥组合以产生索引密钥包括将多个索引与所述密钥组合以产生多个索引密钥,其中所述多个索引密钥至少与存储所述值所需的对象的所述数量一样大;且
在所述密钥-值固态驱动器上实行存储操作以将所述索引密钥与所述值相关联包括在所述密钥-值固态驱动器上实行多个存储操作以将所述多个索引密钥中的每一个与所述值的一部分相关联。
12.根据权利要求6所述的方法,还包括:
从所述应用接收追加请求以将第二值追加到所述密钥-值固态驱动器上与所述密钥相关联的所述值;
确定所述密钥的最高追加索引;
递增所述最高追加索引以产生新的最高追加索引;
将所述新的最高追加索引与所述密钥组合以产生追加索引密钥;及
在所述密钥-值固态驱动器上实行第二存储操作以将所述追加索引密钥与所述第二值相关联。
13.一种用于密钥-值存储的方法,包括:
从应用接收追加请求,以将第二值追加到密钥-值固态驱动器上与密钥相关联的值作为密钥-值对,所述应用由处理器执行;
确定所述密钥的最高追加索引;
递增所述最高追加索引以产生新的最高追加索引;
将所述新的最高追加索引与所述密钥组合以产生追加索引密钥;及
在所述密钥-值固态驱动器上实行第二存储操作以将所述追加索引密钥与所述第二值相关联。
14.根据权利要求13所述的方法,还包括将所述第二存储操作的追加结果返回给所述应用。
15.根据权利要求13所述的方法,其中:
所述密钥-值固态驱动器存储与所述密钥相关联的第一元数据,所述第一元数据包括对所述密钥-值对的追加请求的所述最高追加索引、第一偏移、第一长度及第一数据结构中的至少一个;
所述方法还包括:
建立所述密钥的第二元数据;及
将所述第二值与所述第二元数据组合以产生第二修改值;且
在所述密钥-值固态驱动器上实行第二存储操作以将所述追加索引密钥与所述第二值相关联包括在所述密钥-值固态驱动器上实行所述第二存储操作以将所述追加索引密钥与所述第二修改值相关联。
16.根据权利要求15所述的方法,其中所述第二元数据包括所述密钥的所述新的最高追加索引。
17.根据权利要求16所述的方法,还包括将所述第二元数据存储在内存中的散列表中,所述第二元数据与所述密钥相关联。
18.根据权利要求17所述的方法,其中将所述第二元数据存储在内存中的散列表中,所述第二元数据与所述密钥相关联,包括:
确定所述散列表不存储与所述密钥相关联的所述第一元数据;
确定所述密钥的所述最高追加索引;及
响应于所述密钥的所述最高追加索引,从所述密钥-值固态驱动器访问所述第一元数据。
19.根据权利要求18所述的方法,其中确定所述密钥的所述最高追加索引包括***地请求与来自所述密钥-值固态驱动器的密钥相关联的数据,直到确定出所述密钥的所述最高追加索引。
20.根据权利要求19所述的方法,其中***地请求与来自所述密钥-值固态驱动器的密钥相关联的数据,直到确定出所述密钥的所述最高追加索引包括:
确定所述密钥的可能的最高追加索引的范围;
在所述密钥的可能的最高追加索引的所述范围的中间选择中间追加索引;
将所述中间追加索引与所述密钥组合以产生测试密钥;
试图访问与所述测试密钥相关联的所述数据;
至少部分地基于所述密钥-值固态驱动器对所述试图访问与所述测试密钥相关联的所述数据的响应,将所述密钥的可能的最高追加索引的所述范围缩小到前半范围及后半范围中的一个;及
重复选择中间追加索引、将所述中间追加索引与所述密钥组合、缩小所述密钥的可能的最高追加索引的所述范围、以及试图访问与所述测试密钥相关联的所述数据直到所述范围包括单个可能的最高追加索引的操作。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962836065P | 2019-04-18 | 2019-04-18 | |
US62/836,065 | 2019-04-18 | ||
US16/440,978 | 2019-06-13 | ||
US16/440,978 US11580162B2 (en) | 2019-04-18 | 2019-06-13 | Key value append |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111832065A true CN111832065A (zh) | 2020-10-27 |
Family
ID=72832531
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010307199.8A Pending CN111832065A (zh) | 2019-04-18 | 2020-04-17 | 使用电路实现的软件和用于密钥-值存储的方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11580162B2 (zh) |
KR (1) | KR20200122994A (zh) |
CN (1) | CN111832065A (zh) |
TW (1) | TWI828901B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113987589A (zh) * | 2021-12-27 | 2022-01-28 | 飞天诚信科技股份有限公司 | 一种处理数据的方法及装置 |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20210004701A (ko) * | 2019-07-05 | 2021-01-13 | 삼성전자주식회사 | 키-밸류 기반으로 데이터를 저장하는 스토리지 장치 및 이의 동작 방법 |
US20210089403A1 (en) * | 2019-09-20 | 2021-03-25 | Samsung Electronics Co., Ltd. | Metadata table management scheme for database consistency |
FR3103664B1 (fr) * | 2019-11-27 | 2023-04-07 | Amadeus Sas | Système de stockage distribué pour stocker des données contextuelles |
US11287994B2 (en) * | 2019-12-13 | 2022-03-29 | Samsung Electronics Co., Ltd. | Native key-value storage enabled distributed storage system |
US11693772B2 (en) * | 2020-01-08 | 2023-07-04 | Samsung Electronics Co., Ltd. | System and method of using persistent memory to support small-sized data append for object store |
CN113094372A (zh) * | 2021-04-16 | 2021-07-09 | 三星(中国)半导体有限公司 | 数据存取方法、数据存取控制装置及数据存取*** |
US20230017732A1 (en) | 2021-07-16 | 2023-01-19 | Samsung Electronics Co., Ltd. | Key packing for flash key value store operations |
US11853605B2 (en) * | 2021-09-17 | 2023-12-26 | Micron Technology, Inc. | Database persistence |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6061690A (en) * | 1997-10-31 | 2000-05-09 | Oracle Corporation | Apparatus and method for storage of object collections in a database system |
CN103080910B (zh) | 2010-09-09 | 2016-06-01 | 日本电气株式会社 | 存储*** |
JP5524144B2 (ja) | 2011-08-08 | 2014-06-18 | 株式会社東芝 | key−valueストア方式を有するメモリシステム |
US8700683B2 (en) | 2011-10-24 | 2014-04-15 | Nokia Corporation | Method and apparatus for providing a key-value based storage interface |
JP5597666B2 (ja) * | 2012-03-26 | 2014-10-01 | 株式会社東芝 | 半導体記憶装置、情報処理システムおよび制御方法 |
US9075710B2 (en) * | 2012-04-17 | 2015-07-07 | SanDisk Technologies, Inc. | Non-volatile key-value store |
KR102044023B1 (ko) | 2013-03-14 | 2019-12-02 | 삼성전자주식회사 | 키 값 기반 데이터 스토리지 시스템 및 이의 운용 방법 |
JP6025149B2 (ja) | 2013-11-06 | 2016-11-16 | インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation | データを管理するシステムおよび方法 |
CN105335411A (zh) | 2014-07-31 | 2016-02-17 | 国际商业机器公司 | 用于数据处理的方法和*** |
US9438426B2 (en) | 2014-10-03 | 2016-09-06 | Seagate Technology Llc | Key-value data storage device with hybrid architecture |
US9727485B1 (en) | 2014-11-24 | 2017-08-08 | Pure Storage, Inc. | Metadata rewrite and flatten optimization |
US10083193B2 (en) | 2015-01-09 | 2018-09-25 | International Business Machines Corporation | Efficient remote pointer sharing for enhanced access to key-value stores |
US10303673B2 (en) | 2015-05-11 | 2019-05-28 | Apple Inc. | Hierarchical data storage |
US20160350302A1 (en) | 2015-05-27 | 2016-12-01 | Hedvig, Inc. | Dynamically splitting a range of a node in a distributed hash table |
US9927984B2 (en) * | 2015-10-14 | 2018-03-27 | Samsung Electronics Co., Ltd. | Electronic system with interface control mechanism and method of operation thereof |
US20170139594A1 (en) | 2015-11-17 | 2017-05-18 | Samsung Electronics Co., Ltd. | Key-value integrated translation layer |
CN105550345B (zh) | 2015-12-25 | 2019-03-26 | 百度在线网络技术(北京)有限公司 | 文件操作方法和装置 |
US10108547B2 (en) | 2016-01-06 | 2018-10-23 | Netapp, Inc. | High performance and memory efficient metadata caching |
US10073732B2 (en) | 2016-03-04 | 2018-09-11 | Samsung Electronics Co., Ltd. | Object storage system managing error-correction-code-related data in key-value mapping information |
US10169387B1 (en) | 2016-07-28 | 2019-01-01 | EMC IP Holding Company LLC | Self-balancing tree data structure compression |
US10795871B2 (en) | 2016-09-26 | 2020-10-06 | Vmware, Inc. | Key-value stores implemented using fragmented log-structured merge trees |
CN108614668B (zh) * | 2016-12-12 | 2022-12-06 | 北京忆恒创源科技股份有限公司 | 基于kv模型的数据访问方法与固态存储设备 |
US11386065B2 (en) | 2017-01-31 | 2022-07-12 | Salesforce.Com, Inc. | Database concurrency control through hash-bucket latching |
US11030155B2 (en) * | 2017-04-26 | 2021-06-08 | Samsung Electronics Co., Ltd. | Key value file system |
US10788998B2 (en) | 2017-07-07 | 2020-09-29 | Sap Se | Logging changes to data stored in distributed data storage system |
US11194522B2 (en) * | 2017-08-16 | 2021-12-07 | Intel Corporation | Networked shuffle storage |
US10860249B2 (en) * | 2017-12-25 | 2020-12-08 | Pliops Ltd. | Solid state disk (SSD) controller and database |
US10831734B2 (en) | 2018-05-07 | 2020-11-10 | Intel Corporation | Update-insert for key-value storage interface |
-
2019
- 2019-06-13 US US16/440,978 patent/US11580162B2/en active Active
-
2020
- 2020-03-17 KR KR1020200032422A patent/KR20200122994A/ko unknown
- 2020-04-15 TW TW109112565A patent/TWI828901B/zh active
- 2020-04-17 CN CN202010307199.8A patent/CN111832065A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113987589A (zh) * | 2021-12-27 | 2022-01-28 | 飞天诚信科技股份有限公司 | 一种处理数据的方法及装置 |
CN113987589B (zh) * | 2021-12-27 | 2022-03-18 | 飞天诚信科技股份有限公司 | 一种处理数据的方法、装置、计算机可读存储介质及装置 |
Also Published As
Publication number | Publication date |
---|---|
US20200334292A1 (en) | 2020-10-22 |
TWI828901B (zh) | 2024-01-11 |
US11580162B2 (en) | 2023-02-14 |
TW202040406A (zh) | 2020-11-01 |
KR20200122994A (ko) | 2020-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111832065A (zh) | 使用电路实现的软件和用于密钥-值存储的方法 | |
US10768843B2 (en) | Optmizing metadata management in data deduplication | |
US9471500B2 (en) | Bucketized multi-index low-memory data structures | |
CN113039547B (zh) | 键值存储存储器***、方法及相关存储媒体 | |
US9678977B1 (en) | Similarity based deduplication of snapshots data | |
JP5996088B2 (ja) | 暗号ハッシュ・データベース | |
CN105843551B (zh) | 高性能和大容量储存重复删除中的数据完整性和损耗电阻 | |
KR20210057835A (ko) | 압축한 키-값 저장소 트리 데이터 블록 유출 | |
US10366065B2 (en) | Memory efficient lookup structure | |
US20160162207A1 (en) | System and method for data deduplication utilizing extent id database | |
US9817865B2 (en) | Direct lookup for identifying duplicate data in a data deduplication system | |
WO2015195936A1 (en) | Range-based data deduplication | |
CN113535670B (zh) | 一种虚拟化资源镜像存储***及其实现方法 | |
US10515055B2 (en) | Mapping logical identifiers using multiple identifier spaces | |
US20210133117A1 (en) | Metadata representation for enabling partial page duplication | |
US11520818B2 (en) | Method, apparatus and computer program product for managing metadata of storage object | |
CN111625198A (zh) | 一种元数据缓存方法和元数据缓存装置 | |
CN116627345A (zh) | 应用于海量value键值对的高性能KV缓存方法及装置 | |
US11068208B2 (en) | Capacity reduction in a storage system | |
US11099756B2 (en) | Managing data block compression in a storage system | |
US11829341B2 (en) | Space-efficient persistent hash table data structure | |
US10558618B1 (en) | Metadata compression | |
US11112987B2 (en) | Optmizing data deduplication | |
US11119681B2 (en) | Opportunistic compression | |
Zhang | Towards Space-Efficient High-Performance In-Memory Search Structures |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20210607 Address after: Han Guojingjidao Applicant after: Samsung Electronics Co.,Ltd. Address before: Room 10, 3833 northwest First Street, San Jose, California, USA Applicant before: Stellas Technology Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |