具有节点缓冲器的键-值索引的制作方法

文档序号:28262721发布日期:2021-12-31 16:48阅读:107来源:国知局
具有节点缓冲器的键-值索引的制作方法
具有节点缓冲器的键

值索引


背景技术:

1.可以应用数据缩减技术来缩减存储在存储系统中的数据量。示例数据缩减技术包括重复数据删除。重复数据删除标识重复的数据单元,并且力图缩减或消除存储在存储系统中的重复数据单元的实例的数量
附图说明
2.关于以下附图描述了一些实施方式。
3.图1a至图1b是根据一些实施方式的示例系统的示意图。
4.图2是根据一些实施方式的示例键

值索引的图示。
5.图3a至图3b是根据一些实施方式的键

值索引的示例节点的图示。
6.图4是根据一些实施方式的示例过程的图示。
7.图5是根据一些实施方式的示例过程的图示。
8.图6是根据一些实施方式的示例过程的图示。
9.图7是根据一些实施方式的示例过程的图示。
10.图8是根据一些实施方式的示例过程的图示。
11.图9是根据一些实施方式的示例过程的图示。
12.图10是根据一些实施方式的示例过程的图示。
13.图11是根据一些实施方式的存储指令的示例机器可读介质的图。
14.图12是根据一些实施方式的示例计算设备的示意图。
15.图13是根据一些实施方式的示例过程的图示。
16.图14是根据一些实施方式的存储指令的示例机器可读介质的图。
17.图15是根据一些实施方式的示例计算设备的示意图。
18.在所有附图中,相同的附图标记指代类似但不一定相同的元件。附图不一定成比例,并且可以放大一些零件的尺寸以更清楚地图示所示出的示例。此外,附图提供了与描述一致的示例和/或实施方式;然而,描述不限于附图中提供的示例和/或实施方式。
具体实施方式
19.在本公开内容中,除非上下文另外明确指示,否则使用术语“一个/一种(a/an)”或“所述(the)”旨在同样包括复数形式。同样地,当在本公开内容中使用时,术语“包括(includes/including/comprises/comprising)”、“具有(have/having)”指明存在所述元件,但不排除存在或添加其他元件。
20.在一些示例中,存储系统使用索引来指示键与值之间的关系或映射(本文中也称为“键

值对”)。键

值索引的一种示例使用是基于传入数据单元的“指纹(fringerprint)”执行重复数据删除的存储系统,其中每个指纹标识特定的数据单元。将传入数据单元的指纹与指纹索引进行比较,指纹索引可以是键

值索引,其中指纹是键并且对应的数据位置是值。指纹与存储在指纹索引中的指纹之间的匹配指示传入数据单元可能是已经存储在存储
系统中的数据单元的副本。如果传入数据单元是已经存储的数据单元的副本,则可以递增存储在存储系统中的参考计数以指示已接收到的数据单元的实例的数量,而不是存储重复的传入数据单元。
[0021]“指纹”是指通过对数据单元的内容应用函数而得到的值(其中“内容”可以包括数据单元的内容的全部或子集)。可以应用的函数的示例包括基于传入数据单元产生散列值的散列函数。散列函数的示例包括密码散列函数,比如安全散列算法2(sha

2)散列函数,例如sha

224、sha

256、sha

384等。在其他示例中,可以采用其他类型的散列函数或其他类型的指纹函数。
[0022]“存储系统”可以包括存储设备或存储设备阵列。存储系统还可以包括管理对(多个)存储设备的访问的(多个)存储控制器。“数据单元”可以指可以在存储系统中单独标识的任何数据部分。在一些情况下,数据单元可以指组块(chunk)、组块的集合、或任何其他数据部分。在一些示例中,存储系统可以将数据单元存储在持久性存储装置中。可以使用一种或多种(多个)持久性(例如,非易失性)存储设备(比如(多个)基于磁盘的存储设备(例如,(多个)硬盘驱动器(hdd))、(多个)固态设备(ssd)(比如(多个)闪速存储设备)等或者其组合)来实施持久性存储装置。
[0023]“控制器”可以指硬件处理电路,其可以包括微处理器、多核微处理器的核、微控制器、可编程集成电路、可编程门阵列、数字信号处理器或其他硬件处理电路中的任一项或某种组合。可替代地,“控制器”可以指硬件处理电路与可在硬件处理电路上执行的机器可读指令(软件和/或固件)的组合。
[0024]
在一些示例中,键

值索引可以是包括以分层方式布置的节点的b树索引的形式。b树索引的叶节点包括将键映射到值的条目。例如,在重复删除系统中,b树索引的叶节点将指纹映射到存储位置指示符(例如,顺序块号)。b树索引的内部节点可以用于基于键找到b树索引的匹配条目。然而,使用b树索引可能与各种问题相关联。例如,更新b树索引以包括新的键

值对可以涉及将b树索引的整个叶节点从持久性存储装置加载到存储器中,处理叶节点以插入新的键

值对,并且将整个叶节点重写到持久性存储装置。此外,这种更新还可能涉及对多个内部节点的类似加载、处理和重写,以反映新的键

值对的位置。这样,每次索引更新可能会消耗大量的存储器、cpu和与持久性存储装置的输入/输出操作相关联的磁盘带宽开销。与索引更新相关联的开销量在本文中可以称为“写入放大(write amplification)”。
[0025]
根据本公开内容的一些实施方式,并非将键

值索引存储在b树中,而是可以将键

值索引存储为其中每个内部节点(本文中称为“间接”节点)可以包括缓冲器(也称为“节点缓冲器”)来存储键

值对的树结构。间接节点的缓冲器继续存储键

值对,直到达到缓冲器的阈值水平,这可以使所有存储的键

值对被批量转移到子节点(即,在单次转移操作中)。在一些示例中,键

值对从源节点到子节点(例如,其他间接节点或叶节点)的批量转移可以缩减存储器与持久性存储装置之间的转移和更新操作的数量,并且因此可以缩减与键

值索引相关联的写入放大。
[0026]
然而,从键

值索引读取键

值对数据可能涉及将每个节点的缓冲器加载到存储器中并且在加载到存储器中的缓冲器中搜索键。这样,读取每个键

值对的数据也可能消耗大量的存储器和带宽(本文中称为“读取放大”)。根据本公开内容的一些实施方式,键

值索引
的每个节点可以包括布隆(bloom)过滤器和围栏(fence)指针。在一些示例中,如果节点的布隆过滤器指示特定键存储在缓冲器中,则在所述节点的缓冲器中搜索所述特定键。以这种方式,布隆过滤器可以用于避免将缓冲器加载到存储器中,并且因此可以缩减与读取键

