分布式数据存储区中的版本化分层数据结构的制作方法

文档序号:16367491发布日期:2018-12-22 08:30阅读:170来源:国知局
分布式数据存储区中的版本化分层数据结构的制作方法

分层存储系统已经实施了许多不同的存储方案,用于有效且可靠地保持数据。当存储系统客户端应用程序需要数据存储系统中永久存储的数据的更高可用性时,通常部署在分布式系统架构上实施的存储方案。使数据可用的常用解决方案包括在多个存储节点上存储一个或多个数据版本或数据副本。然而,通过增大版本或副本的数目,生成分层数据的一致视图的复杂性和操作成本增大。举例来说,同步协议可能要求允许单个组件处置例如对分层数据的写入或其它修改的操作。这种同步协议会降低分布式系统响应客户端请求的可用性,因为单个组件可能变得负担过重。因此,非常需要在不牺牲可用性的情况下提供一致版本的分层数据的一致性机制。

附图说明

图1是示出根据一些实施方案的提供版本化分层数据结构的分层数据存储区的逻辑框图。

图2是示出根据一些实施方案的实施包括提供版本化分层数据结构的分层数据存储区的目录存储服务的提供商网络的框图。

图3是示出根据一些实施方案的分层存储节点的框图。

图4a是示出根据一些实施方案的用于提供版本化分层数据结构的分层数据存储区的数据模型的框图。

图4b和4c是示出根据一些实施方案的用于分层数据结构的数据模型的存储格式的示例表。

图5是示出根据一些实施方案的使用单独的事务日志存储区来为版本化分层数据结构提供一致存储的框图。

图6是示出根据一些实施方案的利用事务日志存储区的具有可串行化隔离的访问请求的处理的序列图。

图7是示出根据一些实施方案的利用维护于存储节点处的分层数据结构的版本处理具有快照隔离的访问请求的序列图。

图8是示出根据一些实施方案的利用事务日志存储区处理具有可串行化隔离的条件性访问请求的序列图。

图9是示出根据一些实施方案的利用事务日志存储区处理具有可串行化隔离的批访问请求的序列图。

图10是示出根据一些实施方案的利用事务日志存储区和事务状态令牌处理具有可串行化隔离的客户端指定的事务请求的序列图。

图11是示出根据一些实施方案的利用页码标注令牌处理具有页码标注结果递送的访问请求的序列图。

图12是示出根据一些实施方案的用于实施版本化分层数据结构以服务于访问请求的方法和技术的高阶流程图。

图13是示出根据一些实施方案的用于在存储节点处实施与分层数据结构的事务日志一致地维护分层数据结构的版本的方法和技术的高阶流程图。

图14是根据各种实施方案的示例计算机系统。

虽然本文通过示例的方式针对若干实施方案和说明性附图描述了实施方案,然而本领域技术人员将认识到,实施方案不限于所描述的实施方案或附图。应理解,附图和对其的详细描述并非旨在将实施方案限制于所公开的特定形式,而是相反,其意图是覆盖落入所公开的精神和范围内的所有修改、等效物和替代物。本文使用的标题仅用于组织目的,并不意欲用于限制说明书或权利要求的范围。如在整个本申请中所使用的,单词“可以”以允许的意义使用(即,意味着具有潜力),而不是强制意义(即,意义必须)。“包括”等词语表示开放式关系,因此意味着包括但不限于。类似地,词语“具有”也表示开放式关系,因此意味着具有但不限于。本文使用的术语“第一”、“第二”、“第三”等用作它们之前的名词的标签,并且不暗示任何类型的排序(例如,空间、时间、逻辑等),除非另有明确说明此类排序。

可以将各种组件描述为“被配置成”执行一个或多个任务。在此类上下文中,“被配置成”是广泛的叙述,通常意味着“具有在操作期间执行一个或多个任务的结构”。由此,即使当组件当前没有执行所述任务时,组件也可以被配置成执行任务(例如,计算机系统可以被配置成即使当前没有执行操作也执行操作)。在一些上下文中,“被配置成”可以是结构的广泛叙述,通常意味着“具有在操作期间执行任务的任何电路”。因此,即使组件当前未接通,组件也可以配置成执行任务。通常,形成对应于“配置成”的结构的电路可以包括硬件电路。

为了描述的方便,可以将各种组件描述为执行一个或多个任务。此类描述应被解释为包括短语“配置成”。叙述被配置成执行一个或多个任务的组件明确地意图不援引35u.s.c.§112(f)来解释所述组件。

“基于”。如本文中所使用,所述术语用于描述影响确定的一个或多个因素。所述术语不排除可能影响确定的其它因素。也就是说,确定可以仅基于那些因素或至少部分地基于那些因素。考虑短语“基于b确定a”。虽然b可能是影响a的确定的因素,但此类短语不排除a的确定也基于c。在其它情况下,a可以仅基于b加以确定。

本公开的范围包括本文公开的任何特征或特征的组合(明确地或隐含地),或其任何概括,无论其是否减轻本文所解决的任何或所有问题。因此,可能在对本申请(或要求其优先权的申请)的任何此类特征组合的审查期间制定新的权利要求。明确地说,参考所附权利要求,从属权利要求的特征可以与独立权利要求的特征组合,并且相应独立权利要求的特征可以按任何适当的方式组合,而不仅仅是在所附权利要求中列举的特定组合。

具体实施方式

本文描述了分布式数据存储区中的版本化分层数据结构的各种实施方案。通常,例如目录数据存储区的分层数据存储区限制了对分层数据结构的一致和当前版本(例如,树、图或其它基于分层结构的数据结构)的访问。这允许分层数据存储区在面对同时访问请求时提供一致性。此类实施方式迫使所有访问请求利用类似的处理路径来执行,从而提供类似的一致性和隔离级别,这对于在访问分层数据结构时可能不总是希望以速度或其它性能考虑为代价的一致性或隔离的客户端提供很小的灵活性。提供版本化分层数据结构允许实施多种类型的一致性模型,使得不同的请求可以指定所需隔离和/或一致性级别,并且因此控制关于访问分层数据结构的请求的执行。

图1是示出根据一些实施方案的提供版本化分层数据结构的分层数据存储区的逻辑框图。分层数据存储区120可以随时间提供分层数据结构132的多个版本,使得在服务于访问请求112时可以实施各种类型的一致性和隔离级别。举例来说,每个版本,例如版本132a、132b和132c,可以维护分层数据结构,使得历史查询(或者不关心是否存在陈旧数据的可能的查询)可以利用快速可用(例如,在存储器中维持分层数据结构的存储节点处)的分层数据结构的版本。期望或需要强一致版本的分层数据结构的其它访问请求112可以调用为访问请求提供可串行化隔离的操作,例如通过利用如下所述的乐观并行来评估关于事务日志的请求。访问请求112还可以调用基于路径的遍历以确定作为分层数据结构132的一部分存储的各种信息。

请注意,提供图1作为提供版本化分层数据结构的分层数据存储区的逻辑图示,并且不旨在限制实施分布式数据存储区的组件、模块或装置的物理布置、大小或数目。

根据各种实施方案,说明书首先描述作为目录存储服务的分布式数据存储区的示例。在各种实施方案中,示例目录存储服务可以存储用于许多不同客户端的分层数据结构。示例性基于网络的数据库服务的描述中包括示例基于网络的目录存储服务的相应方面以及目录存储服务与客户端之间的各种交互。说明书接着描述了用于分布式数据存储区中的版本化分层数据结构的方法的各种实施方案的流程图。接下来,说明书描述了可以实施所公开的技术的示例系统。在整个说明书中提供了各种示例。

