具有散列的键值存储设备的制作方法


具有散列的键值存储设备
1.相关申请的交叉引用
2.本技术要求于2021年8月18日提交的题为“near-line perfect hash function computation for collision free indexing in kv stores”的美国临时申请no.63/234,613和2021年10月20日提交的题为“key value storage device with hashing”的美国申请no.17/506,647的优先权和权益,其全部内容通过引用并入本文。
技术领域
3.根据本公开的实施例的一个或多个方面涉及持久存储,并且更具体地,涉及用于具有完美散列的键值存储设备的系统和方法。


背景技术:



4.键值(key-value,kv)存储设备具有各种数据存储用途,例如,在服务器系统中。在这种存储设备中,数据可以被存储为值,每个值由各自的键标识,并且使用kv存储设备的主机可以例如发送包括键的读取请求,该键标识要从存储设备读取的值。


技术实现要素:



5.在一些实施例中,kv持久存储设备(例如,kv ssd)使用动态完美散列来保证最多单个页读取来查键。在一些实施例中,在对完美散列的间断更新之间采用局部性转换器、局部性转换器上的布隆过滤器和尾指针表。
6.在更新之间,(例如,通过添加键或删除键)影响键集的指令可以被记录在局部性转换器中,并且接收到的指令可以(在首先检查布隆过滤器之后)检查局部性转换器,以确保从主键值存储的任何读取有效。当局部性转换器已经聚集了足够数量的更新时,可以以延迟的方式处理键更新(例如,放置(put)或删除(delete))。
7.根据本公开的实施例,提供了一种方法,包括:由包括用于将键映射到值地址的散列的持久键值存储设备接收第一指令,该第一指令是用于访问第一键值集合中的第一键的指令;以及在持久键值存储设备的指令日志中记录第一指令。
8.在一些实施例中,其中,该散列是被配置为避免冲突的散列函数。
9.在一些实施例中,在指令日志中记录第一指令包括在指令日志中的第一位置处记录第一指令,该方法还包括:接收第二指令,该第二指令是用于访问第一键值集合中的第二值的指令;以及在指令日志中的第二位置处与指向第一位置的指针一起记录第二指令。
10.在一些实施例中,在指令日志中记录第一指令包括在尾指针表中存储指向与第一键值集合相对应的地方(location)中的第一位置(position)的指针。
11.在一些实施例中,在指令日志中的第二位置处记录第二指令包括在尾指针表中存储指向与第一键值集合相对应的地方中的第二位置的指针。
12.在一些实施例中,第一指令是删除指令,并且该方法还包括将第一键添加到黑名单中。
13.在一些实施例中,该方法还包括:由持久键值存储设备接收第二指令,该第二指令是用于访问第一键的指令;确定第一键在黑名单中;以及报告第一键的不存在。
14.在一些实施例中,在指令日志中记录第一指令还包括将第一键添加到布隆过滤器。
15.在一些实施例中,该方法还包括:由持久键值存储设备接收第二指令,该第二指令是用于访问第一键的指令;确定第一键存在于指令日志中;以及响应于确定第一键存在于指令日志中,访问与第一键相关联的值,该值位于第一地址,该第一地址与第一键一起存储在指令日志中。
16.在一些实施例中,确定第一键存在于指令日志中包括:基于布隆过滤器确定第一键可以存在于指令日志中。
17.根据本公开的实施例,提供了一种持久键值存储设备,包括:处理电路;以及持久存储介质,该存储设备包括用于将键映射到值地址的散列,该散列包括指令日志,该处理电路被配置为:接收第一指令,该第一指令是用于访问第一键值集合中的第一键的指令;以及在指令日志中记录第一指令。
18.在一些实施例中,该散列是被配置为避免冲突的散列函数。
19.在一些实施例中:在指令日志中记录第一指令包括在指令日志中的第一位置处记录第一指令,并且该处理电路还被配置为:接收第二指令,该第二指令是用于访问第一键值集合中的第二值的指令;以及在指令日志中的第二位置处与指向第一位置的指针一起记录第二指令。
20.在一些实施例中,在指令日志中记录第一指令包括在尾指针表中存储指向与第一键值集合相对应的地方中的第一位置的指针。
21.在一些实施例中,在指令日志中的第二位置处记录第二指令包括在尾指针表中存储指向与第一键值集合相对应的地方中的第二位置的指针。
22.在一些实施例中,第一指令是删除指令,并且该处理电路还被配置为将第一键添加到黑名单。
23.在一些实施例中,该处理电路还被配置为:接收第二指令,该第二指令是用于访问第一键的指令;确定第一键在黑名单中;以及报告第一键的不存在。
24.在一些实施例中,在指令日志中记录第一指令还包括将第一键添加到布隆过滤器。
25.在一些实施例中,该处理电路还被配置为:接收第二指令,该第二指令是用于访问第一键的指令;确定第一键存在于指令日志中;以及响应于确定第一键存在于指令日志中,访问与第一键相关联的值,该值位于第一地址,该第一地址与第一键一起存储在指令日志中。
26.根据本公开的实施例,提供了一种持久键值存储设备,包括:用于处理的部件;以及持久存储介质,该存储设备包括用于将键映射到值地址的散列,该散列包括指令日志,该用于处理的部件被配置为:接收第一指令,该第一指令是用于访问第一键值集合中的第一键的指令;以及在指令日志中记录第一指令。
附图说明
27.附图旨在提供对特定实施例的图示,并且未具体示出的其他实施例不被排除在本公开的范围之外。参考说明书、权利要求书和附图,将会认识和理解本公开的这些和其他特征和优点,其中:
28.图1a是根据本公开的实施例的存储设备的框图;
29.图1b是根据本公开的实施例的散列函数和位图区段(bitmap section)的示意图;
30.图2是根据本公开的实施例的用于操作kv持久存储设备的方法的流程图;
31.图3是根据本公开实施例的用于更新完美散列的方法的流程图;
32.图4是根据本公开的实施例的用于处理访问第一值的指令的方法的流程图;
33.图5是根据本公开的实施例的备份文件集和对应的位图的示意图;
34.图6是根据本公开的实施例的用于处理备份装置(backup appliance)中孤立数据的流程图;
35.图7是根据本公开的实施例的主机和存储设备的框图;
36.图8是根据本公开的实施例的用于处理指令的方法的流程图;和
37.图9是根据本公开的实施例的用于处理指令的另一种方法的流程图。
具体实施方式
38.下文结合附图描述的具体实施方式旨在说明根据本公开提供的具有完美散列的键值存储设备的示例性实施例,而非旨在表示其中可以构建或利用本公开的唯一形式。描述结合所示实施例阐述了本公开的特征。然而,应当理解,相同或等同的功能和结构可以通过不同的实施例来实现,这些不同的实施例也旨在包含在本公开的范围内。如本文别处所示的,相似的附图标记旨在指示相似的元素或特征。
39.减少键值(kv)操作的尾部时延可能有利于多种工作负载,如人工智能、机器学习、数据科学和去重复的备份存储。一些kv存储(kv store)实现方式使用固定散列函数将(随时间移动的)键集散列到桶(bucket)中。这样散列到桶中的键可能会导致冲突,并且冲突链长度会导致长的尾部时延。最坏情况的尾部时延可以与散列图的桶中最长冲突链的长度成比例。在固态驱动器(ssd)中实现的kv存储中,定位键可能需要若干次“与非”(not-and,nand)页读取,并且最长的尾部时延读取可能需要相对大量的nand页读取(例如,多达18到22次nand页读取)。因此,冲突可以会导致显著的性能下降。对于其中kv上传以批量和间断方式发生以及具有读密集型访问模式的工作负载,即使偶尔避免单个nand页键查也可以获得显著的性能改进。
40.kv ssd和kv存储可以在存储设备内实现散列图(hashmap),其中单个键存储在nand页中,从而在处理删除(delete)指令时产生更高的设备写入放大因子(write amplification factor,waf),以及在处理放置(put)、获取(get)或存在(exist)指令时产生更高的读取放大因子(read amplification factor,raf)。为了解决散列图内的冲突,包含在桶号上冲突的键的nand页可以被链接在一起。这种kv存储的最坏情况的尾部时延可以与散列图的桶中最长的冲突链的长度成比例。如上所述,在这种方法中,冲突可以导致性能下降。
41.因此,在一些实施例中,kv持久存储设备(例如,kv固态驱动(ssd))使用动态完美
散列来保证最多单个页读取来查键。在一些实施例中,在对完美散列的间断更新之间采用局部性转换器(也可以被称为“指令日志”)、局部性转换器上的布隆过滤器和尾指针表。当局部性转换器已经聚集了足够数量的更新时,可以以延迟的方式处理键更新(例如,放置或删除)。局部性转换器、布隆过滤器和尾指针表可以用于访问键(例如,在从主机接收到对应的指令时)。如本文所使用的,用于“访问”持久存储设备中的键的指令是读取或写入键或者确定其是否存储在存储设备中的任何指令(诸如放置、获取、删除或存在)。
42.在一些实施例中,散列图的桶被一起分组为桶组(也可以被称为“键值集合”)。采用固定散列函数(不同于完美散列)来首先将每个键映射到桶组;该固定散列函数可以将多个键映射到每个桶组。固定散列函数可以是单个不变的散列函数(即,不同于用于实现完美散列的散列函数(下面将进一步详细讨论),其在操作期间不能被不同的散列函数替换)。然后,在每个桶组内,采用相应的完美散列来将每个键映射到桶,而没有冲突。属于一组中的多个桶的键可以被打包到单个nand页中。如本文所使用的,“桶”是其中存储值的存储地方,或者等同地,存储的值本身。如本文所使用的,“桶组”是例如出于便于访问的目的而分组在一起的这样的桶的集合。
43.在一些实施例中,系统根据图1来构建。可以被称为散列图105的第一表用于存储针对每个桶组的一个条目。散列图105的大小可以被调整为适合动态随机访问存储器(dram)的区域,该动态随机访问存储器可以设置在持久存储中,用于与其中可能发生冲突并且键被链接以适应冲突的散列函数一起使用。这样的区域可以具有例如每桶四个字节的大小;这样,散列图105的条目可以被相应地调整大小。散列图105的每个条目包括:(i)基页指针110,(ii)散列函数选择器的集115,(iii)存储的键位图120,以及(iv)黑名单数组125(下面将进一步详细讨论其中的每一个)。基页指针是指向桶组的连续逻辑存储区(或“键存储区”130)的开始处的预定逻辑页地址(基页地址)的静态指针,该连续逻辑存储区足够大以存储每桶组的n(其中,例如,n《=15*桶组中的桶的数量)个键。散列函数选择器(例如,8位索引)从通用散列函数生成器中选择散列函数。在一些实施例中,对于每个桶组,散列图105包括3到5个这样的选择器。存储的键位图(可以被简称为“位图”)是将位图内的位位置或“位偏移”映射到唯一键偏移的变换,该唯一键偏移指定了相对于基页地址的键被存储的逻辑地址。位图中的每个设置位(set bit)对应于存储在键存储区中经打包的键中的键,该键存储区可以是从该桶组的基页地址处开始的nand页的集。
44.键可以在连续域(field)(被称为“键槽”)中被存储在键存储区,每个键槽的宽度足以容纳最大可能的键(例如,32至255字节的宽度)。将键写入键存储区,使得位图的第n个设置位对应于键存储区中的第n个键槽;例如,第10个设置位(例如,在位图中,其可以是位偏移25)对应于从基页地址起的键槽号10。例如,如果每个nand页总共可以存储64个键,则位图中的第100个设置位对应于第二个nand页中的第36个键。黑名单数组存储已经被删除(作为从主机接收到的删除指令的结果)但是其删除尚未反映在位图和包含经打包的键的键存储区中的任何键的索引。将键打包到键存储区的nand页中,使得在每个nand页中最多有p个键,其中p是针对最长的键名计算的(例如,基于应用,键大小可以小于24字节或小于256字节)。在一些实施例中,逻辑到物理(l2p)表被重新用于存储散列图105(其包含散列函数选择器、存储的键的位图和经删除的键索引的黑名单数组)。
45.上述数据组织可以实现完美散列。如本文所使用的,“散列”是用于将键映射到值
的系统或方法(或其组合)。如本文所使用的,“完美散列”是避免冲突的散列函数。
46.为了最初构建存储数据结构,并且在需要时(例如,在主机执行了多次添加和删除后)重新构建存储数据结构,可使用以下方法。参考图1b和图2,当构建桶组的完美散列时,桶组的位图空间中的位都被设置为0,并且位图空间被划分为k个区段170。在225,选择散列函数族175,从散列函数族175中选择第一散列函数,并且在230,对桶组中的所有键进行散列(例如,映射到相应的位偏移),使得每个键在散列图105的第一区段中被表示。对于在位图的第一区段中被表示而没有冲突的每个键,存储的键位图中对应的位被设置为1。如果发生了任何冲突,则选择另一个散列函数,并且与其他键冲突的键(即,被映射到已经被设置为1的位的键)被散列到位图的第二区段中。如在第一次迭代中一样,每个键被映射到位图的第二区段的位;如果该位尚未被设置,则将其设置为1;如果其已经被设置,则该键被添加到散列时发生冲突的键列表中。每次用存储的键位图的下一区段和新的散列函数重复这种方法,直到在存储的键位图的区段中没有发生冲突、或者直到使用了第k区段并且发生了冲突为止。在k次迭代结束时(或更早),所有的键都将被用尽或者一些键将在位图的第k区段发生冲突。如果在位图的第k区段中存在冲突,则在清除存储的键位图之后,可以通过为位图的第一区段选择新的散列函数来重复整个过程。在一些实施例中,对于每arm核每秒大约4千万到1亿个键,可以通过所描述的方法来创建完美散列。
47.每个值可以存储在持久存储中。这些值可以具有可变的大小,并且它们可以较大;因此,一些值在存储中可以被分段。键存储区可以连同每个键一起存储指向范围(extent)映射器140(其可以是用于存储值的(可能被分段的)存储区)中的地址(例如,物理地址)的指针。在范围映射器中,每个值可以存储为链表中的一个或多个条目,如图所示。
48.参考图2,当添加或删除键时,可以采用局部性转换器150和黑名单数组(在205,如下文进一步详细讨论的)来继续执行获取、放置和删除指令,而无需如上所述地重新生成完美散列。这种操作模式可能导致局部性转换器和黑名单数组的大小逐渐增加。最终,例如,一旦局部性转换器或黑名单数组的大小已经达到相应的阈值,如在210所确定的,就可以更新或重构散列。在图2中,该过程如下所示。在215,按桶整理(collate)键更新(每个键更新作为记录在局部性转换器中对应的指令的一部分保存在局部性转换器中),并且在220,执行动态完美散列计算。在225,选择散列函数族来创建用于表示桶组中所有键的完美散列,在230,创建键的散列值的位图(该位图也用于确定键存储区中的偏移),并且在235,将键打包到键存储区中,并且将值存储在范围映射器中。在240,可以用为创建桶组的完美散列而选择的散列函数的索引来更新散列图(或l2p表),并且可以更新包含经打包的键的nand页中的键的偏移的位图。对每个桶组重复该过程;如果在245确定还有更多桶组要处理,则过程返回到步骤225。
49.图3示出了用于更新完美散列的过程。在305,整理在局部性转换器中对于桶组的键添加和删除(排除在局部性转换器中插入并随后删除的键)。如果在310确定有要删除的键,则在315,用要删除的键的索引来更新黑名单数组。如果如在320所确定的,要添加新的键,那么如果如在325所确定的,可以将键添加到现有的完美散列中(根据需要选择新的散列函数以仅更新最后几个区段),则在330,更新存储的键位图,并且将键打包到新的nand页中。
50.在该过程中,可以清除与任何已删除的键相对应的位,并且可以设置与任何已添
加的键相对应的位(如果它尚未被设置;如果它已被设置,则可以尝试到位图的其他区段的映射)。如果现有的散列函数能够使用该过程来容纳更新的键,则键存储区的内容可以被相应地更新。如果现有的散列函数不能容纳更新的键,则仅位图的最后几个区段的散列函数可以被改变,使得可以以最小计算工作量(effort)来将新的键集表示为完美散列。
51.如果尝试改变一些但不是所有的散列函数也失败(例如,如果如在325所确定的,不能将键添加到现有的完美散列中),则可以重构整个散列。即使这种强力(brute force)计算也可以很快(每秒3千万-1亿个键)。在335,为要存储在桶组中的所有新的和旧的键重新计算完美散列,根据需要清除黑名单数组,将键打包到新的nand页中(即,形成新的键存储区),并且(先前使用的键存储区的)旧的nand页准备好进行设备垃圾收集。
52.如上所述,添加或删除键的指令(例如,键尚未存储的写入指令或删除指令)可以通过将每个此类指令记录在(例如,将每个此类指令附加到)局部性转换器中来处理,该局部性转换器是存储区,被组织为日志结构化存储,用于记录此类指令。如本文所使用的,在局部性转换器中“记录指令”意味着在局部性转换器中存储用于稍后要执行的指令的足够信息(例如,存储要执行的操作(例如,其是放置、获取、删除还是存在),存储键,以及如果要写入或修改值,则存储值(或指向值的指针))。如本文所使用的,“局部性转换器”是适于存储足够信息以供指令稍后被执行的任何数据结构。指令可以作为每个桶组的链表保存在局部性转换器中。对于每个桶组,尾指针表155(图1)可以指向对于桶组的最后一个添加的条目。当指令被添加到局部性转换器时,更新布隆过滤器160以通过设置适当的位来记录键的存在。在一些实施例中,每个桶组的指令被保存到该桶组的单独的相应局部性转换器中(而不是所有的指令被保存到由若干个(例如,所有)桶组共享的局部性转换器中)。
53.当键被删除时(作为从主机接收到的删除指令的结果),已删除的键在存储的键位图中的位置被标记在黑名单数组中(如上所述,其按桶组进行维护)。在随后的查过程中,如果在位图中到键,则还会在黑名单数组中检查它的位置,以确保它没有被删除(键存储区尚未被更新以反映删除)。
54.参考图4,在操作中,键查操作(例如,作为获取指令的一部分)可以包括通过在405查阅(consult)局部性转换器的布隆过滤器来检查键是否在局部性转换器中。如果如在410所确定的,键不存在于局部性转换器中,则(使用固定散列函数)将其散列到桶组之一。基于键被映射到的桶组,根据桶组的散列函数选择器来选择桶组的散列函数,并且检查位图以查看与键相对应的位是否被设置。如在415所确定的,如果该位未被设置,则保证了该键不存在于存储系统中,并且在420,系统断定该键未被存储(然后,系统可以向主机报告第一键的不存在)。在这种情况下,没有必要将与获取指令一起接收到的键与存储在键存储区中的任何键进行比较。因此,失败的键查可以非常快,这对于专门构建的备份装置和云备份应用可以是特别有利的。
55.如在415所确定的,如果在位图中设置了与键相对应的位,则从键存储区中读取键(在425通过对位图中设置位的数量进行计数以确定与该键相对应的位的偏移来确定其在键存储区中的地方之后)。如果存储区中的键匹配正在查的键,则键查已经成功(并且例如,可以通过查并返回值来完成获取指令)。如果存储区中的键不与正在查的键匹配,则键查失败(例如,正在查的键是散列函数映射到与存储的不同键相同的位的键)。
56.为避免用于将存储的键与正在查的键进行比较的页读取,可以在430查阅包含
被删除的键的索引的黑名单数组,以确保在从键存储区读取存储的键之前,键尚未被删除。如果键索引在黑名单数组中,则在420,系统断定该键未被存储。如果该键尚未被删除,则在435,可以读取一个nand页中对应于该偏移的适当区段,并且在440,从范围映射器读取值。如在410所确定的,如果布隆过滤器指示该键可能存在于局部性转换器中,则在445,遍历局部性转换器。如在450所确定的,如果该键不存在于局部性转换器中,则该过程返回到步骤415。如果该键存在于局部性转换器中,并且如在455所确定的,如果为该键记录的最后一条指令不是删除指令,则该过程返回到步骤440;否则,在420,系统断定该键未被存储。
57.在一些实施例中,执行备份装置和kv存储之间的高效协作垃圾收集。备份装置可以将键(指纹)存储在备份文件描述符中(潜在地存储数千到数百万个这样的键)。单个键潜在地存储在多个备份中。当备份被删除时,一些键可能会被孤立;装置不会跟踪孤立键。这样,一些实施例使得装置能够访问桶组内存储的键的位图。在这样的实施例中,装置可以标识实时备份(live backup)中的键属于哪个桶和桶组,并且获得该桶组中存储的键的位图。这可以针对实时备份中的所有键进行。然后,装置可以返回每桶组的修改后的位图,其指示哪些键必须保留,而哪些要删除。设备然后可以处理该列表,并且对不再需要的每个键执行适当的删除动作。
58.在图5和图6中示出了该过程。在图5中,备份装置包括三个备份文件505,其中两个被删除,并且三个备份文件属于一桶组。删除的结果是,key51和key53这两个键被孤立。在一些实施例中,孤立键被标识如下。首先,kv存储设备向备份装置报告其位图510。备份装置首先将零附加到位图的每个位上(这样每个0都变成00,每个1都变成10)。然后,备份装置将要删除的备份文件中的每个键散列到位图中,将10的每个值改变为11,并且将要保留的备份文件中的每个键散列到位图中,将11或10的每个值改变为01。最后,备份装置例如通过将修改后的位图515(其用值11标识孤立键)发送回kv存储设备来指示kv存储设备删除孤立键。在该实施例中,不管其中备份装置散列备份文件的顺序如何,结果都是相同的,因为例如,如果要保留的备份文件首先被散列,则其将会将10转换为01,这将防止要删除的文件的后续散列把这些值转换为11。
59.图6是示出该过程的流程图。在605,备份装置开始备份精简周期(cycle),并且在610,响应于从备份装置接收到的合适的指令,kv存储设备整理来自局部性转换器的键(键日志)并且按存储桶组更新完美散列函数(perfect hash function,phf)。在615,备份装置从实时备份(即,从未被删除的备份文件)中查键,并且在620,kv存储设备向备份装置返回桶组号和桶组的位图。在625,备份装置按桶组标记要保留在装置的位图中的一个或多个键,并且在630,其按桶组返回备份装置的位图。在635,kv存储设备然后将要删除的键添加到黑名单数组,并且在640,它们按桶组更新完美散列函数,并且根据需要执行设备垃圾收集。
60.图7是主机705和存储设备710(其可以是kv存储设备,例如kv ssd)的框图。存储设备710可以具有适合于持久存储设备的多个形状因子中的任何一个形状因子,包括但不限于2.5”、1.8”、mo-297、mo-300、m.2以及企业和数据中心ssd形状因子(enterprise and data center ssd form factor,edsff),并且其可以具有电接口,通过该接口其可以连接到主机705,该接口是适合于持久存储设备的多个接口中的任何一个,包括外围组件互连(peripheral component interconnect,pci)、pci express(pcie)、以太网、小型计算机系
统接口(small computer system interface,scsi)、串行at附件(serial at attachment,sata)和串行附接scsi(serial attached scsi,sas)。主机705和存储设备710中的每一个都可以包括处理电路715(下面将进一步详细讨论)。存储设备710还可以包括持久存储介质720(例如,nand闪存)。存储设备710的处理电路715可以执行(并且,使用其包含的处理电路715,存储设备710可以执行)本文描述的方法中的一些或所有方法。图8和图9是示出在一些实施例中,存储设备710可以在805或905接收指令(例如,其可以从主机705接收指令),并且其可以在910将指令记录在指令日志中(或者,在810,将指令记录在局部性转换器中)。
61.如本文所使用的,某事物“的一部分”指该事物的“至少一部分”,因此可以指少于该事物的全部或该事物全部。因此,事物的“一部分”包括作为特例的整个事物,即,整个事物是该事物的一部分的示例。如本文所使用的,当第二量在第一量x的“y内”时,意味着第二量至少是x-y,并且第二量至多是x+y。如本文所使用的,当第二数量在第一数量的“y%内”时,意味着第二数量至少是第一数量的(1-y/100)倍,并且第二数量至多是第一数量的(1+y/100)倍。如本文所使用的,术语“或”应当解释为“和/或”,使得例如,“a或b”是指“a”或“b”或“a和b”中的任何一个。如本文所使用的,术语“数组”是指有序的数集,而不管是如何存储的(例如,是存储在连续的存储器位置中,还是存储在链表中)。
62.本公开的背景技术部分中提供的背景技术仅用于提供上下文,背景技术部分的内容不被视为现有技术。描述的任何组件或组件的任何组合(例如,在本文包括的任何系统图中)可以用于执行本文包括的任何流程图的一个或多个操作。此外,(i)这些操作是示例操作,并且可以包括未明确涵盖的各种附加步骤,以及(ii)这些操作的时间顺序可以变化。
63.本文使用的术语“处理电路”和“用于处理的部件”均指用于处理数据或数字信号的硬件、固件和软件的任何组合。处理电路硬件可以包括例如专用集成电路(asic)、通用或专用中央处理单元(cpu)、数字信号处理器(dsp)、图形处理单元(gpu)以及诸如现场可编程门阵列(fpga)的可编程逻辑器件。如本文所使用的,在处理电路中,每个功能或者由被配置(即硬连线)为执行该功能的硬件来执行、或者由被配置为执行存储在非暂时性存储介质中的指令的更通用的硬件(诸如cpu)来执行。处理电路可以制造在单个印刷电路板(pcb)上或者分布在若干个互连的pcb上。处理电路可以包含其他处理电路;例如,处理电路可以包括在pcb上互连的两个处理电路,fpga和cpu。
64.如本文所使用的,当方法(例如,调整)或第一量(例如,第一变量)被称为“基于”第二量(例如,第二变量)时,这意味着第二量是方法的输入或影响第一量,例如,第二量可以是计算第一量的函数的输入(例如,唯一输入或若干个输入之一)、或第一量可以等于第二量、或者第一量可以与第二量相同(例如,存储器中与第二量存储在相同的一个或多个地方处)。
65.应当理解,尽管术语“第一”、“第二”、“第三”等在本文中可以用来描述各种元件、组件、区域、层和/或区段,但是这些元件、组件、区域、层和/或区段不应该受到这些术语的限制。这些术语仅用于区分一个元件、组件、区域、层或区段与另一元件、组件、区域、层或区段。因此,在不脱离本发明构思的精神和范围的情况下,本文讨论的第一元件、组件、区域、层或区段可以被称为第二元件、组件、区域、层或区段。
66.本文使用的术语仅用于描述特定实施例,而无意限制本发明构思。如本文所使用的,术语“基本上”、“大约”和类似术语用作近似术语,而不是程度术语,并且旨在考虑本领
域普通技术人员将会认识到的测量值或计算值的固有偏差。
67.如本文所使用的,单数形式“一”和“一个”也旨在包括复数形式,除非上下文另有明确说明。还将理解,术语“包括”和/或“包含”在本说明书中使用时,指定所陈述的特征、整数、步骤、操作、元件和/或组件的存在,但不排除一个或多个其他特征、整数、步骤、操作、元件、组件和/或其组的存在或添加。如本文所使用的,术语“和/或”包括一个或多个相关列出项目的任何和所有组合。当在元素列表之后时,诸如“中的至少一个”的表述修饰整个元素列表,而不修饰列表的单个元素。此外,当描述本发明构思的实施例时,使用“可以”是指“本公开的一个或多个实施例”。此外,术语“示例性”旨在指代示例或说明。如本文所使用的,术语“使用”、“用”和“用于”可以被认为分别与术语“利用”、“采用”和“用在”同义。
68.应当理解,当元件或层被称为“位于”、“连接到”、“耦合到”或“邻近”另一元件或层时,其可以直接位于、连接到、耦合到或邻近另一元件或层或者可以存在一个或多个中间元件或层。相反,当一个元件或层被称为“直接位于”、“直接连接到”、“直接耦合到”或“紧邻”另一元件或层时,不存在中间元件或层。
69.本文所述的任何数值范围旨在包括所述范围内包含的相同数值精度的所有子范围。例如,“1.0至10.0”或“1.0至10.0之间”的范围旨在包括所述最小值1.0和所述最大值10.0之间的所有子范围,即,最小值等于或大于1.0,且最大值等于或小于10.0,例如2.4至7.6。类似地,描述为“在10的35%以内”的范围旨在包括所述最小值6.5(即(1-35/100)乘以10)和所述最大值13.5(即(1+35/100)乘以10)之间的所有子范围,即最小值等于或大于6.5,且最大值等于或小于13.5,例如7.4至10.6。本文中列举的任何最大数值限制旨在包括其中包含的所有更低数值限制,并且本说明书中列举的任何最小数值限制旨在包括其中包含的所有更高数值限制。
70.尽管本文已经具体描述和示出了具有完美散列的键值存储设备的示例性实施例,但多种修改和变化对本领域技术人员而言是清楚的。因此,应当理解,根据本公开的原理构建的具有完美散列的键值存储设备可以以除本文具体描述之外的方式来实施。也在所附权利要求及其等同物中限定了本发明。