值对相关联的读取放大。
[0027]
根据本公开内容的一些实施方式,可以将节点的缓冲器分成段或“缓冲器组块”。此外,在一些示例中,节点的每个围栏指针可以指示包括在对应的缓冲器组块中的键

值的下限。在其他示例中,围栏指针可以指示包括在对应的缓冲器组块中的键

值的上限。当布隆过滤器指示键

值对存储在缓冲器中时,围栏指针可以用于标识可能存储键

值对的特定缓冲器组块。并非将整个缓冲器加载到存储器中,而是仅将所标识的缓冲器组块加载到存储器中。以这种方式,使用围栏指针可以缩减读取放大。
[0028]
根据本公开内容的一些实施方式,可以根据索引中的对应层级来确定索引的节点缓冲器的大小。在一些示例中,将给定层级中的总缓冲器大小与下一较低层级(即,更靠近叶节点的一个层级)处的总缓冲器大小的比率设置为预定义的值。此比率的值可以由用户设置,以调节与索引相关联的写入放大的水平。
[0029]
根据本公开内容的一些实施方式,索引的各个层级处的布隆过滤器的大小可以被确定成使得与较低层级(即,更靠近叶节点)处的节点中的布隆过滤器相比,较高层级(即,更靠近根节点)处的节点中的布隆过滤器与相对更低的误报率相关联。以这种方式,可以优化与布隆过滤器相关联的存储器使用。
[0030]
根据本公开内容的一些实施方式,每个间接节点的紧缩(compaction)可以作为后台过程运行,同时即使在因缓冲器水平(即,存储在缓冲器中的数据量)达到缓冲器的阈值水平而触发紧缩之后也允许将附加条目添加到缓冲器。在缓冲器水平上升到阈值以上时,后台过程的优先级可以多次提高。以这种方式,对索引的更新可以继续,而不会中断节点的使用。
[0031]
根据本公开内容的一些实施方式,响应于检测到多个顺序键

值对到索引中的加载,可以在顺序加载(sequential load)的处理期间将索引的操作临时改变为表现为b树。这种临时改变可以在顺序加载期间提供更高效的操作。
[0032]
1.包括具有节点缓冲器的键

值索引的存储系统
[0033]
图1a示出了根据一些实施方式的包括存储控制器110和持久性存储装置140的存储系统100的示例。如所示,存储控制器110可以包括更新引擎120、合并引擎150、存储器130和查询引擎160。在一些示例中,存储器130可以包括更新缓冲器135,并且持久性存储装置140可以包括键

值索引145。在一些实施方式中,键

值索引145可以包括被组织为节点树的键

值数据。下面参考图2描述键

值索引145的示例实施方式。在一些示例中,持久性存储装置140可以包括一个或多个非暂态存储介质,比如硬盘驱动器(hdd)、固态驱动器(ssd)、光盘等或者其组合。存储器130可以包括半导体存储器设备,比如动态随机存取存储器或静态随机存取存储器(dram或sram)、非易失性双列直插式存储器模块(nvdimm)等。
[0034]
在一些实施方式中,更新引擎120可以接收对持久性存储装置140中的键

值索引145的更新105。例如,每个更新105可以是要添加到键

值索引145的键

值对。在一些示例中,更新引擎120可以将更新105的全部或一部分存储在存储器130中所存储的更新缓冲器135中。此外,合并引擎150可以用存储在更新缓冲器135中的键

值对来更新键

值索引145。
注意,尽管图1中仅示出了一个更新缓冲器135,但是在其他示例中,存储控制器110可以包括多个更新缓冲器135。在一些示例中,可以以一个或多个易失性存储设备来实施存储器130。
[0035]
在一些实施方式中,查询引擎160可以接收指定给定键的查询165,并且可以访问键

值索引145(以及在一些示例中,更新缓冲器135)或与之交互,以确定与查询165中指定的键匹配的值。此外,查询引擎160可以响应于查询165而返回匹配值。在一些示例中,查询165可以是用户创建的查询(例如,sql查询、对数据元素的读取请求等)。
[0036]
如这里所使用的,“引擎”可以指硬件处理电路,其可以包括微处理器、多核微处理器的核、微控制器、可编程集成电路、可编程门阵列、数字信号处理器或其他硬件处理电路中的任一项或某种组合。可替代地,“引擎”可以指硬件处理电路与可在硬件处理电路上执行的机器可读指令(存储在至少一个机器可读存储介质上的软件指令和/或固件指令)的组合。
[0037]
现在参考图1b,其示出了用于重复数据删除的示例存储系统102。存储系统102中与存储系统100(图1a所示)具有相同附图标记的元件指代类似但不一定相同的元件。如所示,在存储系统102中,存储控制器117可以包括重复删除引擎127,并且持久性存储装置140可以包括指纹索引147。指纹索引147可以大体上对应于持久性索引145(图1a所示)的示例实施方式。此外,数据单元107可以是与要将数据写入到存储系统102的写入请求相关联的传入数据单元。在一些示例中,数据单元107的指纹索引更新(或等效地,“指纹索引条目”)可以包括数据单元107的指纹和/或对应的存储位置指示符。在这样的示例中,指纹索引147可以存储多个指纹和对应的位置数据。
[0038]
在一些实施方式中,重复删除引擎127可以基于数据单元107生成指纹。在一些示例中,由重复删除引擎127产生的指纹可以包括基于数据单元107的完整或部分散列值。在其他示例中,重复删除引擎127可以生成另一种类型的指纹。
[0039]
在一些实施方式中,重复删除引擎127可以基于指纹索引147来确定存储系统102是否实际上包含传入数据单元107的副本。更具体地,重复删除引擎127可以将为数据单元107生成的指纹与指纹索引147中存储的指纹进行比较。如果生成的指纹与存储的指纹匹配,则重复删除引擎127可以确定存储系统102已经存储了传入数据单元107的副本。因此,重复删除引擎127可以决定不存储传入数据单元107,而是可以更新共享匹配指纹的数据单元的数量的计数。另一方面,如果为传入数据单元107计算的指纹与指纹索引147中的任何指纹不匹配,则重复删除引擎127可以确定存储系统100未存储数据单元107的副本,并且作为响应,可以在存储系统102中新存储数据单元107。
[0040]
2.使用节点缓冲器的示例键

值索引
[0041]
图2示出了根据一些实施方式的示例键

值索引200的图示。在一些示例中,键

值索引200可以大体上对应于键