图2是示出根据一些实施方案的实施提供版本化分层数据结构的分层数据存储区的目录存储服务的提供商网络的框图。提供商网络200可以由例如公司或公共部门组织的实体建立,以使得可以经由因特网和/或其它网络访问客户端210的一个或多个服务(例如各种类型的基于云的计算或存储)。提供商网络200可以包括托管各种资源池的许多数据中心,例如需要实施和分发由提供商网络200提供的基础设施和服务的物理和/或虚拟化计算机服务器、存储装置、网络装置等(例如,下文参考图14描述的计算系统2000)的集合。在一些实施方案中,提供商网络200可以实施所描述的目录存储服务220,提供其它计算资源或服务,例如虚拟计算服务和存储服务,例如对象存储服务、基于块的存储服务、数据仓库存储服务、存档存储服务270和/或任何其它类型的基于网络的服务280(其可以包括各种其它类型的存储、处理、分析、通信、事件处置、可视化和安全服务)。客户端210可以经由网络260访问由提供商网络200提供的这些各种服务。同样地,基于网络的服务本身可以彼此通信和/或利用以提供不同的服务。举例来说,各种其它服务280可以存储、访问和/或依赖存储在目录存储服务220中的分层数据结构。

在各种实施方案中,图2中所示的组件可以直接在计算机硬件内实施、作为可由计算机硬件(例如,微处理器或计算机系统)直接或间接执行的指令,或者使用这些技术的组合。举例来说,图2的组件可以由包括多个计算节点(或简称为节点)的系统实施,每个计算节点可以类似于图14所示且在下文描述的计算机系统实施方案。在各种实施方案中,给定服务系统组件(例如,数据库服务的组件或存储服务的组件)的功能可以由特定节点实施,或者可以分布在若干节点上。在一些实施方案中,给定节点可以实施多于一个服务系统组件(例如,多于一个数据库服务系统组件)的功能。

目录存储服务220可以存储、管理和维护分层数据结构,例如下文关于图4a论述的存储在分层存储节点240中的相应节点(以单租户或多租户方式)的目录结构。目录存储服务220的客户端可以对具有事务语义的分层数据结构的任何子集或部分操作和/或可以执行分层数据结构的基于路径的遍历。这些功能允许客户端以多种方式访问分层数据结构。举例来说,客户端可以利用事务访问请求来同时执行多个操作,从而影响分层目录结构的不同部分(例如,节点)(例如,读取分层目录结构的部分、添加节点,以及对节点的一些属性编索引),同时强制要求事务中的操作的最终更新是隔离的、一致的、原子的并且永久存储的)。

在各种实施方案中,目录存储服务220可以实施路由层232以将来自内部或外部客户端的访问请求定向到适当的分层存储节点240。举例来说,路由层232可以实施维护映射信息的一组路由节点,所述映射信息识别分层存储主机240上的分层数据结构的位置。当接收到访问请求时,路由层节点可以确定承载分层数据结构的分层存储节点中的哪一个在访问请求中识别为发送访问请求。考虑此类场景,其中分层数据结构可以作为副本群组的一部分跨多个不同的分层存储节点240复制,例如图5中所示。路由232可以实施各种负载平衡方案以将来自不同客户端的请求引导到副本群组内的不同分层存储节点,使得没有单个分层存储节点变得过载。此外,由于分层存储节点240可以利用令牌来维持客户端发送的不同访问请求之间的状态,使得不同的分层存储节点240可以处置来自客户端的每个请求,因此路由232不需要跟踪哪个分层存储节点正在与哪个客户端通信(因为粘性会话可以通过以下关于图10和11论述的令牌状态管理技术来避免)。

控制平面234可以实施各种控制功能以管理分层存储节点240和目录存储服务220的提供分层数据结构的存储的其它组件,例如指导在分层存储节点240上创建和放置新的分层数据结构、存储缩放、热管理、节点修复和/或替换。举例来说,各种放置方案可以利用例如一致散列(例如,基于对相应分层数据结构的识别符进行散列)的技术来识别分层存储节点以存储分层数据结构的版本,或者随机映射分层数据结构到形成副本集的数个分层存储节点240。为了提供热管理,例如,控制平面234可以收集由每个主机发布的分层存储主机240度量。每个主机可能具有各种性能特征阈值,例如内存利用率、cpu利用率、磁盘利用率和请求速率容量。当分层存储节点报告超过阈值(或多个阈值)的度量时,控制平面234可以指导一个或多个分层数据结构到不同分层存储节点的迁移。类似地,控制平面234可以检测何时某些分层存储节点不能跟上针对分层数据结构的特定副本群组的访问请求,并且可以提供额外的分层存储节点以水平扩展副本群组以更好地满足访问请求需求。

分层存储节点240可以维护和处置对目录存储服务220中的分层存储节点的访问。图3是示出根据一些实施方案的分层存储节点的框图。分层存储节点300可以实施请求处置器310以处理访问请求并且将适当的指令或请求传递到其它组件,例如存储引擎340、事务日志接口350或存档接口360。举例来说,访问请求处置器310可以解释各种请求根据程序接口格式化,例如应用程序编程接口(api),如下文关于图6到11所论述的接口600。访问请求可以包括前述图中描述的各种请求以及其它类型的请求(其可以包括或嵌入下文图6到11中描述的请求或操作),例如各种访问请求。在分层数据结构中创建、更新、附接、分离、删除和查询节点,以及访问请求以定义、填充、发现和查询分层数据结构节点属性的本地索引(可能强一致并且作为分层数据结构的一部分或单独维护)。

在各种实施方案中,存储引擎340可以是存储引擎,其被配置成当数据存储在当前分层数据结构存储区320和历史分层数据结构存储区330(例如,用于以秘钥值存储格式维护的数据的秘钥值存储引擎、用于以关系存储格式维护的数据的关系数据存储引擎,等等)中时与数据的结构或格式交互,所述数据可以根据下文关于图4a所论述的模型来维护。在一些实施方案中,当前分层数据结构存储区320可以部分或完全在存储器或其它快速访问存储装置(例如随机访问存储器装置(ram))中实施,并且利用基于块的永久存储装置来存储历史分层数据结构330,包括磁盘或固态驱动器。在一些实施方案中,可以实施高速缓存技术,使得频繁访问的数据部分(例如频繁访问当前分层数据结构的部分)维护在存储器组件中,而其它部分维护在基于块的永久存储组件中。分层存储节点300可以操作用于分层数据结构的多租户存储,使得代表不同客户端、账户、客户等维护的不同分层数据结构可以维护在当前分层数据结构存储区320和当前分层数据结构存储区330中。举例来说,针对存储在分层存储节点300处的不同分层数据结构,分层存储节点300可以参与具有不同分层存储节点的不同副本群组。

根据下文结合图5到11论述的各种技术,事务日志接口350可以提供与对应于存储在用于分层数据结构的事务日志存储区250中的分层数据结构的日志交互(例如,验证事务)的能力。类似地,存档接口360可以被实施成检索存档的事务或快照以服务于对分层数据结构的历史改变的访问请求、历史查询或需要分层数据结构的比历史分层数据结构存储区中维护的版本更旧的版本的其它访问请求。

回到图2,事务日志存储区250可以提供容错、高性能、永久的日志发布服务。事务日志存储区250可以用作基本上一致的分布式应用程序(例如数据库、秘钥值存储和锁定管理器)的提交日志,并且如图2所示,目录存储服务220提供分层数据存储区。事务日志存储区250可以提供强一致性保证并且支持提交记录之间的约束,以实施例如重复数据删除、排序和读写冲突检测的特征。举例来说,在在下文的图5、6、8、9和11中所示的各种请求中,事务日志存储区250可以通过检查提议的事务是否与其它提交的事务冲突来确定是否提交对分层数据结构的改变(例如,写入请求和其它修改)。此类特征可以在分层数据结构上提供细粒度锁定模型(例如,仅可以锁定受事务之间的冲突影响的分层数据结构的那些部分)。事务日志存储区可以为每个分层数据结构维护单独的日志记录或日志记录链,用作状态分层数据结构随时间的变化的权威定义。可以根据事务序列号对事务进行排序,事务序列号可以单调递增以提及相应时间点的分层数据结构的状态。注意,在一些实施方案中,事务日志存储区250可以是单独的基于网络的存储服务,其被实施为目录存储服务220外部的提供商网络250的一部分。