技术特征:


1.一种持久键值存储设备的方法,包括:由包括用于将键映射到值地址的散列的持久键值存储设备接收第一指令,所述第一指令是用于访问第一键值集合中的第一键的指令;以及在持久键值存储设备的指令日志中记录第一指令。2.根据权利要求1所述的方法,其中,所述散列是被配置为避免冲突的散列函数。3.根据权利要求1所述的方法,其中,在指令日志中记录第一指令包括在指令日志中的第一位置处记录第一指令,所述方法还包括:接收第二指令,所述第二指令是用于访问第一键值集合中的第二值的指令;以及在指令日志中的第二位置处与指向第一位置的指针一起记录第二指令。4.根据权利要求3所述的方法,其中,在指令日志中记录第一指令包括在尾指针表中存储指向与第一键值集合相对应的地方中的第一位置的指针。5.根据权利要求4所述的方法,其中,在指令日志中的第二位置处记录第二指令包括在尾指针表中存储指向与第一键值集合相对应的地方中的第二位置的指针。6.根据权利要求1所述的方法,其中,所述第一指令是删除指令,并且所述方法还包括将第一键添加到黑名单中。7.根据权利要求6所述的方法,还包括:由持久键值存储设备接收第三指令,所述第三指令是用于访问第一键的指令;确定第一键在黑名单中;以及报告第一键的不存在。8.根据权利要求1所述的方法,其中,在指令日志中记录第一指令还包括将第一键添加到布隆过滤器。9.根据权利要求8所述的方法,还包括:由持久键值存储设备接收第三指令,所述第三指令是用于访问第一键的指令;确定第一键存在于指令日志中;以及响应于确定第一键存在于指令日志中,访问与第一键相关联的值,所述值位于第一地址,所述第一地址与第一键一起存储在指令日志中。10.根据权利要求9所述的方法,其中,确定第一键存在于指令日志中包括:基于布隆过滤器确定第一键存在于指令日志中。11.一种持久键值存储设备,包括:处理电路;以及持久存储介质,所述存储设备包括用于将键映射到值地址的散列,所述散列包括指令日志,所述处理电路被配置为:接收第一指令,所述第一指令是用于访问第一键值集合中的第一键的指令;以及在指令日志中记录第一指令。12.根据权利要求11所述的持久键值存储设备,其中,所述散列是被配置为避免冲突的散列函数。13.根据权利要求11所述的持久键值存储设备,其中:
在指令日志中记录第一指令包括在指令日志中的第一位置处记录第一指令,并且所述处理电路还被配置为:接收第二指令,所述第二指令是用于访问第一键值集合中的第二值的指令;以及在指令日志中的第二位置处与指向第一位置的指针一起记录第二指令。14.根据权利要求13所述的持久键值存储设备,其中,在指令日志中记录第一指令包括在尾指针表中存储指向与第一键值集合相对应的地方中的第一位置的指针。15.根据权利要求14所述的持久键值存储设备,其中,在指令日志中的第二位置处记录第二指令包括在尾指针表中存储指向与第一键值集合相对应的地方中的第二位置的指针。16.根据权利要求11所述的持久键值存储设备,其中,所述第一指令是删除指令,并且所述处理电路还被配置为将第一键添加到黑名单。17.根据权利要求16所述的持久键值存储设备,其中,所述处理电路还被配置为:接收第三指令,所述第三指令是用于访问第一键的指令;确定第一键在黑名单中;以及报告第一键的不存在。18.根据权利要求11所述的持久键值存储设备,其中,在指令日志中记录第一指令还包括将第一键添加到布隆过滤器。19.根据权利要求18所述的持久键值存储设备,其中,所述处理电路还被配置为:接收第三指令,所述第三指令是用于访问第一键的指令;确定第一键存在于指令日志中;以及响应于确定第一键存在于指令日志中,访问与第一键相关联的值,所述值位于第一地址,所述第一地址与第一键一起存储在指令日志中。20.一种持久键值存储设备,包括:用于处理的部件;以及持久存储介质,所述存储设备包括用于将键映射到值地址的散列,所述散列包括指令日志,所述用于处理的部件被配置为:接收第一指令,所述第一指令是用于访问第一键值集合中的第一键的指令;以及在指令日志中记录第一指令。

技术总结


一种用于存储数据的系统和方法。在一些实施例中,该方法包括:由包括用于将键映射到值地址的散列的持久键值存储设备接收第一指令,该第一指令是用于访问第一键值集合中的第一键的指令;以及在持久键值存储设备的指令日志中记录第一指令。中记录第一指令。中记录第一指令。


技术研发人员:

K.S.帕特瓦尔丹 N.拉玛克里希南

受保护的技术使用者:

三星电子株式会社

技术研发日:

2022.08.16

技术公布日:

2023/2/20

本文发布于:2024-09-24 20:27:26,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/54660.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:指令   存储设备   一键   局部性
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议