值索引145(图1a所示)和/或指纹索引147(图1b所示)的示例实施方式。此外,在一些示例中,键

值索引200可以由存储控制器110(图1a所示)和/或存储控制器117(图1b所示)生成。在一些示例中,键

值索引200可以将数据单元的指纹映射到那些数据单元的位置。在其他示例中,键

值索引200可以是将卷或偏移映射到代标识符(例如,卷快照的版本号)与存储位置标识符(例如,顺序块号)的组合的块索引。在又一些示例中,键

值索引200可以是将不同类型的块映射到其磁盘位置(例如,将存储位置标识符映射
到块的磁盘位置,将代标识符与偏移的组合映射到磁盘位置等)以及其他信息(例如,完整的指纹、块的压缩大小等)的磁盘索引。在再一示例中,键

值索引200可以是将代标识符与用户定义值的组合映射到块的块位置与压缩大小的组合的缓存索引。上述内容的其他组合或其变化也是可能的。
[0042]
如图2所示,键

值索引200可以被布置成包括多个节点的树结构。节点可以被组织成形成父子关系的各种层级。例如,第一层级210可以包括根节点211,并且第二层级220可以包括作为根节点211的子代的间接节点221到224。此外,第三层级230可以包括作为间接节点222(在第二层级220中)的子代的间接节点231到234,并且第四层级240可以包括作为间接节点233(在第三层级230中)的子代的叶节点241到244。在一些示例中,与每个父节点相关的子节点的数量可以由与键

值索引200相关联的扇出参数指定。
[0043]
在本文的示例中,键

值索引的每个节点可以是叶节点或间接节点(即,除叶节点以外的任何节点,包括根节点)。在一些实施方式中,键

值索引200的每个间接节点(例如,根节点211、间接节点221到224、间接节点231到234)可以包括存储键

值数据的缓冲器(本文中也称为“节点缓冲器”,并且在图2中未示出)。在一些示例中,键

值索引200的每个叶节点可以存储键

值数据。下面参考图3a描述包括节点缓冲器的间接节点的示例实施方式。
[0044]
在一些实施方式中,键

值索引200的节点可以从树结构的顶部到底部以逐步的方式生成。例如,在初始化键

值索引200时(例如,在首次使用时),键

值索引200可以仅包括根节点211。在此示例中,添加到键

值索引200的键

值对可以存储在根节点211的节点缓冲器中。
[0045]
在一些实施方式中,当存储在根节点211的节点缓冲器中的键

值数据达到阈值水平(例如,特定数量的所存储键

值对、总容量的特定百分比等)时,可以触发紧缩过程。如本文中所使用的,“紧缩”可以指将键

值数据从父节点转移到一个或多个子节点。在一些示例中,根节点211第一次被紧缩时,可以生成间接节点221到224(即,根节点211的直接子代)。此外,每当根节点211被紧缩时,存储在根节点211的节点缓冲器中的键

值数据可以被转移到间接节点221到224的节点缓冲器。如本文中所使用的,“转移”数据是指将数据移动到目的地节点,使得数据不再存在于源节点中。在一些示例中,间接节点221到224中的每一个可以与根节点211的节点缓冲器中的键范围的不同部分相关联。因此,在这样的示例中,根节点211的每个键

值对可以根据与每个子节点相关联的范围被分配给子节点221到224中的不同子节点。一旦根节点211的紧缩完成,根节点211的节点缓冲器便是空的,并且此后,在根节点211处接收到的任何新的键

值更新将被存储在根节点211的节点缓冲器中。
[0046]
在一些实施方式中,可以对每个间接节点类似地重复上述紧缩过程。例如,间接节点222第一次被紧缩时(即,当间接节点222的节点缓冲器达到阈值时),可以生成间接节点231到234(即,间接节点222的直接子代),并且存储在间接节点222的节点缓冲器中的键

值数据可以被转移到间接节点231到234的节点缓冲器。在另一个示例中,间接节点233第一次被紧缩时,可以生成叶节点241到244(即,间接节点233的直接子代),并且存储在间接节点233的节点缓冲器中的键

值数据可以被转移到叶节点241到244。
[0047]
在一些实施方式中,键

值索引200可以将每个键和对应的值存储为两个单独的存储元素。然而,实施方式在这方面不受限制。例如,在一些实施方式中,键可以由节点或存储元件内的对应值的偏移或位置来隐含或指示。在这样的实施方式中,“键

值对”可以指与隐
式键相关联的存储值。
[0048]
注意,尽管为了清楚起见未在图2中示出,但是其他间接节点可以在键

值索引200的各种层级中具有子节点。例如,随着时间推移,在整个键

值索引200中,间接节点221可以在第三层级230中具有多个子节点,间接节点234可以在第四层级240中具有多个子节点等。
[0049]
3.键

值索引的示例节点
[0050]
图3a示出了根据一些实施方式的示例间接节点300的图示。间接节点300可以大体上对应于图2所示的任何间接节点(例如,根节点211、间接节点221到224和/或间接节点231到234)的示例实施方式。如图3a所示,间接节点300可以包括子指针310、围栏指针320、布隆过滤器330和/或节点缓冲器340中的一些或全部。
[0051]
在一些实施方式中,节点缓冲器340可以包括多个缓冲器组块345a到345n(本文中也称为“缓冲器组块345”)来存储键

值数据(例如,数据单元的指纹和那个数据单元107的对应存储位置指示符)。缓冲器组块345a到345n可以根据键有序地(例如,以数值次序、以字母次序等)布置。例如,缓冲器组块345a可以存储最低键范围的键

值数据,而缓冲器组块345n可以存储最高键范围的键

值数据。在一些示例中,每个缓冲器组块345可以具有相等或类似大小(例如,32kb、64kb等)。在一些实施方式中,可以基于层级比率来确定节点缓冲器340的大小。在一些示例中,层级比率可以是键

值索引的两个相邻层级中的总缓冲器大小之间的固定比率。此外,可以基于用户指定的(多个)参数来确定层级比率,以调节与键

值索引相关联的写入放大的水平。
[0052]
在一些实施方式中,子指针310可以指向或以其他方式标识作为间接节点300的直接子代的任何节点。例如,参考键