存档管理236可以利用存储在事务日志存储区250中的相应事务日志中的不同分层数据结构存储的事务,以在存档存储服务270中的不同时间点生成和存储分层数据结构的快照。举例来说,存档管理可以确定何时应捕获分层数据结构的快照、在存档存储服务270中提供适当的存储位置,并且指示存档工作者节点(未示出)执行读取、写入和其它操作以生成和放置快照在存档存储服务270中。类似地,档案管理236可以指示将个别日志记录/事务和/或日志记录和事务群组的复制和存储作为档案存储服务270中的分层数据结构的存档事务日志的一部分进行存储。

一般而言,客户端210可以涵盖可配置成经由网络260向提供商网络200提交基于网络的服务请求的任何类型的客户端,包括对目录服务的请求(例如,创建或修改分层数据结构以存储在目录存储服务220中的请求,等)。举例来说,给定客户端210可以包括合适版本的web浏览器,或者可以包括插件模块或其它类型的代码模块,其被配置成作为web浏览器提供的执行环境的扩展或在其内执行。或者,客户端210可以涵盖例如数据库应用程序(或其用户接口)、媒体应用程序、办公室应用程序或可以利用永久存储资源来存储和/或访问一个或多个分层数据结构以执行如组织管理、身份管理或权限/授权管理等技术的任何其它应用程序。在一些实施方案中,此类应用程序可以包括足够的协议支持(例如,用于适当版本的超文本传输协议(http)),用于生成和处理基于网络的服务请求,而不必实施对所有类型的基于网络的数据的完全浏览器支持。也就是说,客户端210可以是被配置成直接与基于网络的服务平台200交互的应用程序。在一些实施方案中,客户端210可以被配置成根据代表性状态转移(rest)风格的基于网络的服务架构、基于文档或消息的基于网络的服务架构,或其它合适的基于网络的服务架构来生成基于网络的服务请求。

在一些实施方案中,客户端210可以被配置成以对那些应用程序透明的方式向其它应用程序提供对基于网络的服务的访问。举例来说,客户端210可以被配置成与操作系统或文件系统集成,以根据本文描述的存储模型的合适变体提供存储。然而,操作系统或文件系统可以向应用程序提供不同的存储接口,例如文件、目录和/或文件夹的传统文件系统分层结构。在此类实施方案中,可能不需要修改应用程序以利用存储系统服务模型。相反,与提供商网络200介接的细节可以由客户端210和操作系统或文件系统代表在操作系统环境内执行的应用程序来协调。

客户端210可以经由网络260将基于网络的服务请求(例如,针对目录存储服务220中的分层数据结构的访问请求)传送到基于网络的服务平台200并且从基于网络的服务平台200接收响应。在各种实施方案中,网络260可以包括在客户端210与平台200之间建立基于网络的通信所必需的网络硬件和协议的任何合适组合。举例来说,网络260通常可以包括共同实施因特网的各种电信网络和服务提供商。网络260还可以包括专用网络,例如局域网(lan)或广域网(wan)以及公共或专用无线网络。举例来说,给定客户端210和基于网络的服务平台200可以分别在具有其自己的内部网络的企业内提供。在此类实施方案中,网络260可以包括硬件(例如,调制解调器、路由器、交换机、负载平衡器、代理服务器等)和软件(例如,协议栈、计费软件、防火墙/安全软件等)。在给定客户端210与因特网之间以及因特网与基于网络的服务平台200之间建立联网链路。注意,在一些实施方案中,客户端210可以使用专用网络而非公共因特网与基于网络的服务平台200进行通信。

