管理存储系统的索引的方法、设备和计算机程序产品与流程

    专利2022-07-08  79


    本公开的各实现方式涉及存储系统的管理,更具体地,涉及用于管理存储系统的索引的方法、设备和计算机程序产品。



    背景技术:

    随着数据存储技术的发展,各种数据存储设备已经能够向用户提供越来越高的数据存储能力,并且数据访问速度也有了很大程度的提高。在提高数据存储能力的同时,用户对于存储系统的响应时间也提供了越来越高的需求。目前,已经开发出了针对存储系统中存储的数据建立索引以加速数据访问速度的技术方案。然而,在存储系统的操作期间,经常需要更新存储系统的索引。这将产生大量时间开销和资源开销,进而可能会影响存储系统的响应速度。此时,如何以更为有效的方式来管理存储系统的索引,进而提高存储系统的性能,成为一个研究热点。



    技术实现要素:

    因而,期望能够开发并实现一种以更为有效的方式来管理存储系统的索引的技术方案。期望该技术方案能够与现有的存储系统相兼容,并且通过改造现有存储系统的各种配置,来以更为有效的方式管理存储系统。

    根据本公开的第一方面,提供了一种用于管理存储系统的索引的方法。在该方法中,将多个更新请求划分为多组更新请求,多个更新请求分别用于更新存储系统中的多个数据项。针对多组更新请求中的一组更新请求中的目标更新请求,在索引中确定目标叶节点,目标叶节点包括目标更新请求将要更新的目标数据项。基于目标更新请求更新目标叶节点。根据确定目标叶节点中的全部待更新数据项已经被更新,将更新后的目标叶节点添加至存储系统的写入队列。

    该设备包括:至少一个处理器;易失性存储器;以及与至少一个处理器耦合的存储器,存储器具有存储于其中的指令,指令在被至少一个处理器执行时使得设备执行动作。该动作包括:将多个更新请求划分为多组更新请求,所述多个更新请求分别用于更新所述存储系统中的多个数据项;针对所述多组更新请求中的一组更新请求中的目标更新请求,在所述索引中确定目标叶节点,所述目标叶节点包括所述目标更新请求将要更新的目标数据项;基于所述目标更新请求更新所述目标叶节点;以及根据确定所述目标叶节点中的全部待更新数据项已经被更新,将更新后的所述目标叶节点添加至所述存储系统的写入队列。

    根据本公开的第三方面,提供了一种计算机程序产品,计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,机器可执行指令用于执行根据本公开的第一方面的方法。

    附图说明

    结合附图并参考以下详细说明,本公开各实现方式的特征、优点及其他方面将变得更加明显,在此以示例性而非限制性的方式示出了本公开的若干实现方式。在附图中:

    图1示意性示出了其中可以实现本公开的方法的存储系统的示意图;

    图2示意性示出了其中可以实现本公开的方法的存储系统的索引的框图;

    图3示意性示出了根据本公开的一个实现方式的用于管理存储系统的索引的框图;

    图4示意性示出了根据本公开的一个实现方式的用于管理存储系统的索引的方法的流程图;

    图5示意性示出了根据本公开的一个实现方式的用于处理一个更新请求的框图;

    图6示意性示出了根据本公开的一个实现方式的用于处理另一更新请求的框图;

    图7a示意性示出了根据本公开的一个实现方式的存储系统的索引中的与更新请求相关联的部分节点的框图;

    图7b示意性示出了根据本公开的一个实现方式的更新前的叶节点的框图;

    图7c示意性示出了根据本公开的一个实现方式的更新后的叶节点的框图;

    图8a示意性示出了根据本公开一个实现方式的用于确定两组更新请求之间的共享路径的框图;

    图8b示意性示出了根据本公开一个实现方式的由多个协程来更新存储系统的索引中的多个数据项的框图;以及

    图9示意性示出了根据本公开的示例性实现的用于管理存储系统的索引的设备的框图。

    具体实施方式

    下面将参照附图更详细地描述本公开的优选实现。虽然附图中显示了本公开的优选实现,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实现所限制。相反,提供这些实现是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

    在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实现”和“一个实现”表示“至少一个示例实现”。术语“另一实现”表示“至少一个另外的实现”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。

    目前已经开发出了多种存储系统,具体地,图1示意性示出了其中可以实现本公开的方法的存储系统的示意图100。如图1所示,可以提供资源池170,并且该资源池170可以包括多个存储设备110、120、130、140、150、……、160。尽管在此示出了多个独立的物理存储设备110、120、130、140、150、……、160,根据本公开的示例性实现,存储设备还可以是虚拟存储设备。可以基于资源池170来提供一个或多个存储系统。例如,存储系统190和192可以经由网络180来访问资源池170中的存储设备中的存储空间,以便向用户提供数据访问服务。

    随着存储系统的存储空间的扩大,需要针对存储系统中的数据对象建立索引,以便以快速和有效的方式来访问存储系统中的数据对象。图2示意性示出了其中可以实现本公开的方法的存储系统的索引200的框图。如图2所示,索引200可以是树状索引并且可以包括多个层级。例如,该索引200可以采用二叉树或者多叉树的形式,该索引200可以包括四个层。

    在根节点210所在的层(第零层)以外,在第一层处,节点220和节点222是根节点210的子节点。在第二层处,节点230、232、234可以是节点220的子节点,节点236、238可以是节点222的子节点。在第三层处,还可以包括更多的叶节点。将会理解,尽管在图2仅示意性示出了包括四个层的索引200,根据本公开的示例性实现方式,还可以包括更多或者更少的层。

    每个叶节点可以包括多个数据项,每个数据项可以包括关于一个数据对象的数据(例如,可以包括元数据)。根据本公开的示例性实现方式,元数据可以包括有关数据对象的多方面内容,例如可以包括数据对象的标识符、存储地址、时间戳、所有者等中的一个或多个。多个数据项可以按照数据项的键(key)的顺序(例如,按照升序)来排序,此时在如图2所示的索引200中,叶节点按照键从小到大的顺序(从左向右)来排序。将会理解,叶节点可以具有键范围,该键范围表示该叶节点中包括的数据项的键的范围。例如,假设一个叶节点包括数据项的键分别为key1和key2,并且下一相邻叶节点的一个数据项的键为key3,则该叶节点的键范围可以表示为[key1,key3)。

    类似地,索引200的非叶节点也可以具有相应的键范围,非叶结点的键范围可以表示该以该非叶结点为根的全部叶节点中包括的数据项的键的范围。假设非叶结点具有两个子节点,并且每个子节点的键范围分别为[key1,key3)和[key3,key4),则此时该非叶结点的键范围可以表示为[key1,key4)

    将会理解,尽管在图2中仅示意性示出了多叉树形式的索引200,根据本公开的示例性实现,索引200还可以采用其他形式。例如,可以使用二叉树、多叉树、b 树等方式来存储索引200。将会理解,尽管在图2中仅示意性示出了索引200包括四个层级的情况,根据本公开的示例性实现,索引200还可以包括更多或者更少的层级。

    根据本公开的示例性实现方式,在存储系统中,可以使用例如b 树形式的索引来持久化元数据。在存储系统中,b 树的转储(将存储器表合并到持久b 树)是一个关键过程,这将直接影响存储系统的最大性能。在转储过程中,首先需要将索引中的全部必需节点加载到存储器中,更新节点中的内容。继而,可以遍历b 树以查找脏节点(dirtynode)并将它们冲刷(flush)到存储系统的存储设备。上述过程通常需要大量时间并消耗大量存储器空间、系统i/o和计算资源。

    随着存储系统中所存储的数据对象的数量的增加,存储系统的索引将变得越来越复杂。此时,管理存储系统的索引将会占用存储系统的大量资源(例如,存储资源、计算资源和时间资源)。例如,存储系统中的存储器的资源可能存在限制,因而并不能一次将全部索引加载至存储器中。在管理索引时,不得不执行存储器交换(swap)以便将需要操作的数据加载至存储器中。另外,由于索引中的父节点的内容将依赖于子节点的内容。当一个父节点包括多个子节点的情况下,父节点的内容可能会被多次改变。

    目前已经提出了基于多个协程(coroutine)来处理索引中的不同部分的技术方案。在该技术方案中,可以将用于更新索引中的多个数据项的多个更新请求分配至多个协程。此时,需要额外建立特殊算法来协调多个协程的操作。现有的协调机制将导致大量时间开销,进而造成存储系统的运行效率低下。

    为了解决上述缺陷,本公开的实现方式提供了一种用于管理存储系统的索引的方法、设备和计算机程序产品。在下文中,将参见图3详细描述本公开的具体实现方式。图3示意性示出了根据本公开的一个实现方式的用于管理存储系统中的索引的框图300。根据本公开的示例性实现方式,可以将多个更新请求划分为多组更新请求。例如,可以获得第一组316更新请求、第二组326更新请求、第三组336更新请求和第四组346更新请求。每组更新请求可以包括多个更新请求,并且该多个更新请求分别用于更新存储系统中的多个数据项。在此可以采用多个协程来并行地处理多个分组的更新请求,以此方式,可以提高存储系统的处理效率。

    进一步,根据本公开的示例性实现方式,还提出了写入队列350的概念。叶节点可以包括有关多个数据对象的数据项,在已经基于目标更新请求更新目标叶节点之后,如果确定目标叶节点中的全部待更新数据项已经被更新,则可以将更新后的目标叶节点添加至存储系统的写入队列。利用本公开的示例性实现方式,由于在向写入队列添加节点时,已经考虑了各个节点之间的是否存在依赖关系,因而只要按照从前向后的顺序来逐一处理写入队列350中的每个节点,即可确保已经被更新的节点中的数据项不会被后续的更新请求影响,进而避免了节点被反复写入的情况。

    利用本公开的示例性实现方式,索引中的各个节点可以即时地被更新,以便尽可能早地被标记可写节点,并且被进一步存储至存储系统的存储设备中。以此方式,可以提高索引的转储性能,减少转储过程中的存储器资源消耗,并且可以降低对于计算资源和io资源的开销。

    在下文中,将参见图4详细描述有关本公开的实现方式的更多细节。图4示意性示出了根据本公开的一个实现方式的用于管理存储系统的索引的方法400的流程图。如图4所示,在框410处,将多个更新请求划分为多组更新请求。在此的多个更新请求分别用于更新存储系统中的多个数据项。

    如图3所示,第一组316更新请求可以涉及更新叶节点310、312、314和320中的数据项,第二组326更新请求可以涉及更新叶节点320、322、324和330中的数据项,第三组336更新请求可以涉及更新叶节点330、332、334和340中的数据项,而第四组346更新请求可以涉及更新叶节点340、342、344中的数据项。在此可以采用多个协程来并行地处理多个分组的更新请求,以此方式,可以提高存储系统的处理效率。将会理解,由于一个叶节点可以包括多个数据项,因而多个分组所访问的叶节点可能会存在交集。例如,第一组316更新请求和第二组326更新请求都会访问叶节点320。

    根据本公开的示例性实现方式,多个更新请求按照多个更新请求将要更新的多个数据项的键的顺序而被排序。利用本公开的示例性实现方式,通过将多个更新请求进行排序,在逐一处理排序后的多个更新请求时,可以按顺序(例如,按照键从小到大的顺序)处理各个更新请求。将会理解,由于索引200中的各个叶节点是按照数据项的键的顺序而排列的。以此方式,在逐一处理多个更新请求的每个更新请求时,可以按照从左向右的顺序遍历索引200中的各个叶节点。进而可以提高在索引200中检索与更新请求相对应的叶节点的效率,进而提高存储系统的处理性能。

    在框420处,针对多组更新请求中的一组更新请求中的目标更新请求,在索引中确定目标叶节点,目标叶节点包括目标更新请求将要更新的目标数据项。在此,可以针对多组的更新请求中的每组来执行处理,例如可以逐一遍历一组更新请求中的每个更新请求。首先,可以处理第一组316更新请求中的第一个更新请求(即,目标更新请求)。在此,基于该目标更新请求中的键来确定该目标更新请求将要更新的目标数据项。

    具体地,可以首先确定目标数据项的键,并且在索引200中查找与该键相对应的叶节点。换言之,需要在索引200中找到需要更新哪个叶节点。由于索引200中的各个节点(包括非叶结点和叶节点)都具有各自的键范围,通过比较目标数据项的键与各个节点的键范围,即可确定目标叶节点。在下文中,将参见图5描述有关处理更新请求的更多细节。图5示意性示出了根据本公开的一个实现方式的用于处理一个更新请求的框图500。如果确定目标更新请求将要更新的目标数据项位于索引200的最左侧的叶节点310,则此时可以将叶节点310确定为目标叶节点。

    返回图4,在框430处,可以基于目标更新请求更新目标叶节点。将会理解,由于叶节点310可以包括多个数据项,在已经确定目标叶节点之后,还需要确定在目标叶节点中的与目标更新请求相对应的位置。可以基于目标数据项的键以及目标叶节点的键范围,确定目标数据项的位置。

    根据本公开的示例性实现方式,更新请求可以包括插入请求以及删除请求中的至少任一项。将会理解,可以基于插入和删除方式来管理存储系统的索引200。如果向存储系统中插入新的数据对象,可以向索引中插入与新的数据对象相对应的数据项。如果从存储系统中删除数据对象,则可以从索引中删除与待删除数据对象相对应的数据项。如果存储系统的已有数据对象的内容被改变,则可以从索引中删除与该已有数据对象相对应的数据项,并且向索引中插入与改变后的数据对象相对应的数据项。

    在下文中,首先将参见图5描述有关执行插入请求的具体方式。根据本公开的示例性实现方式,可以首先确定更新请求的类型。如果确定更新请求为插入请求,则向索引200中的目标叶节点中的与目标数据项的键相对应的位置来插入目标数据项。如图5所示,在已经确定叶节点310为目标叶节点的情况下,可以逐一比较目标数据项的键与叶节点310中的各个数据项的键之间的关系,并且选择适当的插入位置。

    假设叶节点310包括多个数据项:数据项a的键为0x9a,数据项b的键为0x9c,而目标数据项的键为0x9b。此时,可以将目标数据项插入在数据项a和数据项b之间。以此方式,可以实现目标叶节点的更新。将会理解,该更新仅涉及基于一组更新请求中的第一个更新请求的更新。一组更新请求中还可以参考将要更新目标叶节点中的其他数据项的其他更新请求,此时还需要逐一处理其他更新请求。

    根据本公开的示例性实现方式,可以按顺序处理一组更新请求中的每个更新请求。具体地,可以将一组更新请求中的位于目标更新请求之后的更新请求标识为目标更新请求。按照上文描述的类似的方式,可以按顺序处理一组更新请求中的第二个更新请求、第三个更新请求、……、直到完成处理一组更新请求中的全部更新请求。

    将会理解,在处理后续的更新请求时,后续更新请求所涉及的目标数据项可以位于上文描述的目标叶节点(即,叶节点310)中。此时,可以按照上文描述类似的方式执行插入请求。返回图4,在框440处,如果确定目标叶节点中的全部待更新数据项已经被更新,则可以将更新后的目标叶节点添加至存储系统的写入队列。继续上文的示例,如果已经向叶节点310插入了需要被插入至叶节点310的全部数据项,则此时任务叶节点310的更新已经完成,因而可以将叶节点310添加至写入队列350,以便等待向存储系统的存储设备中写入叶节点310中的数据项。

    根据本公开的示例性实现方式,提出了工作路径的概念。如图5所示,条带框示出了工作节点(即,将要被更新的节点),而空白框示出了清洁节点(即,不需要被更新的节点)。当叶节点310为当前叶节点时,从叶节点310到根节点之间的路径510为工作路径(包括叶节点310、非叶结点230、非叶结点220以及根节点210)。在上文中已经描述了后续更新请求与先前的更新请求涉及相同叶节点310的情况。一组更新请求还可以涉及不同的叶节点。

    根据本公开的示例性实现方式,后续更新请求所涉及的目标数据项可以位于上文描述的目标叶节点(即,叶节点310)之后的其他叶节点中。在下文中,将参见图6详细描述,该图6示意性示出了根据本公开的一个实现方式的用于处理另一更新请求的框图600。如图6所示,当一组更新请求中的与叶节点310相关联的全部更新请求已经被处理后,可以将该叶节点310标记为可写节点。可写节点表示可以被添加至写入列表的节点,换言之,可以将该节点存储至存储系统的存储设备中。

    继而,当前更新请求被移动至一组更新请求中的下一更新请求。假设该更新请求涉及更新叶节点312中的数据项,则此时叶节点312将被标记为目标叶节点。继而,可以按照上文描述的方式,来处理当前更新请求以及后续的其他更新请求。此时的工作路径将改变至如附图标记610所示。

    根据本公开的示例性实现方式,还可以基于工作路径来判断可以向写入队列添加哪些节点。具体地,可以确定在树状结构中的位于工作路径左侧的一组节点,由于确定的一组节点相关的键范围小于工作路径中的节点的键范围,因而可以将确定的一组节点标记为可写节点。继而,可以将确定的一组节点添加至写入队列。

    尽管图6仅示出了工作路径610左侧包括一个叶节点310的情况,随着越来越多的更新请求被处理,工作路径可以逐渐向树状索引的右侧移动,此时,越来越多的节点将被标记为可写节点。例如,假设工作路径为叶节点314、非叶结点230、非叶结点220和根节点210,则此时叶节点310和312都可以被标记为可写节点。利用本公开的示例性实现方式,可以以更为快速并且有效的方式来确定可以被存储至存储系统的存储设备中的节点。

    将会理解,尽管上文中仅以插入请求为示例来描述了处理更新请求的具体方式,更新请求还可以是删除请求。此时,可以按照类似的方式来从目标叶节点中删除数据项。继续上文示例,假设期望删除的数据项的键为0x9c,则可以从叶节点310中删除与该键相对应的数据项。将会理解,在此的一组更新请求可以仅包括插入请求、仅包括删除请求,或者还可以包括插入请求和删除请求两者。可以分别按照上文描述的方式来处理插入请求和删除请求。

    根据本公开的示例性实现方式,可以向存储系统的存储器中存储写入队列中的节点。将会理解,由于此时写入队列中的各个节点已经是按照更新的依赖关系而排序的节点,只要按照写入队列的顺序来逐一存储每个节点,可以确保最后写入与先前节点具有依赖关系的节点,进而避免针对同一节点执行多次写入的情况。

    将会理解,由于叶节点的头部处的数据项的键的值将会影响该叶节点的键范围,当更新请求改变了叶节点的头部的数据项时,还可能会导致叶节点的键范围的变化。此时,需要基于更新后的键来修改叶节点(以及该叶节点的一个或多个父节点)的键范围。

    根据本公开的示例性实现方式,如果确定目标叶节点的键范围不同于更新后的目标叶节点的更新的键范围,则可以将目标叶节点标记为影子节点(shadownode)。继而,可以在后续的处理中更新影子节点及其父节点的键范围。具体地,可以基于标记的目标叶节点,更新工作路径中的另一节点的键范围。在下文中,将参见图7a至图7c详细描述。

    图7a示意性示出了根据本公开的一个实现方式的存储系统的索引中的与更新请求相关联的部分节点的框图700a。为简单起见,图7a仅示出了与更新请求相关的部分节点。如图7a所示,在根节点210下层可以包括第一层级的非叶结点220、第二层级的非叶结点230和第三层级的叶节点310、312、314等。假设叶节点312包括数据项710、数据项712、数据项714和数据项716。假设此时的一组更新请求包括:删除键为0xa0的数据项,继而插入键为0xa1的数据项。在下文中,将参见图7b和图7c描述如何执行一组更新请求。

    图7b示意性示出了根据本公开的一个实现方式的更新前的叶节点的框图700b。此时,叶节点312包括数据项710(键为0xa0)、数据项712(键为0xa3)、数据项714(键为0xa5)和数据项716(键为0xa6)。图7c示意性示出了根据本公开的一个实现方式的更新后的叶节点的框图700c。基于待插入数据项的键0xa1和叶节点312中的已有数据项的键可知,可以将数据项718插入至数据项710和数据项712之间。

    由于从叶节点312中删除数据项将会导致该叶节点312的键范围的变化,可以将该叶节点312标记为影子节点,并且后续利用数据项718的键来更新叶节点312的键范围。将会理解,由于叶节点的父节点的范围可以受到叶节点的键范围的影响,因而还可以基于叶节点的键范围来更新上层的一个或多个父节点的键范围。根据本公开的示例性实现方式,针对工作路径中的另一节点,如果确定另一节点的键范围已经被更新,则可以向写入队列350添加另一节点。

    在上文中,已经参见附图描述如何处理多组更新请求中的一组更新请求。根据本公开的示例性实现方式,还可以并行地处理多组更新请求,例如,可以指定由多个协程来分别处理多组更新请求。此时,可以按照上文描述的方式来由一个协程处理一组更新请求。利用本公开的示例性实现方式,多个协程可以并行地处理多组更新请求,这使得可以大大提高在存储系统中更新索引的性能。

    具体地,假设需要更新索引中的10000个数据项,如果利用16个协程来处理更新请求。则每个协程仅需要处理10000/16=625个更新请求。利用本公开的示例性实现方式,可以大大提高存储系统的并行处理的能力。

    具体地,在两组更新请求之间可能会存在共享路径。换言之,共享路径中的节点将会分别受到两组更新请求的影响。此时,对于共享路径中的某个节点而言,需要等待两组更新请求中的与该节点相关联的更新请求执行完毕,才表示该节点的更新被完成。继而,可以将该节点标记为可写节点并且添加至写入队列。

    根据本公开的示例性实现方式,可以基于一组更新请求之后的另一组更新请求中的第一更新请求的键,确定一组更新请求与另一组更新请求之间的共享路径。在下文中,将参见图8a描述有关确定共享路径的更多细节。图8a示意性示出了根据本公开一个实现方式的用于确定两组更新请求之间的共享路径的框图800a。

    如图8a所示,假设第一组316涉及更新叶节点310、312、314和320中的数据项,第二组326更新请求涉及更新叶节点320、322、324和330中的数据项。此时可以基于第二组326更新请求的第一个更新请求可以涉及更新叶节点320中的数据项,因而可以确定叶节点320是一个共享节点。继而,可以基于叶节点320和根节点210之间的路径,来确定共享路径中的共享节点。

    根据本公开的示例性实现方式,如果共享路径中的叶节点中的数据项已经被更新,将叶节点添加至写入队列。如图8a所示,第一组316更新请求和第二组326更新请求之间的共享节点可以包括叶节点320和非叶结点232。此时,只有当第一组316更新请求和第二组326更新请求中的与叶节点320相关联的全部更新请求执行完成之后,才能将叶节点320添加至写入队列。

    根据本公开的示例性实现方式,根据本公开的示例性实现方式,针对共享路径中的叶节点以外的另一节点,根据确定另一节点的子树已经被更新,更新另一节点。继而,可以将更新的另一节点添加至写入队列。进一步,只有当非叶结点232的全部子节点被更新、并且非叶结点232本身已经被更新,才可以将非叶节点320添加至写入队列。可以以类似的方式来确定其他各组更新请求之间的共享节点,例如,第一组316更新请求、第二组326更新请求和第三组更新请求之间的共享节点可以包括非叶结点220。

    在下文中,将参见图8b描述如何以并行方式利用多个协程来执行多组更新请求。图8b示意性示出了根据本公开一个实现方式的由多个协程更新索引中的多个数据项的框图800b。假设第一组316更新请求涉及更新叶节点310、312、314中的数据项,并且涉及更新叶节点320中的数据项810和812。此时,可以利用协程820来执行第一组316更新请求。假设第二组326更新请求涉及更新叶节点320中的数据项814和816,并且还涉及更新叶节点322、324和330中的数据项。此时,可以利用协程822来执行第二组326更新请求。利用本公开的示例性实现方式,多个协程可以并行地执行上文描述的方法,以便以更为高效的方式处理多个更新请求。

    在上文中已经参见图2至图8b详细描述了根据本公开的方法的示例,在下文中将描述相应的装置的实现。根据本公开的示例性实现方式,提供了一种用于管理存储系统的索引的装置。该装置包括:划分模块,配置用于将多个更新请求划分为多组更新请求,多个更新请求分别用于更新存储系统中的多个数据项;确定模块,配置用于针对多组更新请求中的一组更新请求中的目标更新请求,在索引中确定目标叶节点,目标叶节点包括目标更新请求将要更新的目标数据项;更新模块,配置用于基于目标更新请求更新目标叶节点;以及添加模块,配置用于根据确定目标叶节点中的全部待更新数据项已经被更新,将更新后的目标叶节点添加至存储系统的写入队列。

    根据本公开的示例性实现方式,进一步包括:存储模块,配置用于向存储系统的存储器中存储写入队列中的节点。

    根据本公开的示例性实现方式,多个更新请求按照多个更新请求将要更新的多个数据项的键的顺序而被排序。

    根据本公开的示例性实现方式,该装置进一步包括:标识模块,配置用于将一组更新请求中的位于目标更新请求之后的更新请求标识为目标更新请求。

    根据本公开的示例性实现方式,其中索引包括树状结构,该装置进一步包括:路径确定模块,配置用于基于目标叶节点和树状结构的根节点,确定目标叶节点在索引中的工作路径;节点确定模块,配置用于在树状结构中,确定位于工作路径左侧的一组节点;以及所述添加模块进一步配置用于将确定的一组节点添加至写入队列。

    根据本公开的示例性实现方式,更新请求包括插入请求以及删除请求中的至少任一项,以及所述更新模块进一步配置用于:确定更新请求的类型;以及基于确定的类型来更新叶节点。

    根据本公开的示例性实现方式,更新模块进一步包括:位置确定模块,配置用于基于目标数据项的键以及目标叶节点的键范围,确定目标数据项的位置;以及基于确定的位置更新目标叶节点。

    根据本公开的示例性实现方式,更新模块进一步包括:标记模块,配置用于根据确定目标叶节点的键范围不同于更新后的目标叶节点的更新的键范围,标记目标叶节点;以及范围更新模块,配置用于基于标记的目标叶节点,更新工作路径中的另一节点的键范围。

    根据本公开的示例性实现方式,该添加模块进一步配置用于针对工作路径中的另一节点,根据确定另一节点的键范围已经被更新,向写入队列添加另一节点。

    根据本公开的示例性实现方式,该装置进一步包括:共享路径确定模块,配置用于基于一组更新请求之后的另一组更新请求中的第一更新请求的键,确定一组更新请求与另一组更新请求之间的共享路径;以及该添加模块进一步配置用于根据共享路径中的叶节点中的数据项已经被更新,将叶节点添加至写入队列。

    根据本公开的示例性实现方式,该更新模块进一步配置用于:针对共享路径中的叶节点以外的另一节点,根据确定另一节点的子树已经被更新,更新另一节点;以及添加模块进一步配置用于将更新的另一节点添加至写入队列。

    图9示意性示出了根据本公开的示例性实现的用于管理存储系统的设备900的框图。如图所示,设备900包括中央处理单元(cpu)901,其可以根据存储在只读存储器(rom)902中的计算机程序指令或者从存储单元908加载到随机访问存储器(ram)903中的计算机程序指令,来执行各种适当的动作和处理。在ram903中,还可存储设备900操作所需的各种程序和数据。cpu901、rom902以及ram903通过总线904彼此相连。输入/输出(i/o)接口905也连接至总线904。

    设备900中的多个部件连接至i/o接口905,包括:输入单元906,例如键盘、鼠标等;输出单元907,例如各种类型的显示器、扬声器等;存储单元908,例如磁盘、光盘等;以及通信单元909,例如网卡、调制解调器、无线通信收发机等。通信单元909允许设备900通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。

    上文所描述的各个过程和处理,例如方法400,可由处理单元901执行。例如,在一些实现中,方法400可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元908。在一些实现中,计算机程序的部分或者全部可以经由rom902和/或通信单元909而被载入和/或安装到设备900上。当计算机程序被加载到ram903并由cpu901执行时,可以执行上文描述的方法400的一个或多个步骤。备选地,在其他实现中,cpu901也可以以其他任何适当的方式被配置以实现上述过程/方法。

    根据本公开的示例性实现,提供了一种用于管理存储系统的索引的设备,包括:至少一个处理器;易失性存储器;以及与至少一个处理器耦合的存储器,存储器具有存储于其中的指令,指令在被至少一个处理器执行时使得设备执行动作。该动作包括:将多个更新请求划分为多组更新请求,多个更新请求分别用于更新存储系统中的多个数据项;针对多组更新请求中的一组更新请求中的目标更新请求,在索引中确定目标叶节点,目标叶节点包括目标更新请求将要更新的目标数据项;基于目标更新请求更新目标叶节点;以及根据确定目标叶节点中的全部待更新数据项已经被更新,将更新后的目标叶节点添加至存储系统的写入队列。

    根据本公开的示例性实现方式,动作进一步包括:向存储系统的存储器中存储写入队列中的节点。

    根据本公开的示例性实现方式,多个更新请求按照多个更新请求将要更新的多个数据项的键的顺序而被排序,动作进一步包括:将一组更新请求中的位于目标更新请求之后的更新请求标识为目标更新请求。

    根据本公开的示例性实现方式,索引包括树状结构,设备进一步包括:基于目标叶节点和树状结构的根节点,确定目标叶节点在索引中的工作路径;在树状结构中,确定位于工作路径左侧的一组节点;以及将确定的一组节点添加至写入队列。

    根据本公开的示例性实现方式,更新请求包括插入请求以及删除请求中的至少任一项,以及基于目标更新请求更新目标叶节点包括:

    确定更新请求的类型;以及基于确定的类型来更新叶节点。

    根据本公开的示例性实现方式,该动作进一步包括:基于目标数据项的键以及目标叶节点的键范围,确定目标数据项的位置;以及基于确定的位置更新目标叶节点。

    根据本公开的示例性实现方式,动作进一步包括:根据确定目标叶节点的键范围不同于更新后的目标叶节点的更新的键范围,标记目标叶节点;以及基于标记的目标叶节点,更新工作路径中的另一节点的键范围。

    根据本公开的示例性实现方式,动作进一步包括:针对工作路径中的另一节点,根据确定另一节点的键范围已经被更新,向写入队列添加另一节点。

    根据本公开的示例性实现方式,动作进一步包括:基于一组更新请求之后的另一组更新请求中的第一更新请求的键,确定一组更新请求与另一组更新请求之间的共享路径;以及根据共享路径中的叶节点中的数据项已经被更新,将叶节点添加至写入队列。

    根据本公开的示例性实现方式,动作进一步包括:针对共享路径中的叶节点以外的另一节点,根据确定另一节点的子树已经被更新,更新另一节点;以及将更新的另一节点添加至写入队列。

    根据本公开的示例性实现,提供了一种计算机程序产品,计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,机器可执行指令用于执行根据本公开的方法。

    根据本公开的示例性实现,提供了一种计算机可读介质。计算机可读介质上存储有机器可执行指令,当机器可执行指令在被至少一个处理器执行时,使得至少一个处理器实现根据本公开方法。

    本公开可以是方法、设备、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本公开的各个方面的计算机可读程序指令。

    计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

    这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

    用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,编程语言包括面向对象的编程语言—诸如smalltalk、c 等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实现中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。

    这里参照根据本公开实现的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

    这些计算机可读程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其他可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

    也可以把计算机可读程序指令加载到计算机、其他可编程数据处理装置、或其他设备上,使得在计算机、其他可编程数据处理装置或其他设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其他可编程数据处理装置、或其他设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

    附图中的流程图和框图显示了根据本公开的多个实现的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

    以上已经描述了本公开的各实现,上述说明是示例性的,并非穷尽性的,并且也不限于所公开的各实现。在不偏离所说明的各实现的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实现的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文公开的各实现。


    技术特征:

    1.一种用于管理存储系统的索引的方法,所述方法包括:

    将多个更新请求划分为多组更新请求,所述多个更新请求分别用于更新所述存储系统中的多个数据项;

    针对所述多组更新请求中的一组更新请求中的目标更新请求,在所述索引中确定目标叶节点,所述目标叶节点包括所述目标更新请求将要更新的目标数据项;

    基于所述目标更新请求更新所述目标叶节点;以及

    根据确定所述目标叶节点中的全部待更新数据项已经被更新,将更新后的所述目标叶节点添加至所述存储系统的写入队列。

    2.根据权利要求1所述的方法,进一步包括:向所述存储系统的存储器中存储所述写入队列中的节点。

    3.根据权利要求1所述的方法,其中所述多个更新请求按照所述多个更新请求将要更新的多个数据项的键的顺序而被排序,所述方法进一步包括:

    将所述一组更新请求中的位于所述目标更新请求之后的更新请求标识为目标更新请求。

    4.根据权利要求3所述的方法,其中所述索引包括树状结构,所述方法进一步包括:

    基于所述目标叶节点和所述树状结构的根节点,确定所述目标叶节点在所述索引中的工作路径;

    在所述树状结构中,确定位于所述工作路径左侧的一组节点;以及

    将确定的所述一组节点添加至所述写入队列。

    5.根据权利要求1所述的方法,其中所述更新请求包括插入请求以及删除请求中的至少任一项,以及基于所述目标更新请求更新所述目标叶节点包括:

    确定所述更新请求的类型;以及

    基于确定的所述类型来更新所述叶节点。

    6.根据权利要求5所述的方法,进一步包括:

    基于所述目标数据项的键以及所述目标叶节点的键范围,确定所述目标数据项的位置;以及

    基于确定的所述位置更新所述目标叶节点。

    7.根据权利要求6所述的方法,进一步包括:

    根据确定所述目标叶节点的所述键范围不同于更新后的所述目标叶节点的更新的键范围,标记所述目标叶节点;以及

    基于标记的所述目标叶节点,更新所述工作路径中的另一节点的键范围。

    8.根据权利要求7所述的方法,进一步包括:针对所述工作路径中的另一节点,

    根据确定所述另一节点的键范围已经被更新,向所述写入队列添加所述另一节点。

    9.根据权利要求3所述的方法,进一步包括:

    基于所述一组更新请求之后的另一组更新请求中的第一更新请求的键,确定所述一组更新请求与所述另一组更新请求之间的共享路径;以及

    根据所述共享路径中的叶节点中的数据项已经被更新,将所述叶节点添加至所述写入队列。

    10.根据权利要求9所述的方法,进一步包括:针对所述共享路径中的所述叶节点以外的另一节点,

    根据确定所述另一节点的子树已经被更新,更新所述另一节点;以及

    将更新的所述另一节点添加至所述写入队列。

    11.一种用于管理存储系统的索引的设备,包括:

    至少一个处理器;

    易失性存储器;以及

    与所述至少一个处理器耦合的存储器,所述存储器具有存储于其中的指令,所述指令在被所述至少一个处理器执行时使得所述设备执行动作,所述动作包括:

    将多个更新请求划分为多组更新请求,所述多个更新请求分别用于更新所述存储系统中的多个数据项;

    针对所述多组更新请求中的一组更新请求中的目标更新请求,在所述索引中确定目标叶节点,所述目标叶节点包括所述目标更新请求将要更新的目标数据项;

    基于所述目标更新请求更新所述目标叶节点;以及

    根据确定所述目标叶节点中的全部待更新数据项已经被更新,将更新后的所述目标叶节点添加至所述存储系统的写入队列。

    12.根据权利要求11所述的设备,其中所述动作进一步包括:向所述存储系统的存储器中存储所述写入队列中的节点。

    13.根据权利要求11所述的设备,其中所述多个更新请求按照所述多个更新请求将要更新的多个数据项的键的顺序而被排序,所述动作进一步包括:

    将所述一组更新请求中的位于所述目标更新请求之后的更新请求标识为目标更新请求。

    14.根据权利要求13所述的设备,其中所述索引包括树状结构,所述设备进一步包括:

    基于所述目标叶节点和所述树状结构的根节点,确定所述目标叶节点在所述索引中的工作路径;

    在所述树状结构中,确定位于所述工作路径左侧的一组节点;以及

    将确定的所述一组节点添加至所述写入队列。

    15.根据权利要求11所述的设备,其中所述更新请求包括插入请求以及删除请求中的至少任一项,以及基于所述目标更新请求更新所述目标叶节点包括:

    确定所述更新请求的类型;以及

    基于确定的所述类型来更新所述叶节点。

    16.根据权利要求15所述的设备,其中所述动作进一步包括:

    基于所述目标数据项的键以及所述目标叶节点的键范围,确定所述目标数据项的位置;以及

    基于确定的所述位置更新所述目标叶节点。

    17.根据权利要求16所述的设备,其中所述动作进一步包括:

    根据确定所述目标叶节点的所述键范围不同于更新后的所述目标叶节点的更新的键范围,标记所述目标叶节点;以及

    基于标记的所述目标叶节点,更新所述工作路径中的另一节点的键范围。

    18.根据权利要求17所述的设备,其中所述动作进一步包括:针对所述工作路径中的另一节点,

    根据确定所述另一节点的键范围已经被更新,向所述写入队列添加所述另一节点。

    19.根据权利要求13所述的设备,其中所述动作进一步包括:

    基于所述一组更新请求之后的另一组更新请求中的第一更新请求的键,确定所述一组更新请求与所述另一组更新请求之间的共享路径;以及

    根据所述共享路径中的叶节点中的数据项已经被更新,将所述叶节点添加至所述写入队列。

    20.一种计算机程序产品,所述计算机程序产品被有形地存储在非瞬态计算机可读介质上并且包括机器可执行指令,所述机器可执行指令用于执行根据权利要求1-10中的任一项所述的方法。

    技术总结
    本公开涉及管理存储系统的索引的方法、设备和计算机程序产品。在该方法中,将多个更新请求划分为多组更新请求,多个更新请求分别用于更新存储系统中的多个数据项。针对多组更新请求中的一组更新请求中的目标更新请求,在索引中确定目标叶节点,目标叶节点包括目标更新请求将要更新的目标数据项。基于目标更新请求更新目标叶节点。根据确定目标叶节点中的全部待更新数据项已经被更新,将更新后的目标叶节点添加至存储系统的写入队列。利用上述示例性实现,可以以更为高效的方式访问存储系统中的索引,进而提高存储系统的整体性能。进一步,提供了一种用于管理存储系统的索引的设备和计算机程序产品。

    技术研发人员:陆永伟;孙伟
    受保护的技术使用者:伊姆西IP控股有限责任公司
    技术研发日:2019.09.11
    技术公布日:2021.03.12

    转载请注明原文地址:https://wp.8miu.com/read-23645.html

    最新回复(0)