值索引200(图2所示),根节点211可以包括相应的子指针310,该子指针指向间接节点221到224(即,根节点211的直接子代)中的每一个。在一些示例中,可以在间接节点300第一次被紧缩时(例如,当节点缓冲器340达到预定义阈值水平时)生成子指针310。
[0053]
在一些实施方式中,布隆过滤器330可以允许确定哪些键未包括在节点缓冲器340中以及哪些键可能包括在节点缓冲器340中(即,有误肯定的可能性)。换句话说,布隆过滤器330指示未包括在节点缓冲器340中的键,并且指示可能包括在节点缓冲器340中的键,这时有可能为至少一些键提供误肯定指示(即,在键未包括在节点缓冲器340中时,指示所述键包括在所述节点缓冲器中)。因此,如果布隆过滤器330指示特定键未包括在节点缓冲器340中,则可以避免与将这个节点缓冲器340加载到存储器中并搜索这个特定键相关联的处理时间和/或带宽,因为布隆过滤器330的使用可以准确地指示键何时未包括在节点缓冲器340中。相比之下,如果布隆过滤器330指示特定键包括在节点缓冲器340中,则可以在节点缓冲器340中搜索这个特定键。在一些实施方式中,布隆过滤器330的大小可以被确定成使得较高层级处的节点中的布隆过滤器330相对大于较低层级处的节点中的布隆过滤器。
[0054]
在一些实施方式中,当在节点缓冲器340中搜索特定键时,围栏指针320可以用于标识可能存储与所述特定键相关联的数据的特定缓冲器组块345。在一些示例中,围栏指针320可以标识每个缓冲器组块345的最低和/或最高键值。例如,每个围栏指针320可以标识包括在对应的缓冲器组块345中的键值的下限。因此,围栏指针320可用于标识哪个缓冲器组块345包括被搜索的键落入的键范围。因此,并非将整个节点缓冲器340加载到存储器中,而是仅需要将所标识的缓冲器组块345加载到存储器中。以这种方式,围栏指针320可以缩
减与间接节点300相关联的读取放大。
[0055]
在一些实施方式中,缓冲器组块345可以存储在一起或者存储在单独的数据块中。此外,缓冲器组块345可以与间接节点300的剩余元素(即,子指针310、围栏指针320和/或布隆过滤器330)分开存储。在一些示例中,可以在将任何缓冲器组块345加载到存储器中之前先将子指针310、围栏指针320和布隆过滤器330加载到存储器中。此外,如果布隆过滤器330指示被搜索的键包括在节点缓冲器340中,则可以使用围栏指针320标识单个缓冲器组块345,然后仅将这个所标识的缓冲器组块345加载到存储器中。
[0056]
图3b示出了根据一些实施方式的示例叶节点350的图示。叶节点350可以大体上对应于图2所示的任何叶节点(例如,叶节点241到244)的示例实施方式。如图3b所示,叶节点350可以包括键

值数据360。
[0057]
4.键

值索引中的紧缩过程
[0058]
图4示出了根据一些实施方式的示例过程400。在一些示例中,可以使用存储控制器110(图1a所示)或存储控制器117(图1b所示)中的一些或全部来执行过程400。可以在硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)中实施过程400。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。为了说明起见,下面可能参考示出了根据一些实施方式的示例的图1a至图3b描述过程400的细节。然而,其他实施方式也是可能的。
[0059]
框410可以包括接收要将键

值对添加到索引的写入请求。例如,参考图1a,更新引擎120可以将更新105存储在更新缓冲器135中,并且合并引擎150可以用存储在更新缓冲器135中的键

值对数据来更新键

值索引145。在一些示例中,键

值索引145可以被布置成包括多个节点的树结构。此外,在一些示例中,键

值索引145可以将数据单元的指纹映射到那些数据单元的位置。
[0060]
框420可以包括将键

值对存储在索引的间接节点的节点缓冲器中。假设在图4的示例中,间接节点比任何叶节点高多于一个层级。换句话说,在图4的示例中,存储键

值对(在框420处)的间接节点的任何子节点也是间接节点。例如,参考图1a至图3a,存储控制器110和/或合并引擎150可以将所接收的键

值对存储在根节点211的节点缓冲器340中。在一些示例中,可以配置根节点211的布隆过滤器330(例如,通过设置位值)来指示所接收的键

值对存储在根节点211的节点缓冲器340中。
[0061]
菱形框430可以包括确定间接节点的节点缓冲器是否超过预定义阈值。如果确定节点缓冲器未超过阈值,则过程400可以返回到框410(即,以接收另一个键

值对)。例如,参考图1a至图3a,存储控制器110可以确定根节点211的节点缓冲器340是否超过预定义填充水平(例如,90%满、100%满、给定数量的键

值对等)。
[0062]
然而,如果在菱形框430处确定节点缓冲器超过阈值,则过程400可以在菱形框440处继续,所述框可以包括确定间接节点是否具有任何现有的子间接节点。例如,参考图1a至图3a,存储控制器110可以确定根节点211的节点缓冲器340已被填充到预定义水平,并且作为响应,可以确定根节点211是否具有任何直接子节点(即,比根节点211低一个层级的任何子节点)。注意,如图2所示,根节点211的直接子节点是间接节点,而不是叶节点。
[0063]
如果在菱形框440处确定间接节点不具有任何现有的子间接节点,则过程400可以
在框450处继续,所述框可以包括基于层级比率来确定子间接节点的缓冲器大小。框460可以包括确定子间接节点的布隆过滤器大小。例如,参考图1a至图3a,存储控制器110可以确定根节点211不具有任何子节点,并且作为响应,可以使用层级比率来确定根节点211的子节点的缓冲器大小。在一些示例中,层级比率可以是键

值索引200的两个相邻层级中的总缓冲器大小之间的经计算的比率。因此,在这样的示例中,间接节点221到224的总缓冲器大小可以不同于根节点211的节点缓冲器的大小。此外,间接节点221到224中的每一个的节点缓冲器可以不同于(例如,小于或大于)根节点211的节点缓冲器。此外,存储控制器110可以确定根节点211的子节点的布隆过滤器大小。在一些示例中,可以基于与键

值索引200的不同层级相关联的误报率来确定布隆过滤器大小。
[0064]
框470可以包括使用所确定的缓冲器大小和布隆过滤器大小来初始化一组子节点。例如,参考图1a至图3a,存储控制器110可以将间接节点221到224初始化为根节点211的直接子代。此外,子节点221到224中的每一个可以包括具有特定缓冲器大小(在框450处确定)的节点缓冲器340和具有特定布隆过滤器大小(在框460处确定)的布隆过滤器330。
[0065]
在框470之后,或者如果在菱形框440处确定间接节点具有现有的子节点,则过程400可以在框480处继续,所述框可以包括将所有键

值对从间接节点的节点缓冲器转移到子节点(在框470处初始化)的节点缓冲器。例如,参考图1a至图3a,存储控制器110可以将所有键