可以按不同方式存储、管理和/或表示不同类型的分层数据结构。图4a是示出根据一些实施方案的用于提供版本化分层数据结构的分层数据存储区的数据模型的一个示例的框图。节点可以是分层数据结构的基本元件,例如目录结构410a或410n,并且可以在图4a所示的图形中用圆圈或正方形表示(例如,节点400、401、402、403、404、405、406、407和421)。节点可以具有全局唯一识别符(guid)、零个或多个属性(键,值对),以及到其它节点的零个或多个链路。在一些实施方案中,目录可以是一种类型的节点,其具有到其它节点(目录或资源)的零个或多个子链路。在一些实施方案中,目录节点可以具有零个或一个父目录节点,这意味着目录节点和链路定义树结构。在图4a中,节点401是目录节点的示例。节点400可以是根节点,其是逻辑根多目录结构410并且可以对目录存储服务220的客户端不可见。资源节点(由正方形表示,例如资源节点404、405、406和407)可以是目录结构410中的叶节点。资源节点可以具有唯一的外部id(例如,指定的客户端)和客户端定义的属性。资源节点可以具有多个父节点(这将允许一些分层数据结构被配置成有向无环图(dag)。图4中的节点405是资源节点的示例,并且它具有两个父节点(节点402和403)。

在一些实施方案中,可以实施多种类型的资源节点。举例来说,在一些实施方案中,策略节点可以是具有两个用户定义的属性的资源节点类型:策略类型和策略文档(例如,描述应用于适用节点的策略)。举例来说,图4a中的资源节点406可以是策略资源节点的示例。另一种类型的资源节点可以是索引资源节点。举例来说,索引资源节点是子节点中的节点的各种属性值的索引以及索引节点所附接的目录节点的其它后代节点。举例来说,如果资源节点407是索引节点,则索引节点407可以为子节点402和403以及后代节点404、405和406的属性提供索引节点。

在一些实施方案中,链路可以是定义两个节点之间的关系的两个节点之间的有向边缘。可能存在许多类型的链路,例如客户端可见链路类型和用于内部操作实施的另一种链路类型。在一些实施方案中,子链路类型可以在其连接的节点之间创建父子关系。举例来说,子链路'bb'连接节点401和节点403。子链路可以定义目录结构410的分层结构。可以命名子链路以便定义链路针对的节点的路径。另一种类型的客户端可见链路可以是附接链路。附接链路可以将资源节点(例如策略资源节点或索引资源节点)应用于另一资源节点或目录节点。附接链路可以不定义目录结构410的分层结构。举例来说,附接链路'xx'将存储在策略资源节点406中的策略属性应用于目录节点402。节点可以具有多个附件。在一些实施方案中,可以实施一些附件约束,例如限制任何给定策略类型的不多于一个策略资源节点可以附接到同一节点。在一些实施方案中,也可以实施非客户端可见类型的链路或隐含链路类型,即反向链路。反向链路可以用于优化目录结构410的遍历,以用于例如资源节点查找(例如,策略查找)的公共操作。目录存储服务220可以在子链路和附接链路的相反方向上维护反向链路。

在各种实施方案中,可以通过描述如何从逻辑根节点400开始到达节点的路径名来识别和找到目录结构410中的节点,从标记为“/”的链路开始并且跟随由子路径分隔符“/”分隔的子链路,直到到达所需节点。举例来说,可以使用路径:“/directorya/aa/dd”来识别节点405。由于一些节点可以是多个目录节点的子节点,因此多个路径可以识别例如,以下路径也可以用于识别节点405:“/directorya/bb/ee”。由于目录结构410可以是节点的集合,其边界由集合中的那些节点的层级定义(例如,所得到的分层数据结构,例如由节点之间的链路创建的树或dag)。以此方式,目录结构410可以表示单独的、独立的或部分独立的组织。

为了将所示目录结构存储在当前分层数据结构存储区320和历史分层数据结构存储区330中,在一些实施方案中,所描述的节点、链路属性等可以在资源描述框架(rdf)数据之后建模。为了维护分层数据结构的多个版本,还可以包括版本控制信息以表示数据如何随时间改变。rdf数据可以被构造为(主题、谓词、对象)元组。当涵盖其它版本信息时,此结构可能变为:(主题、谓词、对象、版本、前一版本)。为了表示基于rdf的分层数据结构,可能存在多种类型的rdf谓词。在一些实施方案中,一种类型的rdf谓词可以表示分层数据结构的链路,而另一种类型的rdf谓词可以表示分层数据结构的属性。不同类型的谓词可以不同地表示分层数据结构。链路谓词可以在两个节点之间,而属性谓词可以在节点与值之间。由于单个节点可能参与同一类型的多个谓词,但具有不同的值,因此谓词可以按公共前缀开头,并以一些其它类型或命名信息结束以帮助查找。举例来说,谓词的元组中的版本条目可以是创建链路或属性的逻辑时间戳(例如,事务序列号),因为对分层数据结构的所有改变可以利用由事务提供的事务解析过程。日志存储250可以由事务日志存储区250分配有序逻辑时间戳。

如上文在图3中所指出,分层存储节点可以维护分层数据结构的当前版本和分层数据结构的过去版本。在至少一些实施方案中,可以为每个分层数据结构维护不同的相应表,一个表存储当前版本的数据,例如图4b中的当前版本表450,另一表存储用于存储前一版本的不可变记录,例如图4c中的前一版本表460。使用图4a中的示例目录结构410a,表450和表460可以示出当前和前一版本表的内容。为了便于阅读,所述表显示guid_401、guid_402等,而不显示guid值。虽然谓词名称可以显示为字符串,然而存储区中的实际表示可以使用比字符串表示更紧凑的二进制表示。当前版本表450可以存储表中每行的最新版本数据,并且前一版本列中的值可以将索引提供到前一版本表460中,以便定位所述行的先前值。在前一版本表460中,可以将当前版本额外到谓词,以便可以对其进行筛选。前一版本表460中的前一版本列可以允许存储引擎定位较旧版本,进一步回到逻辑时间以执行各种访问请求,例如在指定时间点对分层数据结构进行操作的访问请求。注意,虽然表450和460的结构可以显示为关系表,然而此类说明不是限制性的。举例来说,如上所述,当前版本分层数据结构存储区320和历史分层数据结构存储区330可以是非关系的密钥值存储,其中密钥由主题和谓词值的串联形成,并且其中值可以是由所示的其余列值的串联形成。举例来说,表450中的第一行可以逻辑地表示为以下<秘钥,值>对:<guid_401+link.child.aa,guid_402+ver_1+无>。

在各种实施方案中,可以访问表450和460中的一个或两个以执行各种操作。举例来说,访问请求可以指定查询:“查找id为guid_401的节点的所有子节点从currentversion中选择guid_401.child*”或查询:“沿着到根的所有路径查找id是guid_405的资源节点的所有策略。为了服务于此类查询,可以沿父链路执行深度优先遍历。在沿着到根路径的每个节点处,可以执行以下内部查询:内部查询1:“查找节点是否具有策略:从currentversion中选择guid_405.link.haspolicy*”;内部查询2:“如果节点具有在内部查询1中传回的策略,使用链路中的值从策略节点获取策略文档值:从currentversion中选择guid_406.link.policydoc”;内部查询3:“查找当前节点的所有父节点并且对于每个父节点执行内部查询1到3,直到到达目录结构的根目录。请注意,先前的示例不旨在限制关于表450和460可以表达或处理查询的格式、结构、语法或其它方式。

图5是示出根据一些实施方案的使用单独的事务日志存储区来为版本化分层数据结构提供一致存储的框图。例如客户端510a、510b和510c的多个客户端可以同时执行对分层数据结构的各种访问请求,例如各种写入请求512a、512b、512c。在至少一些实施方案中,副本群组520可以包括多个存储节点,例如分层存储节点522a、522b和522c,其维护可用于服务于来自客户端510的各种访问请求的分层数据结构的版本。举例来说,客户端510可以根据路由模式向分层存储节点522提交不同的写入请求512,所述路由模式可以根据负载平衡方案将来自每个客户端的访问请求引导到副本群组520中的不同存储节点。在接收到请求时,每个分层存储节点522可以在存储节点处对分层数据结构的当前版本执行各种操作,接着将写入524提供给事务日志存储区210以用于对目录结构日志530的提交,包括例如通过执行写入请求、写入请求本身以及识别存储节点522处的分层数据结构的当前版本的时间点的其它指示的事务序列号来影响或访问数据的各种信息。提交526或冲突的指示可以提供到相应的存储节点522。对于那些提交的写入,可以读取目录结构日志(如下文关于图13所论述的),并且将提交的写入应用532到在存储节点522处维护的分层数据结构的相应版本。

在一些实施方案中,档案管理236还可以读取目录结构日志530以检索写入534以作为存档的事务或快照进行传输。存档管理236接着可以周期性地或非周期性地更新542存档存储服务270中的存档日志540,并且生成同时送新快照552以作为存档快照550的一部分进行维护。以此方式,可以在任何时间点重新创建分层数据结构,例如通过将快照加载到存储节点上并且应用来自存档日志540以达到某个事务序列号,使得存储号处的分层数据结构的版本与指定的时间点一致。

图6是示出根据一些实施方案的利用事务日志存储区的具有可串行化隔离的访问请求的处理的序列图。分层存储节点620和图7到11中论述的其它存储节点可以实施接口600以处置来自客户端的请求。在各种实施方案中,接口600可以是编程接口(api),其可以由命令行、图形用户接口或客户端610处的其它接口控制/生成组件调用。可串行化访问请求630可以是请求,例如改变分层数据存储区中的数据的访问请求,或者执行从分层数据存储区的整个分布式数据存储区中的一致版本读取数据的请求。请求630可以包括执行的指定操作(例如,读或写操作)。一旦接收到,分层存储节点620就可以访问分层数据结构的识别版本(例如,当前版本)并且确定要对分层数据结构进行的确切改变以执行操作,包括所访问(读取)和/或受影响(写入的)数据,例如读取或改变的节点、链路、属性等)。分层存储节点620接着可以构造冲突验证请求640以发送到事务日志存储区250以用于评估,包括被访问/受影响数据、分层存储节点620处的分层数据结构的数据,指定操作和最后应用的事务编号。

事务日志存储区250可以执行冲突分析以确定是否可以执行冲突验证请求640中的预期事务而不与事务日志中的已提交事务冲突。当在事务的完成和提交(例如,乐观并行)之前由另一事务改变事务的假定状态(例如,读取并且用于执行事务的数据)时,可能发生冲突事务。冲突验证指示650可以由事务日志存储区210提供给分层存储节点620,以指示事务是否已提交(或者是否冲突并因此被拒绝)。分层存储节点620可以传递提交确认(以及指示事务的事务序列号的事务编号令牌)或者请求的例外状况或拒绝660。

图7是示出根据一些实施方案的利用维护于存储节点处的分层数据结构的版本处理具有快照隔离的访问请求的序列图。对于快照读取请求,不执行对事务日志存储区的访问。相反,访问最新或当前版本的分层数据结构以服务读取请求。客户端710可以将快照读取请求730发送到分层存储节点720。分层存储节点720可以识别所述请求是快照读取,并且继续利用分层数据结构的当前版本来处理所述请求。接着,分层存储节点720可以发送指示读取请求的结果的读取响应740。

图8是示出根据一些实施方案的利用事务日志存储区处理具有可串行化隔离的条件性访问请求的序列图。在某些情况下,可以在满足分层数据存储区的条件时预测访问请求。举例来说,预期条件可以识别存储节点上的分层数据结构已经进展的特定时间点(逻辑时间)或点(例如,如果最后应用的序列号大于x)。在另一示例中,预期条件可以基于分层数据结构的节点、属性等的预期数据值。预期条件可以与指定操作(例如,读取或写入)一起被包括作为发送到分层存储节点820的条件性访问请求830的一部分。分层存储节点820可以评估条件,并且如果满足,则通过向事务日志存储区250发送冲突验证请求840(包括在分层存储节点820处的分层数据结构的访问数据、指定操作和最后应用的事务编号),则继续处理类似于可串行化的访问请求(如上文在图6中所论述)的访问请求。事务日志存储区250接着可以提交或拒绝冲突验证指示850中的冲突事务。分层存储节点820可以发送访问请求响应860,指示请求的确认或拒绝以及事务编号令牌。还可以发送响应860,指示条件失败(例如,分层数据结构不满足条件)。