值对从根节点211的节点缓冲器转移到子节点221到224的节点缓冲器。在一些示例中,基于与子节点221到224相关联的不同键范围,将每个转移的键

值对分配给子节点221到224之一。
[0066]
框490可以包括设置子节点的布隆过滤器以指示所转移的键

值对。例如,参考图1a至图3a,存储控制器110可以设置子节点221的布隆过滤器330以指示从根节点211转移到子节点221的键

值对。存储控制器110可以类似地设置剩余子节点222到224的布隆过滤器330。在框490之后,过程400可以返回到框410(即,以继续接收要将键

值对添加到索引的写入请求)。注意,可以针对键

值索引200的不同间接节点(例如,针对间接节点221到224、231到234中的每一个)类似地重复过程400,并且也可以在同一间接节点处重复所述过程(例如,以进行多次紧缩)。
[0067]
在一些示例中,过程400可以允许生成具有可变大小的节点缓冲器和布隆过滤器的子间接节点。以这种方式,过程400可以允许调节与索引的使用相关联的写入放大以及优化与布隆过滤器相关联的存储器使用。注意,如上所述,在框410中存储键

值对的间接节点比任何叶节点高多于一个层级。换句话说,在具有作为叶节点的直接子代的间接节点的情况下,不针对子叶节点执行框450到490的动作(例如,确定节点缓冲器大小、确定布隆过滤器、初始化节点缓冲器和布隆过滤器等)。
[0068]
5.使用布隆过滤器的读取过程
[0069]
图5示出了根据一些实施方式的示例过程500。在一些示例中,可以使用存储控制器110(图1a所示)或存储控制器117(图1b所示)中的一些或全部来执行过程500。可以在硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)中实施过程500。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。为了说明起见,下面可能参考示出了根据一些实施方式的示例的图1a至图3b描
述过程500的细节。然而,其他实施方式也是可能的。
[0070]
框510可以包括接收对键

值索引的间接节点处的键

值对的读取请求。例如,参考图1a至图2,查询引擎160可以接收指定键的查询165。响应于查询165,查询引擎160可以通过以自上而下的模式分析或读取键

值索引145的节点来搜索所述键。因此,查询引擎160可以在根节点211(即,键

值索引200中的最高层级节点)处开始搜索所述键。
[0071]
菱形框520可以包括确定间接节点的布隆过滤器是否指示键

值对包括在间接节点的节点缓冲器中。例如,参考图1a至图3a,存储控制器110可以确定根节点211的布隆过滤器330是否指示根节点211的节点缓冲器340包括键

值对。
[0072]
如果在菱形框520处确定布隆过滤器指示键

值对未包括在间接节点的节点缓冲器中,则过程500可以在框560(如下所述)处继续。否则,如果在菱形框520处确定布隆过滤器指示键

值对包括在间接节点的节点缓冲器中,则过程500可以在框530处继续,所述框可以包括使用围栏指针来标识间接节点的缓冲器组块(即,节点缓冲器的一部分)。
[0073]
菱形框540可以包括确定键

值对是否包括在所标识的缓冲器组块中。例如,参考图1a至图3a,存储控制器110可以使用根节点211的围栏指针320来标识根节点211的与键

值对相对应的缓冲器组块345(例如,具有包含期望的键的键范围的缓冲器组块)。存储控制器110然后可以将所标识的缓冲器组块345加载到存储器中,并且可以在所标识的缓冲器组块345中搜索键

值对。
[0074]
如果在菱形框550处确定键

值对包括在所标识的缓冲器组块中,则过程500可以在框550处继续,所述框可以包括从所标识的缓冲器组块读取键

值对。例如,参考图1a至图3a,存储控制器110可以从根节点211的节点缓冲器340读取对应于特定键的值。
[0075]
然而,如果在菱形框550处确定键

值对未包括在所标识的缓冲器组块中(即,布隆过滤器在菱形框520处返回“误肯定”指示),则过程500可以在框560处继续,所述框可以包括使用间接节点的子指针来标识子节点(即,作为间接节点的直接子代的节点)。框570可以包括在所标识的子节点中搜索键

值对。例如,参考图1a至图3,响应于确定键未存储在根节点211的节点缓冲器340中(即,在来自根节点211的布隆过滤器330的误肯定结果的情况下),存储控制器110可以使用根节点211的子指针310来标识作为根节点211的直接子代(即,向下一个层级)的间接节点221到224。此外,在此示例中,子指针310可以指示读取请求中指定的键

值对对应于间接节点222的键范围,并且因此存储控制器110可以在间接节点222中搜索键

值对。如果在间接节点222中找到键

值对,则存储控制器110可以读取所述键

值对。在框550或框570之后,过程500可以完成。
[0076]
在一些示例中,过程500可以在每个间接节点中使用布隆过滤器,以避免将节点缓冲器的任何缓冲器组块加载到存储器中。以这种方式,过程500可以缩减与从索引读取键

值对相关联的读取放大。注意,可以针对节点树的不同层级重复和/或循环过程500。例如,如果在框560处标识的子节点是间接节点,则执行框570(即,在子节点中搜索键

值对)可以涉及执行过程500的另一次迭代,包括使用子节点的布隆过滤器来确定键

值对是否包括在子节点中、使用子节点的围栏指针来标识子节点的缓冲器组块等。
[0077]
6.调度的紧缩期间的更新过程
[0078]
图6示出了根据一些实施方式的示例过程600。在一些示例中,可以使用存储控制器110(图1a所示)或存储控制器117(图1b所示)中的一些或全部来执行过程600。可以在硬
件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)中实施过程600。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。为了说明起见,下面可能参考示出了根据一些实施方式的示例的图1a至图3b描述过程600的细节。然而,其他实施方式也是可能的。
[0079]
框610可以包括将键

值对添加到索引的间接节点的节点缓冲器。例如,参考图1a至图3a,存储控制器110可以将键

值对添加到根节点211的节点缓冲器340。
[0080]
框620可以包括响应于确定间接节点的节点缓冲器超过第一阈值而以第一优先级调度间接节点的紧缩以供后台执行。例如,参考图1a至图3a,存储控制器110可以确定根节点211的节点缓冲器340已被填充到第一阈值水平(例如,90%满、特定数量的键

值对、特定的存储器使用量等)。响应于此确定,存储控制器110可以调度根节点211的紧缩。可以以第一优先级(例如,相对低的优先级)来调度调度的紧缩以作为后台过程执行(例如,在没有用户交互的情况下运行,和/或仅在较高优先级任务不需要处理带宽时运行)。
[0081]
框630可以包括在等待紧缩的执行时,继续将键

值对添加到间接节点的节点缓冲器。例如,参考图1a至图3a,存储控制器110可以在等待调度的紧缩的执行时,继续将键

值对添加到根节点211的节点缓冲器340。因此,节点缓冲器340将被填充超出第一阈值水平。
[0082]
框640可以包括响应于确定间接节点的节点缓冲器超过(多个)附加阈值而提高调度的紧缩的优先级。注意,框640可以包括对应于达到多个阈值的多次优先级提高。例如,参考图1a至图3a,在等待调度的紧缩的执行时,存储控制器110可以确定根节点211的节点缓冲器340已被填充到高于第一阈值水平的第二阈值水平,并且作为响应,可以将调度的紧缩的优先级提高到高于第一优先级的第二优先级。随后,存储控制器110可以确定节点缓冲器340已被填充到高于第二阈值水平的第三阈值水平,并且作为响应,可以将调度的紧缩的优先级提高到高于第二优先级的第三优先级。存储控制器110可以基于节点缓冲器340达到对应的阈值水平来执行任何次数的优先级调整。
[0083]
框650可以包括作为后台过程执行间接节点的紧缩。例如,参考图1a至图3a,存储控制器110可以基于紧缩的当前优先级水平(例如,第一优先级水平、第二优先级水平等)而将紧缩作为后台过程执行。在一些示例中,框650可以包括上面参考图4讨论的过程400的一些或全部。在框650之后,过程600可以完成。
[0084]
在一些示例中,过程600可以允许每个间接节点的紧缩作为后台过程运行,同时允许将附加条目加到间接节点的节点缓冲器。以这种方式,对键

值索引的更新可以继续,而不会中断间接节点的使用。
[0085]
7.顺序写入加载过程
[0086]
图7示出了根据一些实施方式的示例过程700。在一些示例中,可以使用存储控制器110(图1a所示)或存储控制器117(图1b所示)中的一些或全部来执行过程700。可以在硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)中实施过程700。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。为了说明起见,下面可能参考示出了根据一些实施方式的示例的图1a至图3b描述过程700的细节。然而,其他实施方式也是可能的。
[0087]
框710可以包括当处于第一操作模式时检测键

值对到索引中的顺序加载,所述索引包括具有节点缓冲器的间接节点。例如,参考图1a至图3a,存储控制器110可以检测键

值对的顺序组到在第一操作模式中使用的键

值索引200的写入。所述顺序组可以包括多个键

值对,其中键形成连续的序列(例如,001、002、0003等)。在一些示例中,键

值索引200的第一操作模式可以大体上对应于上面参考图4讨论的过程400的一些或全部。例如,键

值索引200的第一操作模式可以包括在每个间接节点的节点缓冲器中存储键

值对并且响应于确定节点缓冲器已达到预定义阈值而将所存储的键

值对转移到子节点。
[0088]
框720可以包括响应于检测到顺序加载而将索引改变成第二操作模式,其中所述第二操作模式不使用间接节点中的节点缓冲器。例如,参考图1a至图3a,存储控制器110可以响应于检测到键

值对顺序组的添加,将键

值索引200改变成第二操作模式,所述第二操作模式不使用间接节点300中的节点缓冲器340。在一些示例中,键

值索引200的第二操作模式可以大体上对应于b树索引的操作,在所述b树索引中,键

值映射数据仅存储在叶节点中,并且间接节点仅用于标识为特定键

值对存储映射数据的叶节点。
[0089]
框730可以包括当处于第二操作模式时,将顺序加载添加到索引。例如,参考图1a至图3a,存储控制器110可以在不使用节点缓冲器340的第二操作模式下(例如,根据b树操作)将顺序组添加到键

值索引200,使得顺序组中的每个键

值对仅存储在索引200的叶节点中。在一些示例中,框730可以包括将间接节点的节点缓冲器中与顺序加载匹配或重叠的任何键

值对向下冲刷到(多个)对应的叶节点。在框730之后,过程700可以完成。
[0090]
在一些示例中,过程700可以允许在处置顺序加载期间将索引临时改变成表现为b树索引。因此,过程700可以在键

值对到索引中的顺序加载期间提供改进的效率。
[0091]
8.用于确定层级比率的过程
[0092]
图8示出了根据一些实施方式的示例过程800。在一些示例中,可以使用存储控制器110(图1a所示)或存储控制器117(图1b所示)中的一些或全部来执行过程800。可以在硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)中实施过程800。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。为了说明起见,下面可能参考示出了根据一些实施方式的示例的图1a至图3b描述过程800的细节。然而,其他实施方式也是可能的。
[0093]
框810可以包括确定存储系统中的可用存储器。例如,参考图1a,存储控制器110可以确定可用于更新键

值索引145的存储器130的量。
[0094]
框820可以包括接收对期望的写入放大水平的指示。例如,参考图1a,存储控制器110可以接收用户输入或命令,所述用户输入或命令指示用户关于更新键

值索引145所期望(或可接受)的写入放大水平。
[0095]
框830可以包括基于可用存储器和期望的写入放大水平来确定层级比率。在一些示例中,层级比率可以是键

值索引的两个相邻层级中的总缓冲器大小之间的固定比率。例如,参考图2,假设第一层级210中的根节点211具有10mb的缓冲器大小,并且假设层级比率是5,则第二层级220的节点中的节点缓冲器的总大小是50mb(即,5=50mb/10mb的比率)。此外,第三层级230的节点中的节点缓冲器的总大小是250mb(即,5=250mb/50mb的比率)。在一些示例中,存储控制器110可以使用以下方程式来确定层级比率:
[0096][0097]
在以上方程式中,项waf是写入放大水平,l是索引的层级数量(即,深度),r0是层级0处(即,根节点处)的缓冲器大小与单批用户更新的大小的比率,r
x
(其中x大于0且小于l)是层级x处的节点缓冲器的总大小(即,和)与层级x

1处的节点缓冲器的总大小的比率,并且r
l
是叶节点(最低层级l处)的总大小与层级l