图9是示出根据一些实施方案的利用事务日志存储区处理具有可串行化隔离的批访问请求的序列图。在一些场景中,可以执行相同或不同类型的多个操作(例如,读取操作、写入操作或读取和写入操作)以对分层数据结构进行大规模改变(例如,移动以重新平衡或重新排列子树在分层数据结构内)。如图9所示,客户端910可以发送具有指定操作的批访问请求930以一起提交或失败。举例来说,批访问请求930可以包括在分层数据结构中创建不同节点的多个请求。在至少一些实施方案中,批访问请求930中的操作的执行可以取决于批访问请求中的另一操作的成功执行以便执行。举例来说,批访问请求930可以包括创建三个节点,接着将这三个节点连接或链路在一起的其它操作的操作。额外操作可能取决于创建操作的成功(如果失败则额外操作也不会成功)。在另一示例中,作为一个或多个操作的结果而生成的数据(例如,关于节点的创建的识别符或其它元数据)可以用作其它操作的输入。可以包括依赖于批处理请求中的其它操作的结果的各种其它操作,因此先前的示例不旨在是限制性的。分层存储节点920可以提交冲突验证请求940,所述冲突验证请求包括多个操作、受影响/访问的数据(例如,资源节点、目录节点、链路等),以及用于分层数据节点920处的分层数据结构的当前版本的最后应用的事务编号。事务日志存储区250可以对整个操作集执行冲突验证,并且提交或拒绝冲突验证指示950中的整个操作集。分层存储节点920接着可以向客户端910提供批响应960,以指示批处理操作是否已被确认为已提交(包括事务编号令牌)或被拒绝。

图10是示出根据一些实施方案的利用事务日志存储区和事务状态令牌处理具有可串行化隔离的客户端指定的事务请求的序列图。可以执行客户端指定的事务,而不是将类似操作分组为单个批处理,以便客户端可以作为同一事务的一部分执行多个访问请求,而不必提交请求到结束。以此方式,可以考虑各种可能的或条件的场景,使得如果并非所有的访问请求都按照期望执行,则可以中止(未示出)事务。此外,事务状态可以从客户端递送到分层存储节点,使得没有一个存储节点必须处置客户端指定的事务(例如,没有粘性会话),但工作可以在多个分层存储节点之间传播。举例来说,客户端1010可以发送请求1040以开始包括多个初始操作的事务到分层存储节点1020。分层存储节点1020可以执行初始操作并且以事务阶段1050的形式传回结果。

接着,客户端1010可以评估事务状态1050以确定后续步骤。举例来说,事务状态1050可以包括从分层数据结构读取的数据,其可以是或可以不是客户端1010的预期或期望状态。如果是,则客户端1060可以继续提交事务并且可以包括提交中的额外操作事务请求1060,其包括事务状态令牌(从事务状态信息1050生成)和额外操作(如果需要)。因为事务状态令牌涵盖来自另一存储节点以执行事务的所有必要信息,所以可以实施对均匀分布的请求的负载平衡技术,并且可以将提交事务请求1060引导到分层存储节点1030。接着,分层存储节点1030可以生成冲突验证请求1070并且将所述冲突验证请求发送到事务日志存储区250以进行冲突评估。事务状态令牌可以包括在分层存储节点1020处开始事务时的分层数据结构的事务序列号,并且可以包括冲突验证请求中的事务开始号(例如,事务序列号)。接着,事务存储日志210可以向分层存储节点1030发送冲突验证指示1080,所述分层存储节点又可以确认提交的事务或者响应1090中是否触发了例外状况。在一些实施方案中,可以包括事务编号令牌以指示已提交的事务的序列号。

图11是示出根据一些实施方案的利用页码标注令牌处理具有页码标注结果递送的访问请求的序列图。在某些情况下,查询或其它访问请求生成的结果过大,无法在单个响应消息中发送。在客户端检索数据的同时,不是将单个分层存储节点与某些客户端捆绑在一起以便在存储节点处维护状态,而是可以利用页码标注技术以允许客户端从任何存储节点检索结果而不需要与单个存储节点的粘性会话。举例来说,如图11所示,客户端110经由接口600发送读取请求1130,这导致大数据集(例如,用于检索所有男性用户节点的查询)。代替提供要求分层存储节点1120空闲或维持结果处理状态的读取响应流,读取响应1140可以包括初始结果和结果页码标注令牌。结果页码标注令牌可以指示要检索的剩余结果以及如何检索它们。在一些实施方案中,客户端可以修改结果页码标注令牌以改变用于执行读取操作的一致性和/或隔离级别,使得可以根据由于一致性和/或隔离级别的改变而访问的改变的版本来修改剩余的结果。接着,客户端1110可以将具有结果页码标注令牌的另一读取请求1150发送到分层存储节点1120或另一分层存储节点。接着,分层存储节点1120可以基于结果页码标注令牌中提供的信息识别额外结果以在后续响应1160中提供并且包括它们。可以执行这种技术许多迭代,直到将整个结果集提供给客户端110。

图2到11中论述的目录存储服务、访问请求和其它技术提供了分布式数据存储区的示例,所述分布式数据存储区为客户端存储分层数据结构,并且提供对不同场景中的分层数据结构的多个版本的访问。然而,各种其它类型的分布式存储系统可以实施分层数据结构的多个版本,其可以利用可以提供分布式数据存储区的其它数目的组件类型。图12是示出根据一些实施方案的用于实施版本化分层数据结构以服务于访问请求的方法和技术的高阶流程图。包括上述实施方案的各种不同的分布式数据存储区可以实施下文描述的技术。

如1210所示,可以维护与分布式数据存储区中的分层数据结构的事务日志一致的分层数据结构的版本。举例来说,不同数目的存储节点可以独立地维护分层数据结构的本地副本或副本,作为副本或保护群组的一部分。每个存储节点可以维护分层数据结构的相同或不同版本。在一些实施方案中,存储节点可以实施最终一致的一致性模型,所述模型保证每个存储节点最终可以与在任何其它存储节点处执行的分层数据结构的更新一致。举例来说,分层数据结构的事务日志可以充当一致性机制,排序和隔离事务,以便不允许冲突事务(例如,利用乐观并行)。在一些实施方案中,被指示为不冲突的事务被提交到事务日志并且被报告为提交存储节点的提交点。在一些实施方案中,存储节点接着可以应用事务,而在其它实施方案中,存储节点可以在稍后的时间应用事务,如下文关于图13所论述的。

随时间推移,存储节点可以获取与关于事务日志的不同时间点(例如,逻辑时间)相对应的许多不同版本。因此,当接收到针对分层数据结构的访问请求时,如1220所指示,可能需要选择其中一个版本来处理访问请求。可以接收许多不同类型的访问请求。举例来说,一些访问请求可以是查询或其它读取请求,以获得由分层数据结构存储或表示的某些数据、属性、值或其它信息(例如,可以通过利用索引属性来执行的查询或用来确定目录特定节点(例如资源)的路径的查询)。如上文关于图6到11所示,访问请求可以是条件性的或批处理,或者可以指定在处理访问请求时要执行的特定隔离级别(例如,可串行化或快照)。访问请求可以明确地(例如,通过包括事务序列号或令牌)或隐式地基于访问请求的类型来识别要利用的分层数据结构的版本(例如,快照读取利用存储节点处的当前版本)。因此,如1230所指示,可以识别用于服务于请求的分层数据结构的一个版本。