1处的节点缓冲器的总大小的比率。在一些示例中,写入放大因子可以与索引的所有层级的层级比率之和成比例。在框830之后,过程800可以完成。在一些示例中,可以基于可用存储器的量来确定写入放大水平,然后可以使用所述写入放大水平来确定层级比率。此外,在其他示例中,写入放大水平可以作为输入参数被接收(例如,如用户或配置设置所指定的),并且可以用于确定层级比率。在一些示例中,层级比率可以在索引的不同层级中不同。在一些实施方式中,以上方程式可以用于通过调整(多个)层级比率和/或为索引分配的存储器来调节或调整与索引相关联的写入放大水平。此外,可以基于系统配置修改或调整以上方程式(例如,以包括附加的或更少的参数)。其他变化和/或组合也是可能的。
[0098]
9.用于确定布隆过滤器大小的过程
[0099]
图9示出了根据一些实施方式的示例过程900。在一些示例中,可以使用存储控制器110(图1a所示)或存储控制器117(图1b所示)中的一些或全部来执行过程900。可以在硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)中实施过程900。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。为了说明起见,下面可能参考示出了根据一些实施方式的示例的图1a至图3b描述过程900的细节。然而,其他实施方式也是可能的。
[0100]
框910可以包括确定存储系统中的可用存储器。例如,参考图1a,存储控制器110可以确定可用于使用键

值索引145的存储器130的量。
[0101]
框920可以包括接收对针对键

值索引的特定层级的误报率的指示。例如,参考图1a,存储控制器110可以接收用户输入或命令,所述用户输入或命令指示用户关于读取键

值索引145可接受的误报率(例如,2%、5%等)。在一些示例中,所接收的指示可以指定特定于键

值索引的间接节点的(多个)特定层级(例如,对于图2所示的层级230)的(多个)误报率。
[0102]
框930可以包括确定键

值索引的其他层级的误报率。在一些实施方式中,可以确定索引的误报率,使得索引的较高层级具有比索引的较低层级相对更小的误报率。此外,某层级的误报率可以通过将另一个层级的误报率乘以恒定值来计算。例如,参考图1a至图2,存储控制器110可以通过将间接节点的最低层级(例如,图2所示的层级230)的误报率f乘以恒定值v(例如,0.5)来确定间接节点的第二低层级(例如,图2所示的层级220)的误报率f+1。此外,存储控制器110可以通过将间接节点的第二低层级(例如,图2所示的层级220)的误报率f+1乘以恒定值v来确定间接节点的第三低层级(例如,图2所示的层级210)的误报率f+2。可以重复此乘法过程以计算键

值索引中的任何数量的层级计算的误报率。
[0103]
框940可以包括基于可用存储器和键

值索引的多个层级的误报率来确定这些层级的布隆过滤器大小。在一些实施方式中,每个布隆过滤器的大小(例如,布隆过滤器中使
用的位数)可以与索引中的相关联层级的误报率成反比关系增加例如,布隆过滤器大小可以基于相关联层级的误报率而根据预定义函数变化(例如,布隆过滤器大小可以与所述布隆过滤器的误报率的自然对数成反比)。例如,参考图1a至图2,存储控制器110可以根据每个节点层级的误报率(在框930处确定)在键

值索引中的各种布隆过滤器间分配可用存储器。在此示例中,可以确定索引的较高层级具有相对较小的误报率,并且因此,与较低层级处的每个单独内部节点中的布隆过滤器相比,为较高层级处的每个单独内部节点中的布隆过滤器分配每个键

值对更大的存储器量(例如,位数)。在框940之后,过程900可以完成。
[0104]
在一些实施方式中,可以使用以下方程式来确定布隆过滤器大小:
[0105][0106]
在以上方程式中,项m
bf
是布隆过滤器的存储器需求,e是误肯定概率,c是可以存储在键

值索引中的键

值对的数量,并且r
i
是对应的层级i的层级比率(上文参考写入放大水平的方程式进行了描述。在一些示例中,布隆过滤器所需的存储器可以与误报率的对数成反比,并且可以与索引的容量成正比。此外,布隆过滤器所需的存储器可以与层级比率成反比,使得对于相对较高的层级,层级比率对存储器需求的影响相对较低。在一些示例中,可以基于可接受的读取放大水平(例如,由用户输入的参数提供)确定误报率。此外,如果有足够的存储器可用,则为给定节点创建节点缓冲器和布隆过滤器,而不考虑同一层级中的其他节点。
[0107]
10.键

值索引中的紧缩
[0108]
图10示出了根据一些实施方式的示例过程1000。在一些示例中,可以使用存储控制器110(图1a所示)或存储控制器117(图1b所示)中的一些或全部来执行过程1000。可以在硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)中实施过程1000。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。为了说明起见,下面可能参考示出了根据一些实施方式的示例的图1a至图3b描述过程1000的细节。然而,其他实施方式也是可能的。
[0109]
框1010可以包括接收要将键

值对添加到索引的写入请求。例如,参考图1a,更新引擎120可以将更新105存储在更新缓冲器135中,并且合并引擎150可以用存储在更新缓冲器135中的键

值对来更新键

值索引145。
[0110]
框1020可以包括将键

值对存储在索引的间接节点的节点缓冲器中。例如,参考图1a至图3a,存储控制器110可以将所接收的键

值对存储在根节点211的节点缓冲器340中。
[0111]
框1030可以包括确定间接节点的节点缓冲器是否超过阈值水平。框1040可以包括响应于确定间接节点的节点缓冲器超过阈值水平而将存储在间接节点的节点缓冲器中的键

值对转移到多个子节点的节点缓冲器,其中所述多个子节点中的每个节点缓冲器具有与间接节点的节点缓冲器不同的大小。例如,参考图1a至图3a,存储控制器110可以将所有键

值对从根节点211的节点缓冲器340转移到子节点221到224的节点缓冲器340。在一些示例中,基于与子节点221到224相关联的不同键范围,将每个转移的键

值对分配给子节点221到224之一。此外,在一些示例中,子节点221到224中的每一个的节点缓冲器340可以小于根节点211的节点缓冲器340。在框1030之后,过程1000可以完成。
[0112]
图11示出了根据一些实施方式的存储指令1110到1130的机器可读介质1100。指令1110到1130可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。机器可读介质1100可以是非暂态存储介质,比如光学存储介质、半导体存储介质或磁性存储介质。
[0113]
可以执行指令1110以接收要将键

值对添加到索引的写入请求。可以执行指令1120以将键

值对存储在索引的间接节点的节点缓冲器中。可以执行指令1130以响应于确定间接节点的节点缓冲器超过阈值水平而将存储在间接节点的节点缓冲器中的键

值对转移到多个子节点的节点缓冲器,其中所述多个子节点的每个节点缓冲器具有与间接节点的节点缓冲器不同的大小。
[0114]
图12示出了示例计算设备1200的示意图。在一些示例中,计算设备1200可以大体上对应于存储系统100(图1a所示)。如所示,计算设备1200可以包括硬件处理器1202和包含指令1210到1230的机器可读存储装置1205。机器可读存储装置1205可以是非暂态介质。指令1210到1230可以由硬件处理器1202或者由硬件处理器1202中所包括的处理引擎执行。
[0115]
可以执行指令1210以接收要将键