所述请求可以指示在处理请求时要执行的隔离级别和/或一致性级别,如1240所示。举例来说,请求的类型可以指示快照隔离(例如,通过请求特定种类的查询或查找操作)。如果指示了快照隔离,则如从1270的肯定退出所示,可以利用所识别的分层数据结构的版本来服务于访问请求,而不调用事务日志。以此方式,可容忍过时(但仍然一致)数据的可能性很小的一些访问请求可能能够利用执行本地操作的高速度而无需进一步的网络通信。在至少一些实施方案中,可以在存储器中维护用于快照隔离请求的所识别的版本,以便对请求执行高速处理。在一些实施方案中,所述请求可以指示分层数据结构的相应部分的脏或不一致读取是可接受的,从而指示小于快照隔离的隔离级别。在一些实施方案中,所述请求可以指示提供与快照隔离不同的隔离级别的特定时间点(例如,通过包括事务序列号)。隔离和一致性以及一致性级别的各种组合可以由客户指定,因此先前的示例不旨在限制。

如从1240的否定退出所指示的,如果未指示快照隔离,则可以利用事务日志来强制执行可串行化隔离。注意,在一些实施方案中,请求可能需要显式地(或隐式地)调用适当的隔离级别,因此可能并非(如图13所示)没有指示快照隔离的访问请求总是用可串行化隔离来处理。如1210所指示,可以将基于访问请求的新事务提交给事务日志。举例来说,可以提供受影响的节点、对象或/和描述事务中的改变的其它信息,以便可以执行冲突检测。事务日志可以执行冲突检测分析以确定事务是否与已经提交的事务冲突。如果是,如1260的肯定退出所示,则可以向发送访问请求的客户端传回例外状况、拒绝或其它错误指示,如1280所示。在一些实施方案中,所述例外状况可以指示冲突(包括特定冲突的操作,例如对特定资源节点的更改)。然而,如果从1260的否定退出指示,事务不冲突,则为新事务提供已提交的指示。提交确认可以包括指示事务日志中的事务位置的序列号。作为服务请求的一部分,访问请求可以利用所识别的版本,如1270所指示。对于读取操作,这可以包括发送在所识别的版本中找到的数据。对于写操作,服务于访问请求可以包括提供写操作被提交的确认。

图13是示出根据一些实施方案的用于在存储节点处实施与分层数据结构的事务日志一致地维护分层数据结构的版本的方法和技术的高阶流程图。如1310处所示,在各种实施方案中,可以读取分层数据结构的事务日志。举例来说,可以从事务序列号开始执行对事务日志的访问请求,所述事务序列号识别应用于存储节点处的分层数据结构的当前版本的最新事务。如1320处所示,可以识别分层数据结构的未应用事务。举例来说,可以从事务日志中识别并获得最近提交的事务(例如,具有较高事务序列号)。

如在1330处所指示的,接着可以将所识别的事务应用于存储节点处的分层数据结构的当前版本。举例来说,事务可以描述作为事务的一部分执行的改变(例如添加、移除、移动或修改资源、目录、属性、链路或分层数据结构的其它部分的操作)。可以更新秘钥值或维护/描述改变的对象的其它存储区中的对应条目以反映改变(例如,通过向对象添加额外属性、改变属性值、添加新属性等)。一旦所识别的改变完成,则在一些实施方案中,对应于所应用的事务的事务序列号接着可以被记录在元数据或指示分层数据结构的版本的其它信息中(例如,将存储的序列号增大到更高的事务序列号)。

如1340所指示,在一些实施方案中,可以更新分层数据结构的历史版本信息以描述作为分层事务的结果而应用的改变。以此方式,可以生成、访问、推导、重建等等分层数据结构的前一版本(在应用事务之前)。举例来说,如上文关于图3和4所论述的那样,用于分层数据结构的历史数据存储可以表示为密钥值存储,其存储存储在分层数据结构的当前版本中的对象的前一版本。前一版本对象可以是由事务改变的对象的副本以及版本号,以识别相对于当前对象版本的先前对象版本。先前对象版本的索引、链路或索引值可以包括在当前对象版本中。类似地,可以跟踪针对早于前一个对象版本的对象版本(创建一系列对象版本)的索引、链路或索引,可以到达原始版本。

如从1340的循环向后箭头(以及从1320的否定退出)所示,可以多次评估事务日志以确保维护于存储节点上的分层数据结构的版本最终与事务日志一致。举例来说,事务日志读取可以周期性地执行,或者在事件触发时执行(例如,在存储节点处处理多个访问请求)。

在各种实施方案中,本文描述的方法可以通过硬件和软件的任何组合来实施。举例来说,在一个实施方案中,所述方法可以由计算机系统(例如,如图14中的计算机系统)实施,所述计算机系统包括执行存储在联接到处理器的计算机可读存储介质上的程序指令的一个或多个处理器。程序指令可以被配置成实施本文描述的功能(例如,实施本文描述的目录存储服务和/或存储服务/系统的各种服务器和其它组件的功能)。如附图中所示和本文描述的各种方法代表方法的示例实施方案。可以改变任何方法的顺序,并且可以添加、重新排序、组合、省略、修改等各种元件。

另外,可以鉴于以下条款来描述本公开的实施方案:

1.一种系统,所述系统包括:

多个存储节点,所述存储节点包括处理器和存储器,存储与分层数据结构的事务日志一致的分层数据结构的相应版本;

事务日志存储区,所述事务日志存储区维护分层数据结构的事务日志;

相应存储节点,所述存储节点被配置成:

从客户端接收作为分层数据结构的一部分存储的指定数据的读取请求;

识别维护于存储节点处的分层数据结构的相应版本中的一者,以便服务于读取请求;

访问存储节点处的一个或多个位置,所述位置存储包括在所识别的版本中的指定数据以获得指定数据;以及

将所识别版本中包括的指定数据传回给客户端。

2.根据条款1所述的系统,其中所述存储节点中的相应存储节点还被配置成:

从另一客户端接收针对分层数据结构的写入请求;

识别维护于存储节点处的分层数据结构的相应版本中的一者,以便服务于读取请求;

对存储节点处的分层数据结构的识别版本执行写入请求;

基于写入请求将事务发送到事务日志存储区以用于分层数据结构,其中事务指示所识别的分层数据结构的版本;以及

响应于从事务日志存储区接收到指示事务被提交到分层数据结构的事务日志的指示,将写入请求的确认发送到另一客户端。

3.如条款2所述的系统,其中所述存储节点中的相应存储节点还被配置成:

从事务日志存储区中获取事务;

将事务应用于维护于存储节点处的分层数据结构的当前版本;以及

更新维护于存储节点处的分层数据结构的历史版本数据,以描述由于事务而应用于分层数据结构的变化。

4.如条款1所述的系统,其中所述系统是基于网络的目录服务,其中所述客户端是所述基于网络的目录服务的客户端,其中所述存储节点是存储一个或多个其它分层数据结构多租户,代表基于网络的目录服务的一个或多个其它客户端,并且其中分层数据结构的所识别版本被维护在存储节点的存储器中。

5.一种方法,所述方法包括:

由一个或多个计算装置执行:

接收针对作为来自客户端的分布式数据存储区的一部分而维护的分层数据结构的访问请求;

识别用于服务于访问请求的多个版本的分层数据结构中的一个,其中在分布式数据存储区中维护与分层数据结构的事务日志一致的分层数据结构的多个版本,所述分层数据结构描述了对分层数据结构;以及

利用分层数据结构的所识别版本来服务于访问请求。

6.如条款5所述的方法,

其中访问请求的接收、识别和服务由存储分布式数据存储区中的分层数据结构的版本的多个存储节点中的一者执行;

其中所述方法还包括:

在收到访问请求之前:

所述一个存储节点从所述事务日志中读取一个或多个事务,其中所述事务日志的一个或多个事务由所述多个存储节点中的不同的一个提交给所述事务日志;

所述一个存储节点将所述一个或多个事务应用于维护于所述一个存储节点处的所述分层数据结构的当前版本;以及

其中所识别的分层数据结构的版本包括一个或多个事务。

7.如条款5所述的方法,

其中所述方法还包括基于访问请求向事务日志发送用于分层数据结构的事务,其中事务指示分层数据结构的识别版本;

其中响应于从事务日志接收到为分层数据结构提交事务的指示,执行服务于访问请求;以及

其中服务于访问请求包括向客户端发送访问请求的确认。