值对添加到索引的写入请求。可以执行指令1220以将键

值对存储在索引的间接节点的节点缓冲器中。可以执行指令1230以响应于确定间接节点的节点缓冲器超过阈值水平而将存储在间接节点的节点缓冲器中的键

值对转移到多个子节点的节点缓冲器,其中所述多个子节点的每个节点缓冲器具有与间接节点的节点缓冲器不同的大小。
[0116]
11.键

值索引中的布隆过滤器
[0117]
图13示出了根据一些实施方式的示例过程1300。在一些示例中,可以使用存储控制器110(图1a所示)或存储控制器117(图1b所示)中的一些或全部来执行过程1300。可以在硬件或硬件与编程的组合(例如,可由(多个)处理器执行的机器可读指令)中实施过程1300。机器可读指令可以存储在如光学存储设备、半导体存储设备或磁性存储设备等非暂态计算机可读介质中。机器可读指令可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。为了说明起见,下面可能参考示出了根据一些实施方式的示例的图1a至图3b描述过程1300的细节。然而,其他实施方式也是可能的。
[0118]
框1310可以包括接收对索引中的键

值对的读取请求,其中索引包括多个层级中的多个间接节点,其中索引的每个间接节点包括节点缓冲器和布隆过滤器,并且其中布隆过滤器的大小根据预定义函数跨层级变化。例如,参考图1a至图3,查询引擎160可以接收指定特定键的查询165。响应于查询165,查询引擎160可以通过以自上而下的模式分析或读取键

值索引145的节点来搜索特定键。在一些示例中,键

值索引145的每个间接节点可以包括节点缓冲器340和布隆过滤器330。不同层级的间接节点中的布隆过滤器330的大小可以基于与索引145的不同层级相关联的不同误报率。在一些示例中,索引145的较高层级具有比索引145的较低层级相对更小的误报率。此外,在一些示例中,布隆过滤器大小可以基于相关联层级的误报率而根据预定义函数变化(例如,布隆过滤器大小可以与所述布隆过滤器的误报率的自然对数成反比)。
[0119]
框1320可以包括响应于对键

值对的读取请求而确定间接节点的布隆过滤器是否指示间接节点的节点缓冲器包括键

值对。例如,参考图1a至图3a,存储控制器110可以确定根节点211的布隆过滤器330是否指示根节点211的节点缓冲器340包括键

值对。
[0120]
框1330可以包括响应于确定间接节点的布隆过滤器指示间接节点的节点缓冲器包括键

值对而在间接节点的节点缓冲器中搜索键

值对。例如,参考图1a至图3a,存储控制器110可以确定根节点211的布隆过滤器330指示根节点211的节点缓冲器340包括键

值对,并且作为响应,可以在节点缓冲器340中搜索键

值对。在框1330之后,过程1300可以完成。
[0121]
图14示出了根据一些实施方式的存储指令1410到1430的机器可读介质1400。指令1410到1430可以由单个处理器、多个处理器、单个处理引擎、多个处理引擎等来执行。机器可读介质1400可以是非暂态存储介质,比如光学存储介质、半导体存储介质或磁性存储介质。
[0122]
可以执行指令1410以接收对索引中的键

值对的读取请求,其中索引包括多个层级中的多个间接节点,其中索引的每个间接节点包括节点缓冲器和布隆过滤器,并且其中布隆过滤器的大小根据预定义函数跨层级变化。可以执行指令1420以响应于对键

值对的读取请求而确定间接节点的布隆过滤器是否指示间接节点的节点缓冲器包括键

值对。可以执行指令1430以响应于确定间接节点的布隆过滤器指示间接节点的节点缓冲器包括键

值对而在间接节点的节点缓冲器中搜索键

值对。
[0123]
图15示出了示例计算设备1500的示意图。在一些示例中,计算设备1500可以大体上对应于存储系统100(图1a所示)。如所示,计算设备1500可以包括硬件处理器1502和包含指令1510到1530的机器可读存储装置1505。机器可读存储装置1505可以是非暂态介质。指令1510到1530可以由硬件处理器1502或者由硬件处理器1502中所包括的处理引擎执行。
[0124]
可以执行指令1510以接收对索引中的键

值对的读取请求,其中索引包括多个层级中的多个间接节点,其中索引的每个间接节点包括节点缓冲器和布隆过滤器,并且其中布隆过滤器的大小根据预定义函数跨层级变化。可以执行指令1520以响应于对键

值对的读取请求而确定间接节点的布隆过滤器是否指示间接节点的节点缓冲器包括键

值对。可以执行指令1530以响应于确定间接节点的布隆过滤器指示间接节点的节点缓冲器包括键

值对而在间接节点的节点缓冲器中搜索键

值对。
[0125]
注意,虽然图1a至图15示出了各种示例,但是实施方式在这方面不受限制。例如,参考图1a,可以设想存储系统100可以包括附加的设备和/或部件、更少的部件、不同的部件、不同的布置等。在另一个示例中,可以设想更新引擎120和查询引擎160可以组合成单个引擎或单元,或者可以包括在存储系统100的任何其他引擎或软件中。其他组合和/或变化也是可能的。
[0126]
数据和指令存储在被实施为一个或多个计算机可读或机器可读存储介质的相应存储设备中。存储介质包括不同形式的非暂态存储器,包括:半导体存储器设备,比如动态随机存取存储器或静态随机存取存储器(dram或sram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)和闪速存储器;磁盘,比如固定的软盘和可移动盘;其他磁性介质,包括磁带;光学介质,比如紧致盘(cd)或数字视盘(dvd);或者其他类型的存储设备。
[0127]
应注意,上文讨论的指令可以在一个计算机可读或机器可读存储介质上提供,或者可替代地,可以在分布在具有可能多个节点的大型系统中的多个计算机可读或机器可读存储介质上提供。这种一个或多个计算机可读或机器可读存储介质被认为是物品(或制品)的一部分。物品或制品可以指任何制造的单个部件或多个部件。一个或多个存储介质可以
位于运行机器可读指令的机器中、或者位于远程站点处,可以通过网络从所述远程站点下载机器可读指令以供执行。
[0128]
在前述描述中,阐述了许多细节以使得理解本文中所公开的主题。然而,可以在没有这些细节中的一些细节的情况下实践实施方式。其他实施方式可以包括上文所讨论的细节的修改和变化。所附权利要求旨在涵盖这样的修改和变化。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1