8.如条款7所述的方法,其中访问请求指示执行关于分层数据结构的不同相应节点执行的多个操作,其中发送到事务日志的事务包括多个操作,并且其中指示提交事务表明提交了多个操作。

9.如条款8所述的方法,其中所述多个操作中的至少一个操作取决于要执行的访问请求中的所述多个操作中的另一操作的成功。

10.如条款5所述的方法,其中所述访问请求包括用于处理所述访问请求的指定隔离级别或指定一致性级别中的至少一个,其中根据所述至少一个指定隔离级别执行所述访问请求的服务或指定的一致性级别。

11.如条款5所述的方法,

其中访问请求的接收、识别和服务由存储分布式数据存储区中的分层数据结构的版本的多个存储节点中的一者执行;

其中访问请求是读取请求;

其中服务于访问请求包括从一个存储节点向客户端发送为服务读取请求而生成的结果的一部分和页码标注令牌,其中页码标注令牌指示要发送到客户端的剩余结果;并且

其中所述方法还包括:

在另一存储节点接收来自客户端的另一读取请求,其中另一读取请求包括页码标注令牌;

响应于在不同存储节点处接收到另一读取请求,将另一读取请求的剩余结果发送到客户端,如页码标注令牌所示。

12.如条款5所述的方法,

其中访问请求指定用于处理访问请求的快照隔离;

其中所述方法还包括进一步包括

确定根据快照隔离处理访问请求;并且

其中响应于确定根据快照隔离处理访问请求,执行服务于访问请求。

13.如条款5所述的方法,

其中访问请求的接收、识别和服务由存储分布式数据存储区中的分层数据结构的版本的多个存储节点中的一者执行;

其中访问请求指示事务的开始和一个或多个操作;

其中服务于访问请求包括从一个存储节点向客户端发送执行一个或多个操作和事务状态令牌,其中事务状态令牌指示由于以下结果应用于所识别的分层数据结构的版本的变化。一个或多个操作;以及

其中所述方法还包括:

在另一存储节点处接收另一访问请求,所述请求包括作为来自客户端的事务的一部分执行的一个或多个额外操作,其中另一访问请求包括事务状态令牌,其中另一访问请求指示所述事务要提交;

响应于在不同的存储节点处接收到另一访问请求:

根据事务状态令牌中指示的变化,修改不同存储节点处的分层数据结构的识别版本;以及

执行关于分层数据结构的修改版本的一个或多个额外操作;

将事务发送到事务日志以获取分层数据结构;

从事务日志接收到为分层数据结构提交事务的指示;以及

响应于从事务日志接收到提交事务的指示,向客户端发送访问请求的确认。

14.一种存储程序指令的非暂时性计算机可读存储介质,所述程序指令在由一个或多个计算装置执行时使得所述一个或多个计算装置实施:

在分布式数据存储区中的多个存储节点处维护与分层数据结构的事务日志一致的分层数据结构的相应版本,所述分层数据结构描述对分层数据结构的提交的改变;

在一个存储节点处接收针对分层数据结构的访问请求;

识别维护于一个存储节点处的用于服务于访问请求的分层数据结构的相应版本中的一者;以及

利用所识别的分层数据结构的版本来服务于访问请求。

15.如条款14所述的非暂时性计算机可读存储介质,

其中所述程序指令使所述一个或多个计算装置进一步实施基于所述访问请求从所述存储节点向所述分层数据结构的事务日志发送事务,其中所述事务指示所识别的所述分层数据结构的版本;

其中响应于从事务日志接收到为分层数据结构提交事务的指示,执行服务于访问请求;以及

其中在服务于访问请求时,程序指令使一个或多个计算装置实施发送访问请求的确认。

16.如条款15所述的非暂时性计算机可读存储介质,其中所述程序指令使得所述一个或多个计算装置进一步实施:

分别在多个存储节点处获得事务;

将所述事务应用于维护于存储节点处的分层数据结构的相应当前版本;以及

更新维护于存储节点处的分层数据结构的相应历史版本数据,以描述作为事务的结果应用于分层数据结构的变化。

17.如条款14所述的非暂时性计算机可读存储介质,其中所述程序指令使得所述一个或多个计算装置进一步实施:

将事务日志复制到存储在远程数据存储中的事务日志的存档版本;以及

将来自远程事务日志的一个或多个事务应用于多个存储节点中的一者处的分层数据结构的版本,以在指定的时间点生成分层数据结构的版本。

18.如条款15的非暂时性计算机可读存储介质,

其中访问请求包括分层数据结构的预期条件;

其中程序指令使一个或多个计算装置进一步实施关于所识别的分层数据结构的版本评估预期条件,以确定满足预期条件;

其中响应于确定满足预期条件,执行将事务发送到事务日志,其中拒绝包括未确定满足的预期条件的访问请求。

19.如条款14所述的非暂时性计算机可读存储介质,其中访问请求包括读取请求,其中所识别的版本不是分层数据结构的当前版本,并且其中在服务于访问请求时,所述程序指令使得一个或多个计算装置实施访问分层数据结构的历史版本数据以读取分层数据结构的一个或多个节点的前一版本。

20.如条款14所述的非暂时性计算机可读存储介质,其中分布式数据存储区是基于网络的存储服务,其为针对基于网络的存储服务的不同访问请求提供多个不同的服务级别协议,并且其中所述程序指令使所述一个或多个计算装置进一步实施根据为处理所述访问请求而识别的不同服务等级协议中的一者将所述访问请求路由到所述存储节点,其中所述存储节点被配置成根据所述访问请求处理所述访问请求。确定的服务水平协议。

图14是示出根据各种实施方案的被配置成实施提供版本化分层数据结构的分布式数据存储区的计算机系统以及上述各种其它系统、组件、服务或装置的框图。举例来说,在不同的实施方案中,计算机系统2000可以被配置成实施分层存储节点,所述分层存储节点维护分层数据结构的版本的组件或维护分层数据结构的事务日志的事务日志存储区。计算机系统2000可以是各种类型的装置中的任何一种,包括但不限于个人计算机系统、台式计算机、膝上型或笔记本计算机、大型计算机系统、手持式计算机、工作站、网络计算机、消费者装置、应用服务器、存储装置、电话、移动电话,或通常任何类型的计算装置。

计算机系统2000包括经由输入/输出(i/o)接口2030联接到系统存储器2020的一个或多个处理器2010(其中任何一个可包括多个核心,其可以是单线程或多线程)。计算机系统2000还包括联接到i/o接口2030的网络接口2040。在各种实施方案中,计算机系统2000可以是包括一个处理器2010的单处理器系统,或包括若干处理器2010的多处理器系统(例如,两个、四个、八个,或其它合适的数字)。处理器2010可以是能够执行指令的任何合适的处理器。举例来说,在各种实施方案中,处理器2010可以是实施各种指令集架构(isa)中的任何一种的通用或嵌入式处理器,例如x86、powerpc、sparc或mipsisa,或任何其它合适的isa。在多处理器系统中,处理器2010中的每一个可以共同但不是必须地实施相同的isa。计算机系统2000还包括一个或多个网络通信装置(例如,网络接口2040),用于通过通信网络(例如,因特网、lan等)与其它系统和/或组件通信。举例来说,在系统2000上执行的客户端应用程序可以使用网络接口2040来与在单个服务器上或在实施本文描述的目录存储系统的一个或多个组件的服务器集群上执行的服务器应用程序通信。在另一示例中,在计算机系统2000上执行的服务器应用程序的实例可以使用网络接口2040来与可以在其它计算机系统(例如,计算机系统2090)上实施的服务器应用程序(或另一服务器应用程序)的其它实例通信。

在所示实施方案中,计算机系统2000还包括一个或多个永久存储装置2060和/或一个或多个i/o装置2080。在各种实施方案中,永久存储装置2060可以对应于磁盘驱动器、磁带驱动器、固体状态存储器、其它大容量存储装置或任何其它永久存储装置。计算机系统2000(或在其上运行的分布式应用程序或操作系统)可以根据需要在永久存储装置2060中存储指令和/或数据,并且可以根据需要检索存储的指令和/或数据。举例来说,在一些实施方案中,计算机系统2000可以托管存储系统服务器节点,并且永久存储器2060可以包括附接到所述服务器节点的ssd。

计算机系统2000包括一个或多个系统存储器2020,所述系统存储器被配置成存储可由处理器2010访问的指令和数据。在各种实施方案中,系统存储器2020可以使用任何合适的存储器技术来实施(例如,缓存、静态随机访问存储器(sram)、dram、rdram、edoram、ddr10ram、同步动态ram(sdram)、rambusram、eeprom、非易失性/闪存型存储器或任何其它类型的存储器中的一个或多个)。系统存储器2020可以涵盖程序指令2025,所述程序指令可以由处理器2010执行以实施本文描述的方法和技术。在各种实施方案中,程序指令2025可以按平台本机二进制、任何解释语言(例如javatm字节代码)或任何其它语言(例如c/c++、javatm等)或其任何组合来编码。举例来说,在所示实施方案中,程序指令2025包括可执行以实施分层存储节点的功能的程序指令,所述分层存储节点维护分层数据结构的版本或维护分层数据结构的事务日志的事务日志存储区的组件。在一些实施方案中,程序指令2025可以实施多个单独的客户端、服务器节点和/或其它组件。

在一些实施方案中,程序指令2025可以包括可执行以实施操作系统(未示出)的指令,所述操作系统可以是各种操作系统中的任何操作系统,例如unix、linux、solaristm、macostm、windowstm等。任何或所有程序指令2025可以被提供为计算机程序产品或软件,其可以包括其上存储有可以用于对计算机系统(或其它电子装置)进行编程以执行根据各种实施方案的方法的指令的非暂时性计算机可读存储介质。非暂时性计算机可读存储介质可以包括用于以机器(例如,计算机)可读的形式(例如,软件、处理应用程序)存储信息的任何机构。一般而言,非暂时性计算机可访问介质可包括计算机可读存储介质或例如磁性或光学介质的存储介质,例如经由i/o接口联接到计算机系统2000的磁盘或dvd/目录存储服务220-rom。一些非暂时性计算机可读存储介质还可以包括任何易失性或非易失性介质,例如ram(例如sdram、ddrsdram、rdram、sram等)、rom等,其可以包括在计算机系统2000的一些实施方案中作为系统存储器2020或另一种类型的存储器。在其它实施方案中,可以使用经由例如网络和/或无线链路的通信介质传送的光学、声学或其它形式的传播信号(例如,载波、红外信号、数字信号等)来传送程序指令,例如,可以通过网络接口2040实施。

在一些实施方案中,系统存储器2020可以包括数据存储2045,其可以如本文所述进行配置。举例来说,本文描述的由本文描述的分层存储节点或事务日志存储区存储的信息可以在不同时间并且在各种实施方案中存储在数据存储2045中或者存储在一个或多个节点上的系统存储器2020的另一部分、永久存储器2060、和/或一个或多个远程存储装置2070上。通常,系统存储器2020(例如,系统存储器2020内的数据存储2045)、永久存储器2060和/或远程存储器2070可以存储数据块、数据块的副本、与数据块和/或其状态相关联的元数据、数据库配置信息和/或可用于实施本文描述的方法和技术的任何其它信息。

在一个实施方案中,i/o接口2030可以被配置成协调处理器2010、系统存储器2020与系统中的任何外围装置之间的i/o流量,包括通过网络接口2040或其它外围接口。在一些实施方案中,i/o接口2030可以执行任何必要的协议、定时或其它数据变换,以将来自一个组件(例如,系统存储器2020)的数据信号转换成适合于由另一组件(例如,处理器2010)使用的格式。在一些实施方案中,i/o接口2030可以包括对通过各种类型的外围总线连接的装置的支持,例如外围组件互连(pci)总线标准或通用串行总线(usb)标准的变体。在一些实施方案中,i/o接口2030的功能可以分成两个或更多个单独的组件,例如北桥和南桥。而且,在一些实施方案中,i/o接口2030的一些或所有功能,例如到系统存储器2020的接口,可以直接并入到处理器2010中。

网络接口2040可以被配置成允许数据在计算机系统2000和连接到网络的其它装置之间交换,例如其它计算机系统2090(其可以实施本文所述的实施方案)。另外,网络接口2040可以被配置成允许计算机系统2000与各种i/o装置2050和/或远程存储器2070之间的通信。在一些实施方案中,输入/输出装置2050可以包括一个或多个显示终端、键盘、键盘、触摸板、扫描装置、语音或光学识别装置,或适合于由一个或多个计算机系统2000输入或检索数据的任何其它装置。多个输入/输出装置2050可以存在于计算机系统2000中或者可以分布在包括计算机系统2000的分布式系统的节点的各种计算机系统2000上。在一些实施方案中,类似的输入/输出装置可以与计算机系统2000分离,并且可以通过有线或无线连接与包括计算机系统2000的分布式系统的一个或多个节点交互。网络接口2040可以共同支持一个或多个无线网络协议(例如,wi-fi/ieee802.11或另一无线网络标准)。然而,在各种实施方案中,网络接口2040可以支持经由任何合适的有线或无线通用数据网络的通信,例如其它类型的以太网网络。另外,网络接口2040可以支持经由例如模拟语音网络或数字光纤通信网络的电信/电话网络,经由例如光纤通道san的存储区域网络,或经由任何其它合适类型的网络和/或协议的通信。在各种实施方案中,计算机系统2000可包括比图14中所示的组件更多、更少或不同的组件(例如,显示器、视频卡、音频卡、外围装置、其它网络接口,例如atm接口、以太网接口、帧中继接口等)

注意,本文描述的任何分布式系统实施方案或其任何组件可以实施为一个或多个基于网络的服务。举例来说,数据库系统的数据库层内的数据库引擎头节点可以呈现数据库服务和/或其它类型的数据存储服务,其将本文描述的分布式存储系统用作客户端作为基于网络的服务。在一些实施方案中,基于网络的服务可以由设计用于支持网络上的可互操作的机器到机器交互的软件和/或硬件系统来实施。基于网络的服务可以具有以机器可处理格式描述的接口,例如web服务描述语言(wsdl)。其它系统可以按基于网络的服务的接口的描述所规定的方式与基于网络的服务交互。举例来说,基于网络的服务可以定义其它系统可以调用的各种操作,并且可以定义特定的应用程序编程接口(api),在请求各种操作时,可以期望其它系统可以遵循所述特定的应用程序编程接口。

在各种实施方案中,可以通过使用包括与基于网络的服务请求相关联的参数和/或数据的消息来请求或调用基于网络的服务。可以根据例如可扩展标记语言(xml)的特定标记语言来格式化此类消息,和/或可以使用例如简单对象访问协议(soap)的协议来封装此类消息。为了执行基于网络的服务请求,基于网络的服务客户端可以组装包括所述请求的消息并且将所述消息传送到与基于网络的服务相对应的可寻址端点(例如,统一资源定位符(url)),使用基于internet的应用层传输协议,例如超文本传输协议(http)。

在一些实施方案中,可以使用代表性状态转移(“restful”)技术而不是基于消息的技术来实施基于网络的服务。举例来说,可以通过http方法(例如put,get或delete)中包括的参数来调用根据restful技术实施的基于网络的服务,而不是封装在soap消息中。

如附图中所示和本文描述的各种方法代表方法的示例实施方案。这些方法可以手动、软件、硬件或其组合实施。可以改变任何方法的顺序,并且可以添加、重新排序、组合、省略、修改等各种元件。

尽管已经相当详细地描述了上述实施方案,但一旦完全理解上述公开内容,可以对本领域技术人员显而易见地做出许多变化和修改。旨在将以下权利要求解释为涵盖所有这些修改和变化,并且因此,以上描述被认为是说明性的而不是限制性的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1