具有数据库引擎和独立分布式存储服务的数据库系统的制作方法

文档序号:17236783发布日期:2019-03-30 08:23阅读:248来源:国知局
具有数据库引擎和独立分布式存储服务的数据库系统的制作方法

在一些情况下,软件堆栈的各种部件的分布可提供(或支持)容错 性(例如,通过复制)、较高耐久性、和较不昂贵的解决方案(例如,通 过使用许多较小的、较不昂贵的部件,而不是较少大型的、昂贵的部 件)。然而,在历史上数据库已经是至少服从分布的软件堆栈的部件。 例如,可能难以分布数据库同时仍确保期望它们提供的所谓ACID特 性(例如,原子性、一致性、隔离性、和耐久性)。

尽管大部分现存的相关数据库未被分布,使用两个常用模型中的 一个来“向外扩展”(与通过仅采用较大单片系统的“向上扩展”相 反)一些现存的数据库:“无共享”模型和“共享磁盘”模型。一般来 说,在“无共享”模型中,接收的查询分解成数据库碎片(其中的每 一个包括查询部件),这些碎片被发送至不同的计算机节点用于查询 处理,并且在它们返回前收集和集合结果。一般来说,在“共享磁盘” 模型中,群集中的每个计算机节点访问相同的基础数据。在采用这个 模型的系统中,必须非常小心以便管理高速缓存一致性。在这两个模 型中,在多个节点(包括单机数据库实例的所有功能性)上复制大型、 单片数据库,并且添加“胶合”逻辑以便将它们缝合在一起。例如, 在“无共享”模型中,胶合逻辑可提供分配器的功能性,所述分配器 使查询细分、将它们发送至多个计算机节点、以及随后组合结果。在 “共享磁盘”模型中,胶合逻辑可用来将多个节点的高速缓存融合在 一起(例如,以便管理在高速缓存层处的一致性)。部署这些“无共享” 和“共享磁盘”数据库系统可能花费较大,并且维持起来较复杂,以 及它们可能过度服务许多数据库使用情况。

在传统数据库系统中,由数据库系统管理的数据存储在直接附加 的磁盘上。如果磁盘失效,那么更换所述磁盘并且随后必须重新加载 适当的数据。例如,在许多系统中,崩溃恢复包括从备份系统复原最 近的快照,并且随后重播从所述点向前的最后快照以后做出的任何改 变。然而,这个方法不能很好地缩放以用于大型数据库。

附图说明

图1为示出根据一个实施方案的数据库软件堆栈的各种部件的 框图。

图2为示出根据一些实施方案的服务系统架构的框图,所述服务 系统架构可被配置来实施基于网络服务的数据库服务。

图3为示出根据一个实施方案的数据库系统的各种部件的框图, 所述数据库系统包括数据库引擎和独立分布式数据库存储服务。

图4为示出根据一个实施方案的分布式数据库优化存储系统的 框图。

图5为示出用于访问数据库系统中的数据的方法的一个实施方 案的流程图,所述数据库系统包括数据库引擎和独立分布式数据库存 储服务。

图6为示出根据一个实施方案的数据库系统中的独立分布式数 据库优化存储系统的使用的框图。

图7为从数据库引擎的角度示出用于在数据库系统中执行写入 操作的方法的一个实施方案的流程图。

图8为从分布式数据库优化存储系统的角度示出用于在数据库 系统中执行写入操作的方法的一个实施方案的流程图。

图9为示出根据一个实施方案的可将数据和元数据存储在分布 式数据库优化存储系统的给定节点上的方式的框图。

图10为示出根据一个实施方案的数据库容量的示例性配置的框 图。

图11为从数据库引擎的角度示出用于在数据库系统中执行读取 操作的方法的一个实施方案的流程图。

图12为从分布式数据库优化存储系统的角度示出用于在数据库 系统中执行读取操作的方法的一个实施方案的流程图。

图13为示出用于在包括保护组的分布式数据库优化存储系统中 执行读取操作和写入操作的方法的一个实施方案的流程图。

图14为示出根据各种实施方案的被配置来实施数据库系统的至 少一部分的计算机系统的框图,所述数据库系统包括数据库引擎和独 立分布式数据库存储服务。

虽然在本文中通过列举若干实施方案和示意性附图的实例的方 式描述了实施方案,本领域的技术人员应认识到,实施方案并不限于 所描述的实施方案或附图。应理解,附图和对其的详细描述并非意图 将实施方案限于所公开的特定形式,而是相反,其意图在于涵盖落入 由所附权利要求书所界定的精神和范围内的所有修改、等同物以及替 代方案。本文中使用的任何标题都仅用于组织目的,并且并不意图用 于限制描述或权利要求书的范围。贯穿本申请所使用的词语“可以”是 在许可的意义上(即意指具有可能性)、而非强制的意义上(即意指必须) 使用。类似地,词语“包括(include/including/includes)”意味着包括但不 限于。

具体实施方式

在一些实施方案中,本文中描述的系统可实施网络服务,所述网 络服务使得客户端(例如,订阅者)能够在云计算环境中操作数据存储 系统。在一些实施方案中,数据存储系统可为高度可缩放的和可扩展 的企业级数据库系统。在一些实施方案中,查询可指向横跨多个物理 源分布的数据库存储,并且数据库系统可在所需的基础上扩大或缩 小。在不同实施方案中,数据库系统可在各种类型和/或组织的数据 库模式下有效工作。在一些实施方案中,客户端/订阅者可能以许多 方式(例如,通过到数据库系统的SQL接口以交互方式)提交查询。在 其他实施方案中,外部应用和程序可使用到数据库系统的开放数据库 连接(ODBC)和/或Java数据库连接(JDBC)驱动器接口来提交查询。

更具体地,在一些实施方案中,本文描述的系统可实施面向服务 的数据库架构,在所述数据库架构中单个数据库系统的各种功能部件 固有地分布。例如,不是将多个完整的和单片的数据库实例(其中的 每一个可包括外来功能性,如应用服务器、搜索功能性、或超过需要 用来提供数据库的核心功能的其他功能性)捆绑在一起,这些系统可 将数据库的基本操作(例如,查询处理、事务管理、高速缓存和存储) 组织成可单独和独立缩放的层。例如,在一些实施方案中,本文所描 述的系统中的每个数据库实例可包括数据库层(其可包括单个数据库 引擎头节点和客户端侧存储系统驱动器)、和独立分布式存储系统(其 可包括共同执行在现有系统的数据库层中常规执行的操作中的一些 的多个存储节点)。

如本文更详细描述的,在一些实施方案中,数据库的一些最低水 平操作(例如,备份、复原、快照、恢复、和/或各种空间管理操作) 可从数据库引擎卸载至存储层,并且分布在多个节点和存储装置上。 例如,在一些实施方案中,不是数据库引擎对数据库表格(或其数据 页面)应用改变以及随后将修改的数据页面发送至存储层,对存储的 数据库表格(或其数据页面)的改变的应用可为存储层本身的责任。在 此类实施方案中,可将重做日志记录而不是修改的数据页面发送至存 储层,在其之后重做处理(例如,应用重做日志记录)可稍微徐缓地并 且以分布式方式执行(例如,通过后台处理)。在一些实施方案中,崩 溃恢复(例如,从存储的重做日志记录重建数据页面)也可由存储层执 行,以及也可由分布式(并且在一些情况下徐缓的)后台处理执行。

在一些实施方案中,因为只有重做日志(以及未修改的数据页面) 被发送至存储层,在数据库层与存储层之间可存在比现有数据库系统 中更少的网络流量。在一些实施方案中,每个重做日志可大约为它指 定变化的对应数据页面大小的十分之一。注意从数据数据库层和分布 式存储系统发送的请求可为异步的,并且多个此类请求可同时在发送 中。

如先前指出的,在典型的大型数据库系统中,在系统故障后,数 据库系统可重启前,整个数据集需要被复原。在这些数据库系统中, 在崩溃之后,系统必须确定最后点,在所述最后点处已知所有的数据 页面已被刷新至磁盘(例如,检查点),并且必须重播从那个点向前的 任何改变日志。例如,在可使得数据库可用于处置来自客户端进程的 进入查询之前,系统进程必须在确定的检查点后改变的所有数据页面 中读取,并且应用尚未被应用至那些数据页面的每个可应用改变日志 记录。

在一些实施方案中,本文描述的数据库系统可能够几乎立即在数 据库崩溃后的故障之后重启数据库引擎(例如,以便使得数据库可用 来接受和服务查询),而不用必须等待整个数据集复原。相反,当崩 溃恢复由一个或多个后台线程徐缓执行时,查询可被接收和服务。例 如,在崩溃之后,多个后台线程可在不同的存储节点上并行操作,以 便从对应的重做日志重建数据页面。与此同时,如果进入查询把还未 被重建的数据页面作为目标,存储层可被配置来从适当的重做日志动 态重新创建数据页面。

一般来说,在被给予数据片之后,数据库的基本要求为它可最终 交还回那个数据片。为此,数据库可包括若干不同部件(或层),其中 的每一个执行不同的功能。例如,传统数据库可被认为具有三个层: 用于执行查询解析、优化和执行的第一层;用于提供事务性、恢复和 耐久性的第二层;以及在本地附接的磁盘上或在网络附接的存储区上 提供存储的第三层。如以上指出的,对缩放传统数据库的先前尝试通 常已包含复制数据库的所有三层,以及在多个机器上分布那些复制的 数据库实例。

在一些实施方案中,本文描述的系统可不同于传统数据库中的来 划分数据库系统的功能性,并且可在多个机器上仅分布功能部件的子 集(不是完整的数据库实例)以便实施缩放。例如,在一些实施方案中, 面向客户端的层可被配置来接收请求,所述请求指定存储和检索什么 数据,但未指定如何存储和检索所述数据。这个层可执行请求解析和 /或优化(例如,SQL解析和优化),而另一层可负责查询执行。在一些 实施方案中,第三层可负责提供结果的事务性和一致性。例如,这个 层可被配置来施行一些所谓的ACID特性,具体地,把数据库作为目 标的事务的原子性、维持数据库内的一致性、以及确保把数据库作为 目标的事务之间的隔离。在一些实施方案中,第四层随后可负责在存 在各种故障的情况下提供存储的数据的耐久性。例如,这个层可负责 改变日志、从数据库崩溃恢复、管理对基础存储容量的访问和/或在 基础存储容量中的空间管理。

图1为示出根据一个实施方案的数据库软件堆栈的各种部件的 框图。如这个实例中示出的,数据库实例可包括多个功能部件(或层), 其中的每一个提供数据库实例功能性的一部分。在这个实例中,数据 库实例100包括查询解析和查询优化层(被示作110)、查询执行层(被 示作120)、事务性和一致性管理层(被示作130)、和耐久性和空间管 理层(被示作140)。如以上指出的,在一些现存数据库系统中,缩放 数据库实例可包含复制整个数据库实例一次或多次(包括图1中示出 的所有层),以及随后添加胶合逻辑以便将它们缝合在一起。在一些 实施方案中,本文描述的系统反而可将耐久性和空间管理层140的功 能性从数据库层卸载至独立存储层,并且可在存储层中的多个存储节 点上分布那个功能性。

在一些实施方案中,本文描述的数据库系统可保持图1所示的数 据库实例的上半部的大部分结构,但可重新分布用于对存储层的备 份、复原、快照、恢复、和/或各种空间管理操作的至少部分的责任。 当与用来提供可缩放数据库的先前方法相比时,以这种方式重新分布 功能性以及在数据库层与存储层之间紧密连接日志处理可改善性能、 增加可用性和降低成本。例如,由于只有重做日志记录(其在大小上 比实际数据页面小很多)可在节点上运送或在写入操作的时延路径内 持续,所以可减少网络和输入/输出带宽要求。此外,数据页面的产 生可在每个存储节点上独立地后台完成(如前台处理允许的),而不阻 塞进入的写入操作。在一些实施方案中,使用日志结构化、非重写的 存储可允许备份、复原、快照、时间点恢复、和容量增长操作被更有 效地执行,例如,通过仅使用元数据操纵而不是移动或复制数据页面。 在一些实施方案中,存储层也可承担复制代表客户端的在多个存储节 点上存储的数据(和/或与所述数据关联的元数据,如重做日志记录) 的责任。例如,数据(和/或元数据)可本地(例如,在单个“可用区” 内,在所述单个“可用区”中存储节点集合在它自身的物理不同的、 独立的基础结构上执行)复制和/或在单个区域或不同区域中的可用区 上复制。

在各种实施方案中,本文描述的数据库系统可支持用于各种数据 库操作的标准或定制的应用编程接口(API)。例如,API可支持用于创 建数据库、创建表格、更改表格、创建用户、删除用户、在表格中插 入一个或多个行、复制值、从表格内选择数据(例如,查询表格)、取 消或中止查询、和/或其他操作。

在一些实施方案中,数据库实例的数据库层可包括数据库引擎头 节点服务器,所述数据库引擎头节点服务器接收来自各种客户端程序 (例如,应用)和/或订阅者(用户)的读取和/或写入请求,随后解析它们 并且发展执行计划以便实施关联的数据库操作。例如,数据库引擎头 节点可发展对获得用于复杂的查询和连接的结果有必要的步骤系列。 在一些实施方案中,数据库引擎头节点可管理在数据库系统的数据库 层与客户端/订阅者之间的通信,以及在数据库层与独立分布式数据 库优化存储系统之间的通信。

在一些实施方案中,数据库引擎头节点可负责从端部客户端通过 JDBC接口或ODBC接口来接收SQL请求,以及负责本地执行SQL 处理和事务管理(其可包括锁定)。然而,并非在本地产生数据页面, 数据库引擎头节点(或其各种部件)可产生重做日志记录,并且可将它 们运送至独立分布式存储系统的适当节点。在一些实施方案中,用于 分布式存储系统的客户端侧驱动器可在数据库引擎头节点上代管,并 且可负责将重做日志记录路由至存储那些重做日志记录指向的区段 (或其数据页面)的存储系统节点(或多个节点)。例如,在一些实施方 案中,每个区段在形成保护组的多个存储系统节点上可为镜像的(或 否则被形成为耐用的)。在此类实施方案中,客户端侧驱动器可记录 在其上存储每个区段的节点,并且当接收客户端请求时,可将重做日 志路由至在其上存储区段的所有节点(例如,异步地和基本上同时并 行)。一旦客户端侧从保护组中的存储节点的写入群体接收返回的确 认(其可指示重做日志记录已被写入至存储节点),它就可将请求的变 化的确认发送至数据库层(例如,至数据库引擎头节点)。例如,在其 中通过使用保护组使得数据耐用的实施方案中,数据库引擎头节点可 能不能够提交事务,除非客户端侧驱动器从足够的存储节点实例接收 回复以便构成写入群体。类似地,对于指向特定区段的读取请求,客 户端侧驱动器可将读取请求路由至在其上存储所述区段的所有节点 (例如,异步地和基本上同时并行地)。一旦客户端侧驱动器从保护组 中的存储节点的读取群体接收请求的数据,它可将请求的数据返回至 数据库层(例如,至数据库引擎头节点)。

在一些实施方案中,数据库层(或更具体地,数据库引擎头节点) 可包括在其中临时保持最近访问的数据页面的高速缓冲存储器。在此 类实施方案中,如果接收将保持在此类高速缓冲存储器中的数据页面 作为目标的写入请求,除了将对应的重做日志记录运送至存储层之 外,数据库引擎可对保持在它的高速缓冲存储器中的数据页面的复制 应用改变。然而,不同于在其他数据库系统中,保持在这个高速缓冲 存储器中的数据页面可能从不被刷新至存储层,并且它可在任何时候 被抛弃(例如,在用于最近应用至高速缓存的复制的写入请求的重做 日志记录已被发送至存储层和被确认之后的任何时候)。在不同实施 方案中,高速缓冲存储器可实施任何的各种锁定机构,以便通过每次 最多一个写入者(或多个读取者)控制访问高速缓冲存储器。然而注意 在包括此类高速缓冲存储器的实施方案中,高速缓冲存储器可能未分 布在多个节点上,但对于给定数据库实例可仅存在于数据库引擎头节 点上。因此,可能不存在要管理的高速缓存相干性或一致性问题。

在一些实施方案中,数据库层可支持在系统中使用同步或异步读 取复制品,例如,在读取请求可被路由至其的数据库层的不同节点上 的数据只读副本。在此类实施方案中,如果用于给定数据库表格的数 据库引擎头节点接收指向特定数据页面的读取请求,那么它可将请求 路由至这些只读副本中的任何一个(或特定的一个)。在一些实施方案 中,数据库引擎头节点中的客户端侧驱动器可被配置来通知这些其他 节点关于高速缓存的数据页面的升级和/或失效(例如,以便提示它们 使它们的高速缓冲存储器无效,在其之后它们可从存储层请求更新的 数据页面的更新副本)。

在一些实施方案中,在数据库引擎头节点上运行的客户端侧驱动 器可暴露针对存储层的专用接口。在一些实施方案中,它也可暴露针 对一个或多个其他部件(例如,其他数据库引擎或虚拟计算服务部件) 的传统iSCSI接口。在一些实施方案中,在存储层中用于数据库实例 的存储可被模制成单个卷,所述单个卷可在大小上增长而不受限制, 并且可具有不限数目的与它关联的IOPS。当创建卷时,可用具体大 小、用具体的可用性/耐久性特性(例如,指定它被如何复制)、和/或 与它关联的IOPS速率(例如,峰值和持续的)来创建它。例如,在一 些实施方案中,各种不同的耐久性模型可被支持,并且用户/订阅者 可以能够为它们的数据库表格基于它们的耐久性、性能和成本目标来 指定一些复制副本、区、或区域、和/或复制是同步的还是异步的。

在一些实施方案中,客户端侧驱动器可维持关于卷的元数据,并 且可将异步请求直接发送至对实现读取请求和写入请求有必要的每 个存储节点,而不需要在存储节点之间的附加跳跃。例如,在一些实 施方案中,响应对数据库表格进行改变的请求,客户端侧驱动器可被 配置来确定实施用于目标数据页面的存储的一个或多个节点,以及路 由指定对那些存储节点的改变的重做日志记录。存储节点随后可在将 来的某个时刻负责将在重做日志记录中指定的改变应用至目标数据 页面。由于返回客户端侧驱动器的写入被确认,所以客户端侧驱动器 可提前在其处卷为耐用的点,并且可确认返回数据库层的提交。如先 前指出的,在一些实施方案中,客户端侧驱动器可能从不将数据页面 发送至存储节点服务器。这不仅可减少网络流量,还可移除对检查点 或后台写入线程的需要,所述检查点或后台写入线程在先前的数据库 系统中约束前台处理吞吐量。

在一些实施方案中,许多读取请求可由数据库引擎头节点高速缓 冲存储器服务。然而,由于大规模的故障事件可能太常见而不允许仅 在存储器中复制,写入请求可能需要耐久性。因此,本文描述的系统 可被配置来最小化重做日志记录写入操作的成本,所述重做日志记录 写入操作在前台延时路径中,通过将存储层中的数据存储实施成两个 区域:小型仅附加的日志结构化区域,当从数据库层被接收重做日志 记录时将其写入至其中;以及较大区域,在所述较大区域中日志记录 合并在一起以便后台创建新版本的数据页面。在一些实施方案中,可 维持存储器中结构用于每个数据页面,所述每个数据页面指向用于那 个页面的最后重做日志记录、反向链接日志记录,直到实体化数据块 被引用。这个方法可提供用于混合的读取-写入工作负荷的良好性能, 包括在其中大量高速缓存读取的应用中。

在一些实施方案中,因为对用于重做日志记录的日志结构化数据 存储的访问可包括一系列连续的输入/输出操作(不是随机输入/输出 操作),做出的改变可被紧密包装在一起。还应注意,与在其中对数 据页面的每个改变导致对持久数据存储的两个输入/输出操作(一个用 于重做日志,并且一个用于修改的数据页面本身)的现存系统相比, 在一些实施方案中,通过基于重做日志记录的接收来合并在分布式存 储系统的存储节点处的数据页面,本文描述的系统可避免这个“写入 放大”。

如先前指出的,在一些实施方案中,数据库系统的存储层可负责 取得数据库快照。然而,因为存储层实施日志结构化存储,取得数据 页面(例如,数据块)的快照可包括记录与最近应用至数据页面/数据块 的重做日志记录关联的时间戳(或与合并多个重做日志记录以便创建 新版本的数据页面/数据块的最近操作关联的时间戳),和阻止先前版 本的页面/块的无用数据收集以及直到记录的时间点的任何随后日志 条目。例如,取得数据库快照可能不需要如当采用远离卷备份策略时 将需要的读取、复制或写入数据块。在一些实施方案中,对快照的空 间要求可为最小的,由于仅修改的数据将需要附加的空间,但用户/ 订阅者可以能够选择除活动数据集之外他们想要保持多少附加空间 用于在卷上的快照。在不同的实施方案中,快照可为离散的(例如, 每个快照可提供对在具体时间点的数据页面中的所有数据的访问)或 连续的(例如,每个快照可提供对存在于两个时间点之间的数据页面 中的所有版本的数据的访问)。在一些实施方案中,回复至先前的快 照可包括记录日志记录以便指示所有的重做日志记录和数据页面(由 于快照为无效的和可无用数据收集的),,以及在快照点后丢弃所有数 据库高速缓存条目。在此类实施方案中,由于存储系统将在逐块基础 上如请求的和后台在所有节点上对数据块应用重做日志记录,就像它 在正常的向前读取/写入处理中做的,所以不需要向前滚动。从而可 使得崩溃恢复并行和分布在节点上。

图2中示出可被配置来实施基于网络服务的数据库服务的服务 系统架构的一个实施方案。在所示的实施方案中,一些客户端(被示 作数据库客户端250a-250n)可被配置来通过网络260与网络服务平台 200互相作用。网络服务平台200可被配置来与数据库服务210、分 布式数据库优化存储服务220和/或一个或多个其他虚拟计算服务230 的一个或多个实例相互作用。注意其中给定部件的一个或多个实例可 存在,可使得本文中对那个部件的引用为单数的或复数的。然而,任 何一种形式的使用不意图排除另一种。

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

一般来说,客户端250可包含可被配置来通过网络260向网络服 务平台200提交网络请求(包括用于数据库服务的请求)的任何类型的 客户端。例如,给定客户端250可包括适当版本的网络浏览器,或可 包括被配置来作为延伸执行或在由网络浏览器提供的执行环境内执 行的插件模块或其他类型的代码模块。可替代地,客户端250(例如, 数据库服务客户端)可包含应用程序,如数据库应用程序(或其用户接 口)、媒体应用程序、办公室应用程序、或可使用持久存储资源以便 存储和/或访问一个或多个数据库表格的任何其他应用程序。在一些 实施方案中,此类应用程序可包括足够的协议支持(例如,用于适当 版本的超文本传输协议(HTTP)),用于产生和处理网络服务请求,而 不必要地实施用于所有类型的基于网络的数据的完整浏览器支持。就 是说,客户端250可为被配置来直接与网络服务平台200相互作用的 应用程序。在一些实施方案中,客户端250可被配置来根据表述性状 态转移(REST)类型的网络架构、基于文件或基于消息的网络服务架 构、或另一适当的网络服务架构产生网络服务请求。

在一些实施方案中,客户端250(例如,数据库服务客户端)可被 配置来向其他应用程序以对这些应用程序透明的方式提供对基于网 络服务的数据表格存储的访问。例如,客户端250可被配置来与操作 系统或文件系统集成,来提供根据本文所描述的存储模型的适当变体 的存储。然而,操作系统或文件系统可呈现针对应用程序的不同存储 接口,如文件、目录和/或文件夹的常规文件系统层级。在此类实施 方案中,应用程序可能不需要被修改以便使用图1的存储系统服务模 型。反而,对网络服务平台200的介接的细节可通过客户端250和代 表在操作系统环境内执行的应用程序的操作系统或文件系统来协调。

客户端250可通过网络260将网络服务请求传达至网络服务平台 200以及从网络服务平台200接收响应。在各种实施方案中,网络260 可包含对在客户端250与平台200之间建立基于网络的通信有必要的 联网的硬件和协议的任何适当组合。例如,网络260通常可包含共同 实施因特网的各种电信网络和服务提供者。网络260也可包括专用网 络(如局域网(LAN)或广域网(WAN))以及公用无线网络或专用无线网 络。例如,给定的客户端250和网络服务平台200可分别被供应在具 有其自身内部网络的企业内。在此类环境中,网络260可包括对在给 定客户端250与因特网之间以及在因特网和网络服务平台200之间建 立联网链接有必要的硬件(例如,调制解调器、路由器、交换器、负 载均衡器、代理服务器等)和软件(例如,协议堆栈、会计软件、防火 墙/安全软件等)。注意在一些实施方案中,客户端250可使用专用网 络而不是公用因特网来与网络服务平台200通信。例如,客户端250 可被供应在与数据库服务系统相同的企业内(例如,实施数据库服务 210和/或分布式数据库优化存储服务220的系统)。在此类情况下, 客户端250可通过专用网络260(例如,可使用基于因特网的通信协议 但不可公共访问的LAN或WAN)与平台200通信。

一般来说,网络服务平台200可被配置,以便实施被配置来接收 和处理网络服务请求(如对访问数据页面(或其记录)的请求)的一个或 多个服务端点。例如,网络服务平台200可包括被配置来实施特定端 点的硬件和/或软件,以使得指向那个端点的基于HTTP的网络服务 请求被适当地接收和处理。在一个实施方案中,网络服务平台200可 被实施作为服务器系统,所述服务器系统被配置来从客户端250接收 网络服务请求,并且将它们转发至实施数据库服务210、分布式数据 库优化存储服务220和/或另一虚拟计算服务230的系统的部件用于 处理。在其他实施方案中,网络服务平台200可被配置成一些异构系 统(例如,处于集群拓扑),所述异构系统实施负载平衡和被配置来动 态管理大规模的网络服务请求处理负载的其他请求管理特征。在各种 实施方案中,网络服务平台200可被配置来支持REST类型的或基于 文件(例如,基于SOAP)类型的网络服务请求。

除起到用于客户端的网络服务请求的可寻址端点的作用之外,在 一些实施方案中,网络服务平台200可实施各种客户端管理特征。例 如,平台200可协调网络服务(包括存储资源)的客户端使用的测量和 计数,如通过追踪请求客户端250的身份、客户端请求的数目和/或 频率、被存储或检索的代表客户端250的数据表格(或其记录)的大小、 由客户端250使用的总存储带宽、由客户端250请求的存储类别、或 任何其他可测量的客户端使用参数。平台200也可实施财务账目和计 费系统,或可维持使用数据的数据库,所述使用数据的数据库可由用 于客户端使用活动的报告和计费的外部系统查询和处理。在某些实施 方案中,平台200可被配置来收集、监视和/或集合各种存储服务系 统操作度量,如反映从客户端250接收的请求的速率和类型、由此类 请求利用的带宽、用于此类请求的系统处理时延、系统部件利用(例 如,网络带宽和/或存储服务系统内的存储利用)、由请求导致的错误 的速率和类型、存储的和请求的数据页面或其记录的特性(例如,大 小、数据类型等)的度量、或任何其他适当的度量。在一些实施方案 中,此类度量可由系统管理员使用以便调谐和维持系统部件,而在其 他实施方案中,此类度量(或此类度量的相关部分)可暴露于客户端 250,以便使得此类客户端能够监视它们使用数据库服务210、分布 式数据库优化存储服务220和/或另一虚拟计算服务230(或实施那些 服务的基础系统)。

在一些实施方案中,平台200也可实施用户认证和访问控制程 序。例如,对于访问特定数据库表格的给定网络服务请求,平台200 可被配置来查明与请求关联的客户端250是否被授权访问特定数据 库表格。平台200可确定此类认证,例如通过相对于与特定数据库表 格关联的凭据评估身份、密码或其他凭据,或相对于用于特定数据库 表格的访问控制列表评估对特定数据库表格的请求的访问。例如,如 果客户端250不具有足够的凭据来访问特定数据库表格,平台200可 例如通过将指示错误情况的响应返回至请求客户端250来拒绝对应 的网络服务请求。通过数据库服务210、分布式数据库优化存储服务 220和/或其他虚拟计算服务230,各种访问控制政策可被存储作为访 问控制信息的记录或列表。

注意尽管网络服务平台200可代表通过其客户端250可访问实施 数据库服务210的数据库系统的特征的主接口,但它不需要代表针对 此类特征的唯一接口。例如,可与网络服务接口不同的替代性API 可用于允许提供数据库系统的企业内部客户端绕开网络服务平台 200。注意在本文描述的许多实例中,分布式数据库优化存储服务220 可在计算系统内或向客户端250提供数据库服务的计算系统或企业 系统内,并且不可暴露于外部客户端(例如,用户或客户端应用程序)。 在此类实施方案中,内部“客户端”(例如,数据库服务210)可在本 地网络或专用网络上访问分布式数据库优化存储服务220,被示出为 在分布式数据库优化存储服务220与数据库服务210之间的实线(例 如,通过直接在实施这些服务的系统之间的API)。在此类实施方案 中,在存储代表客户端250的数据库表格中使用分布式数据库优化存 储服务220对那些客户端可为透明的。在其他实施方案中,分布式数 据库优化存储服务220可通过网络服务平台200暴露于客户端250, 以便为除了依靠数据库服务210的那些应用程序外的应用程序提供 数据库表格或其他信息的存储用于数据库管理。这在图2中通过网络 服务平台200与分布式数据库优化存储服务220之间的虚线示出。在 此类实施方案中,分布式数据库优化存储服务220的客户端可通过网 络260(例如,在因特网上)访问分布式数据库优化存储服务220。在一 些实施方案中,虚拟计算服务230可被配置来从分布式数据库优化存 储服务220(例如,通过直接在虚拟计算服务230与分布式数据库优化 存储服务220之间的API)接收存储服务,来存储在执行计算服务230 中使用的代表客户端250的对象。这在图2中通过虚拟计算服务230 与分布式数据库优化存储服务220之间的虚线示出。在一些情况下, 平台200的计数和/或凭证服务对于内部客户端(如管理客户端)或在 同一企业内的服务部件之间可能为不必要的。

注意在各种实施方案中,不同的存储政策可由数据库服务210和 /或分布式数据库优化存储服务220来实施。此类存储政策的实例可 包括耐久性政策(例如,指示将被存储的数据库表格(或其数据页面) 的实例数目和在其上它们将被存储的不同节点数目的政策)和/或负载 平衡政策(其可在不同的节点、卷和/或磁盘上分布数据库表格或其数 据页面,试图均衡请求流量)。此外,通过各种服务中的一个,可对 不同类型的存储项目应用不同的存储政策。例如,在一些实施方案中, 分配式数据库优化存储服务220可为重做日志记录实施比为数据页 面更高的耐久性。

图3为示出根据一个实施方案的数据库系统的各种部件的框图, 所述数据库系统包括数据库引擎和独立分布式数据库存储服务。在这 个实例中,数据库系统300包括用于若干数据库表格中的每一个的各 自数据库引擎头节点320和分布式数据库优化存储服务310(其对数 据库系统的客户端可能是或可能不是可见的,所述客户端被示出为数 据库客户端350a-350n))。如这个实例所示,数据库客户端350a-350n 中的一个或多个可通过网络360(例如,这些部件对于数据库客户端 350a-350n可为网络可寻址的和可访问的)来访问数据库头节点 320(例如,头节点320a、头节点320b、或头节点320c,其中的每一 个为各自数据库实例的部件)。然而,可由数据库系统采用以便存储 代表数据库客户端350a-350n的一个或多个数据表格(以及重做日志 记录和/或与其关联的其他元数据)的数据页面以及执行如本文所述的 数据库系统的其他功能的分布式数据库优化存储服务310在不同的 实施方案中对于存储客户端350a-350n可能是或可能不是网络可寻址 的或可访问的。例如,在一些实施方案中,分布式数据库优化存储服 务310可能以对存储客户端350a-350n不可见的方式来执行各种存 储、访问、改变日志、恢复、和/或空间管理操作。

如先前指出的,每个数据库实例可包括单个数据库引擎头节点 320,所述单个数据库引擎头节点320接收来自各种客户端程序(例如, 应用程序)和/或订阅者(用户)的请求,随后解析它们,优化它们并且 发展执行计划以便实施关联的数据库操作。在图3所示的实例中,数 据库引擎头节点320a的查询解析、优化和执行部件305可执行用于 查询的这些功能,所述查询从数据库客户端350a接收并且把数据库 引擎头节点320a为部件的数据库实例作为目标。在一些实施方案中, 查询解析、优化和执行部件305可将查询响应返回至数据库客户端 305a,所述查询响应可包括写入确认、请求的数据页面(或其部分)、 错误消息、和/或其他响应(在适当情况下)。如这个实例所示,数据库 引擎头节点320a也可包括客户端侧存储服务驱动器325,所述客户 端侧存储服务驱动器325可将读取请求和/或重做日志记录路由至在 分布式数据库优化存储服务310内的各种存储节点,从分布式数据优 化存储服务310接收写入确认,从分布式数据库优化存储服务310接 收请求的数据页面,和/或将数据页面、错误消息、或其他响应返回 至查询解析、优化和执行部件305(其反过来可将它们返回至数据库客 户端350a)。

在这个实例中,数据库引擎头节点320a包括在其中最近访问的 数据页面可被暂时保持的数据页面高速缓冲存储器335。如图3所示, 数据库引擎头节点320a也可包括事务和一致性管理部件330,所述 事务和一致性管理部件330可负责在数据库头节点320a为部件的数 据库实例中提供事务性和一致性。例如,这个部件可负责确保数据库 实例的原子性、一致性和隔离特性以及指向数据库实例的事务。如图 3所示,数据库引擎头节点320a也可包括事务日志340和撤销日志 345,所述事务日志340和撤销日志345可由事务和一致性管理部件 330采用,以便追踪各种事务状态以及将不提交的事务的任何本地高 速缓存的结果向后滚动。

注意图3所示的其他数据库引擎头节点320中的每一个(例如, 320b和320c)可包括类似的部件并且可执行用于查询的类似功能,所 述查询由数据库客户端350a-350n中的一个或多个接收,并且指向它 为部件的各自数据库实例。

在一些实施方案中,本文描述的分布式数据库优化存储系统可在 各种逻辑卷、区段和页面中组织数据用于一个或多个存储节点上存 储。例如,在一些实施方案中,每个数据库表格由逻辑卷代表,并且 每个逻辑卷在存储节点集合上被分割。依存在存储节点中的特定一个 上的每个区段包含一组连续块地址。在一些实施方案中,每个数据页 面存储在区段中,以使得每个区段存储一个或多个数据页面的集合和 用于它存储的每个数据页面的改变日志(也被称为重做日志)。如本文 详细描述的,存储节点可被配置来接收重做日志记录(其在本文中也 被称为ULR),以及合并它们来创建新版本的对应数据页面和/或附加 日志记录或替换日志记录(例如,徐缓地和/或响应于对数据页面的请 求或数据库崩溃)。在一些实施方案中,根据可变的配置(其可由客户 端指定,所述客户端被代表的数据库表格被维持在数据库系统中), 数据页面和/或改变日志在多个存储节点上可为镜像的。例如,在不 同实施方案中,根据默认配置、具体应用的耐久性偏好、或具体客户 端的耐久性偏好,数据日志或改变日志的一个、两个或三个副本可存 储在一个、两个或三个不同的可用区或区域中的每一个中。

如本文使用的,以下术语可用于描述根据各种实施方案的通过分 布式数据库优化存储系统进行的数据的组织。

卷:卷为代表存储系统的用户/客户端/应用程序理解的高度耐用 的存储单元的逻辑概念。更具体地,卷为对用户/客户端/应用程序显 示成对数据库表格的各种用户页面的写入操作的单个一致有序日志 的分布式存储。每个写入操作可被编码在用户日志记录(ULR)中,所 述用户日志记录(ULR)代表对卷内的单个用户页面的内容的逻辑、有 序突变。如以上指出的,ULR在本文中也可被称为重做日志记录。 每个ULR可包括独特的LSN或逻辑序列号。每个ULR可持续至形 成保护组(PG)的在分布式存储中的一个或多个同步区段,以便为ULR 提供高耐久性和可用性。卷可提供用于可变大小的连续字节范围的 LSN类型的读取/写入接口。

在一些实施方案中,卷可包括多个程度,通过保护组使得每个耐 用。在此类实施方案中,卷可代表由变异连续的卷程度序列组成的存 储单元。指向卷的读取和写入可映射至对构成的卷程度的对应的读取 和写入中。在一些实施方案中,卷的大小可通过从卷末端添加或移除 卷程度来改变。

区段:区段为分配至单个存储节点的耐久性受限的存储单元。更 具体地,区段为具体固定大小的数据字节范围提供有限的最大努力耐 久性(例如,为存储节点的持久的、但非冗余的单个故障点)。在一些 情况下,这个数据可为用户可寻址数据的镜像,或在各种实施方案中, 它可为其他数据,如卷元数据或可擦除的编码比特。给定区段可恰好 依存在一个存储节点上。在存储节点内,多个区段可依存在每个SSD 上,并且每个区段可被限制于一个SSD(例如,区段可能不横跨多个 SSD)。在一些实施方案中,可能不需要区段来占据SSD上的连续区 域;宁可在每个SSD中存在描述由每个区段拥有的区域的分配映射。 如以上指出的,保护组可包括在多个存储节点上散布的多个区段。在 一些实施方案中,区段可提供用于固定大小(其中大小在创建时被限 定)的连续字节范围的LSN类型的读取/写入接口。在一些实施方案 中,每个区段可通过区段UUID(例如,区段的通用唯一识别符)来识 别。

存储页面:存储页面为通常具有固定大小的存储器块。在一些实 施方案中,每个页面为具有由操作系统限定的大小的存储器块(例如, 虚拟存储器、磁盘、或其他物理存储器的),并且在本文中也可被称 为术语“数据块”。更具体地,存储页面可为一组连续扇区。它可用 作SSD中的分配单元,以及日志页面中对于其存在标头和元数据的 单元。在一些实施方案中,以及在本文描述的数据库系统的情况下, 术语“页面”或“存储页面”可指具有由数据库配置限定的大小的类 似块,所述大小通常可为2的倍数,如4096、8192、16384或32768 字节。

日志页面:日志页面为用于存储日志记录(例如,重做日志记录 或撤销日志记录)的一种类型的存储页面。在一些实施方案中,日志 页面在大小上可等于存储页面。每个日志页面可包括标头,所述标头 包含关于那个日志页面的元数据(例如,识别它属于的区段的元数据)。 注意日志页面为组织单元,并且可能不必须为包括在写入操作中的数 据单元。例如,在一些实施方案中,在正常向前处理期间,写入操作 可一次一个扇区地写入至日志尾部。

日志记录:日志记录(例如,日志页面的单独元件)可具有若干不 同的类别。例如,由存储系统的用户/客户端/应用程序创建和理解的 用户日志记录(ULR)可用于指示对卷中的用户数据的改变。由存储系 统产生的控制日志记录(CLR)可包含用于追踪元数据(如当前无条件 的卷耐用LSN(VDL))的控制信息。在一些实施方案中,空日志记录 (NLR)可用作填料,以便填充日志扇区或日志页面中的未用空间。在 一些实施方案中,在这些类别中的每一个内可存在各种类型的日志记 录,并且日志记录类型可对应于需要被调用以便解释日志记录的功 能。例如,一种类型可使用具体的压缩格式来代表压缩格式的用户页 面的所有数据;第二类型可代表用于用户页面内的字节范围的新值; 第三类型可代表对被解释成整数的字节序列的增量操作;以及第四类 型可代表在页面内将一个字节范围复制到另一位置。在一些实施方案 中,日志记录类型可由GUID(不是由整数或枚举)来识别,所述GUID 可简化版本控制和发展,特别用于ULR。

有效负载:日志记录的有效负载为针对一个或多个特定类型的日 志记录的数据或参数值。例如,在一些实施方案中,可能存在大部分 (或所有的)日志记录包括,并且存储系统本身理解的一组参数或属性。 这些属性可为与扇区大小相比可能为相对小的常用日志记录标头/结 构的部分。此外,大部分日志记录可包括针对那个日志记录类型的附 加的参数或数据,并且这个附加信息可被认为是那个日志记录的有效 负载。在一些实施方案中,如果用于特定ULR的有效负载大于用户 页面大小,它可由绝对ULR(AULR)来替换,所述绝对ULR的有效负 载包括用于用户页面的所有数据。这可使得存储系统能够对等于用户 页面大小的ULR的有效负载的大小施行上限。

注意当将日志记录存储在区段日志中时,在一些实施方案中,有 效负载可连通日志标头一起存储。在其他实施方案中,有效负载可存 储在独立位置中,并且到在其中存储有效负载的位置的指针可与日志 标头一起存储。在另一些实施方案中,有效负载的一部分可存储在标 头中,并且有效负载的剩余物可存储在独立位置中。如果整个有效负 载与日志标头一起存储,这可被称为带内存储;否则存储可被称为带 外的。在一些实施方案中,大部分大型AULR的有效负载可带外存 储在日志冷区(其在以下描述)中。

用户页面:用户页面为用于特定卷的字节范围(固定大小的)和其 对准,所述特定卷对存储系统的用户/客户端为可见的。用户页面为 逻辑概念,并且在特定用户页面中的字节可能或可能不原样存储在任 何存储页面中。用于特定卷的用户页面的大小可独立于用于那个卷的 存储页面的大小。在一些实施方案中,用户页面大小可被每卷配置, 并且在存储节点上的不同区段可具有不同的用户页面大小。在一些实 施方案中,用户页面大小可被约束成多个扇区大小(例如,4KB),并 且可具有上限(例如,64KB)。另一方面,存储页面大小对于整个存储 节点可为固定的,并且可能不改变除非存在对基础硬件的改变。

数据页面:数据页面为用于存储压缩形式的用户页面数据的一种 类型的存储页面。在一些实施方案中,存储在数据页面中的每个数据 片与日志记录关联,并且每个日志记录可包括到数据页面内的扇区 (也被称为数据扇区)的指针。在一些实施方案中,数据页面可能不包 括除由每个扇区提供的之外的任何嵌入式元数据。在数据页面中扇区 之间可能不存在关系。反而,到页面中的组织可仅作为到区段的数据 分配的间隔尺寸的表达存在。

存储节点:存储节点为在其上存储节点服务器代码被部署的单个 虚拟机器。每个存储节点可包含多个本地附接的SSD,并且可提供网 络API用于访问一个或多个区段。在一些实施方案中,各种节点可在 活动列表上,或在降级列表上(例如,如果它们缓慢响应或另外被损 坏,但未完全不能用)。在一些实施方案中,客户端侧驱动器基于观 测的性能可帮助(或负责)将节点分类成活动的或降级的,用于确定它 们是否以及何时应被替换,和/或用于确定何时和如何在各种节点中 重新分布数据。

SSD:如本文指出的,术语“SSD”可指如通过存储节点可见的 本地块存储卷,不考虑由那个存储卷采用的存储类型,例如,磁盘、 固态驱动、电池支持的RAM、NVMRAM装置(例如,一个或个 NVDIMM)、或另一类型的持久存储装置。SSD不必要直接映射至硬 件。例如,单个固态存储装置可能分成多个本地卷,其中在不同的实 施方案中,每个卷被分裂成多个区段以及在多个区段上剥离,和/或 单个驱动可仅为容易管理而分成多个卷。在一些实施方案中,每个 SSD可在单个固定位置处存储分配映射。这个映射可指示特定区段拥 有的那些存储页面,以及这些页面中的哪些为日志页面(与数据页面 相对)。在一些实施方案中,存储页面可被提前分配至每个区段,以 使得向前处理可能不需要等待分配。在新分配的存储页面由区段使用 之前,可能需要使得对分配映射的任何改变耐用。

分布式数据库优化存储系统的一个实施方案由图4中的框图示 出。在这个实例中,数据库系统400包括分布式数据库优化存储系统 410,所述分布式数据库优化存储系统410通过互连460与数据库引 擎头节点420通信。如在3所示的实例中,数据库引擎头节点420可 包括客户端侧存储服务驱动器425。在这个实例中,分布式数据库优 化存储系统410包括多个存储系统服务器节点(包括被示出为430、 440、和450的那些),其中的每一个包括用于数据页面的存储和用于 它存储的区段的重做日志,以及被配置来执行各种区段管理功能的硬 件和/或软件。例如,每个存储系统服务器节点可包括被配置来执行 任何或所有的以下操作中的至少一部分的硬件和/或软件:复制(本地, 例如在存储节点内)、合并重做日志以便产生数据页面、崩溃恢复、 和/或空间管理(例如,用于区段)。每个存储系统服务器节点也可具有 在其上可存储代表客户端(例如,用户、客户端应用程序、和/或数据 库服务订阅者)的数据块的多个附接的存储装置(例如,SSD)。

在图4所示的实例中,存储系统服务器节点430包括数据页面 433、区段重做日志435、区段管理功能437、和附接的SSD 471-478。 再次注意标签“SSD”可能或可能不指固态驱动,但更通常地可能指 本地块存储卷,不考虑它的基础硬件。类似地,存储系统服务器节点 440包括数据页面443、区段重做日志445、区段管理功能447、和附 接的SSD 481-488;并且存储系统服务器节点450包括数据页面453、 区段重做日志455、区段管理功能457、和附接的SSD 491-498。

如先前指出的,在一些实施方案中,扇区为在SSD上的对齐单 元,并且可为在SSD上可被写入而没有所述写入将仅被部分完成的 风险的最大大小。例如,用于各种固态驱动和旋压介质的扇区大小可 为4KB。在本文所述的分布式数据库优化存储系统的一些实施方案 中,每个以及每一个扇区可在所述扇区开始处包括64比特(8字 节)CRC,不考虑扇区为其一部分的较高水平实体。在此类实施方案 中,这个CRC(每次当从SSD读取扇区时,其可生效)可在检测破坏 中使用。在一些实施方案中,每个和每一个扇区也可包括“扇区类型” 字节,其值将所述扇区识别成日志扇区、数据扇区、或未初始化的扇 区。例如,在一些实施方案中,为0的扇区类型字节值可指示扇区未 初始化。

用于访问包括数据库引擎和独立分布式数据库存储服务(如本文 描述的那些)的数据库系统中的数据的方法的一个实施方案由图5中 的流程图示出。如在510处所示,在这个实例中,所述方法包括数据 库引擎头节点接收(例如,从数据库客户端)指向数据库表格中的数据 记录的写入请求。例如,写入请求可指定新的数据记录应被添加至数 据库表格(或至其特定数据页面)或可指定对数据表格的特定数据页面 中的现存数据记录的修改。所述方法可包括数据库引擎头节点产生指 定请求的写入的重做日志记录,如520中,以及将重做日志记录(但 非所述请求指向的特定数据页面)发送至存储特定数据页面的分布式 数据库优化存储系统,如在530中。

如这个实例所示,所述方法可包括响应于接收重做日志记录,存 储系统节点将重做日志记录写入至磁盘(或至另一类型的持久存储介 质),并且将写入确认返回数据库引擎头节点,如在540中。在一些 实施方案中,响应于接收写入确认,数据库引擎头节点可将对应的写 入确认返回从其接收写入请求的客户端(未示出)。如这个实例所示, 在某个时间点处(例如,在接收重做日志记录并且返回写入确认之后 的时间点处),所述方法可包括存储系统节点合并用于特定数据页面 的多个重做日志记录(例如,包括在步骤540处被写入至磁盘的重做 日志记录),以便产生在它的当前状态下的特定数据页面的例示,如 在550中。例如,合并重做日志可包括将所有重做日志应用至先前实 例化版本的特定数据页面,所述所有重做数据日志已经由用于特定数 据页面的存储系统接收,但还未被应用至特定数据页面的实例以便提 供最新版本的特定数据页面。注意在一些实施方案中,最新版本的特 定数据页面可直接从一个或多个重做日志产生,例如,不用将它们应 用至先前存储版本的特定数据页面。

如图5所示,所述方法也可包括(例如,在合并重做日志以便创 建最新版本的特定数据页面之后的某点处)数据库引擎头节点接收指 向特定数据页的读取请求,如在560中。作为响应,数据引擎头节点 可将对应的读取请求发送至存储特定数据页面的存储节点,如在570 中。注意在这个实例中,假定数据库引擎头节点不将当前版本的特定 数据页面存储在它的高速缓冲存储器中。另外,所述方法可包括数据 库引擎头节点自身响应于读取请求(例如,通过返回来自它的高速缓 冲存储器的请求的数据),不是将对应的读取请求发送至存储系统节 点。如这个实例所示,所述方法可包括存储系统节点在它的当前状态 下将特定数据页面返回至数据库引擎头节点,如在580中,在其之后, 数据库引擎头节点可将请求的数据返回至从其接收读取请求的客户 端,如在590中。

在各种实施方案中,返回数据库引擎头节点(例如,在步骤580 中)的所述版本的特定数据页面可为由步骤550中的合并操作产生的 相同版本,或可为由随后的合并操作创建的更近的版本(例如,应用 在步骤550中的合并操作之后的附加重做日志的那个)。例如,在不 同实施方案中,附加的合并操作可能在存储系统节点处执行,响应于 来自数据库引擎头节点的读取请求的接收,作为数据库崩溃恢复操作 的一部分,或响应于另一类型的触发。注意在一些实施方案中,响应 于接收对访问数据的请求,用于访问在包括数据库引擎和独立分布式 数据库存储服务的数据库系统中的数据的图5所示的操作可在数据 库系统中自动执行。

在一些实施方案中,在分布式数据库优化存储系统中的每个存储 系统服务器节点可实施在节点服务器的操作系统上运行的一组处理, 所述处理管理与数据库引擎头节点的通信,例如,以便接收重做日志、 送回数据页面等。在一些实施方案中,写入至分布式数据块优化存储 系统的所有数据块可备份到长期存储和/或档案存储(例如,在远程键 值耐用备份存储系统中)。

图6为示出根据一个实施方案的数据库系统中的独立分布式数 据库优化存储系统的使用的框图。在这个实例中,一个或多个客户端 进程610可将数据存储至由数据库系统维持的一个或多个数据库表 格,所述数据库系统包括数据库引擎620和分布式数据库优化存储系 统630。在图6所示的实例中,数据库引擎620包括数据库层部件660 和客户端侧驱动器640(其用于分布式数据库优化存储系统630与数 据库层部件660之间的接口)。在一些实施方案中,数据库层部件660 可执行功能(如由图3的查询解析、优化和执行部件305以及事务和 一致性管理部件330执行的那些),和/或可存储数据页面、事务日志 和/或撤销日志(如由图3的数据页面高速缓冲存储器335、事务日志 340和撤销日志345存储的那些)。

在这个实例中,一个或多个客户端进程610可将数据库查询请求 615(其可包括把存储在一个或多个存储节点635a-635n上的数据作为 目标的读取和/或写入请求)发送至数据库层部件660,并且可从数据 库层部件660接收数据库查询响应617(例如,包括写入确认和/请求 的数据的响应)。包括对写入数据页面的请求的每个数据库查询请求 615可被解析和优化,以便产生可被发送至客户端侧驱动器640用于 随后路由至分布式数据库优化存储系统630的一个或多个写入记录 请求641。在这个实例中,客户端侧驱动器640可产生对应每个写入 记录请求641的一个或多个重做日志记录631,并且可将它们发送至 分布式数据库优化存储系统630的存储节点635中的具体的一些。分 布式数据库优化存储系统630可将用于每个重做日志记录631的对应 写入确认632返回至数据库引擎620(具体至客户端侧驱动器640)。客 户端侧驱动器640可将这些写入确认传递至数据库层部件660(作为 写入响应642),所述数据库层部件660随后可将对应的相应(例如, 写入确认)发送至一个或多个客户端进程610作为数据库查询响应 617中的一个。

在这个实例中,包括对读取数据页面的请求的每个数据库查询请 求615可被解析和优化,以便产生可被发送至客户端侧驱动器640用 于随后路由至分布式数据库优化存储系统630的一个或多个读取记 录请求643。在这个实例中,客户端侧驱动器640可将这些请求发送至分布式数据库优化存储系统630的存储节点635中的具体的一些, 并且分布式数据库优化存储系统630可将请求的数据页面633返回至 数据库引擎620(具体至客户端侧驱动器640)。客户端侧驱动器640 可将返回的数据页面发送至数据库层部件660作为返回数据记录 644,并且数据库层部件660随后可将数据页面发送至一个或多个客 户端进程610作为数据库查询响应617。

在一些实施方案中,各种错误和/或数据损失消息634可从分布 式数据库优化存储系统630发送至数据库引擎620(具体至客户端侧 驱动器640)。这些消息可从客户端侧驱动器640传递至数据库层部件 660作为错误和/或损失报告消息645,并且随后连同(或代替)数据库 查询响应617至一个或多个客户端进程610。

在一些实施方案中,分布式数据库优化存储系统630的API 631-634和客户端侧驱动器640的API 641-645可将分布式数据库优 化存储系统630的功能性暴露至数据库引擎620,犹如数据库引擎620 为分布式数据库优化存储系统630的客户端。例如,数据库引擎 620(通过客户端侧驱动器640)可通过这些API写入重做日志记录或请 求数据页面,以便执行(或促进其性能)由数据库引擎620和分布式数 据库优化存储系统630的组合实施的数据库系统的各种操作(例如, 存储、访问、改变日志、恢复、和/或空间管理操作)。如图6所示, 分布式数据库优化存储系统630可在存储节点635a-635n上存储数据 块,所述存储节点635a-635n中的每一个可具有多个附接的SSD。在 一些实施方案中,分布式数据库优化存储系统630可通过应用各种类 型的冗余方案为存储的数据块提供高耐久性。

注意在各种实施方案中,在图6中,在数据库引擎620与分布式 数据库优化存储系统630之间的API调用和响应(例如,API 631-634) 和/或在客户端侧驱动器640与数据库层部件660之间的API调用和 响应(例如,API 641-645)可在安全代理连接(例如,由网关控制面管 理的一个)上执行,或可在公共网络上,或可替代地在专用通道(如虚 拟专用网络(VPN)连接)上执行。到本文所述的数据库系统的部件和/ 或在其之间的这些和其他API可根据不同的技术(包括但不限于,简 单对象访问协议(SOAP)技术和表述性状态转移(REST)技术)来实施。 例如,这些API可能,但不必须被实施作为SOAP API或RESTful 的API。SOAP为用于在基于网络的服务的情况下用于交换信息的协 议。REST为用于分布式超媒体系统的构造风格。RESTful的API(其 也可被称为RESTful网络服务)为使用HTTP和REST技术实施的网 络服务API。本文描述的API在一些实施方案中可用各种语言(包括 但不限C、C++、Java、C#和Perl)中的客户端库来包装,以便支持与 数据库引擎620和/或分布式数据库优化存储系统630的合并。

如以上指出的,在一些实施方案中,数据库系统的功能部件可在 由数据库引擎执行的那些与在独立、分布式、数据库优化存储系统中 执行的那些之间划分。在一个具体实例中,响应于接收来自客户端进 程(或其线程)的对将某物插入至数据库表格中(例如,通过将记录添加 那个数据块来更新单个数据块)的请求,数据库引擎头节点的一个或 多个部件可执行查询解析、优化、和执行,以及可将查询的每个部分 发送至事务和一致性管理部件。事务和一致性管理部件可确保没有其 他客户端进程(或其线程)试图同时修改相同的行。例如,事务和一致 性管理部件可负责确保这个改变自动地、一致地、耐久地以及以隔离 的方式在数据库中执行。例如,事务和一致性管理部件可与数据库引 擎头节点的客户端侧存储服务驱动器一起工作,以便产生将被发送至 分布式数据库优化存储服务中的一个节点的重做日志记录,以及将它 发送至分布式数据库优化存储服务(连同响应于其他客户端请求产生 的其他重做日志),以一个顺序和/或用确保ACID特性满足这个事务 的定时。在接收重做日志记录(其可被认为通过存储服务的“更新记 录”)后,对应的存储节点可更新数据块,并且可更新用于所述数据 块的重做日志(例如,指向数据块的所有改变的记录)。在一些实施方 案中,数据库引擎可负责产生用于这个改变的撤销日志,并且也可负 责产生用于撤销日志的重做日志记录,其都可本地(在数据库层中)用 于确保事务性。然而,不同于常规数据库系统,本文描述的系统可将 对数据块应用改变的责任转移至存储系统(不是在数据库层应用它们 以及将修改的数据块运送至存储系统)。

从数据库引擎的角度来看,用于在数据库系统中执行写入操作的 方法的一个实施方案通过图7中的流程图示出。如在710处所示,在 这个实例中,所述方法包括数据库引擎头节点接收(例如,从数据库 客户端)指向数据库表格中的数据记录的写入请求。例如,写入请求 可指定新的数据记录应被添加至数据库表格(或至其特定数据页面)或 可指定对数据表格的特定数据页面中的现存数据记录的修改。所述方 法也可包括数据库引擎头节点(或其特定部件)解析和/或优化写入请 求,如在720中。例如,在一些实施方案中,数据库引擎头节点可负 责产生查询执行计划。如图7所示,所述方法可包括数据库引擎头节 点产生指定请求的写入的重做日志记录,如在730中,以及数据库引 擎头节点(或更具体地,在数据库引擎头节点上的客户端侧存储服务 驱动器)确定存储所述写入请求指向的特定数据页面的分布式数据库 优化存储系统的节点,如在740中。

如这个实例所示,所述方法可包括数据库引擎头节点(或更具体 地,在数据库引擎头节点上的客户端侧存储服务驱动器)将重做日志 记录而不是任何版本的特定数据页面发送至确定的存储系统节点,如 在750中。如图7所示,可能不存在数据库引擎头节点相对于写入请 求采取的其他行动,直到(以及除非)数据库引擎头节点(或更具体地, 在数据库引擎头节点上的客户端侧存储服务驱动器)从存储系统接收 写入确认。一旦这个确认被接收(被示出为从760的正退出),所述方 法可包括数据库引擎头节点将对应的写入确认返回至请求者(例如, 至从其接收写入请求的客户端),如在770中。注意在一些实施方案 中,如果在预定的时间段内不从存储系统接收写入确认,数据库引擎 头节点(或更具体地,在数据库引擎头节点上的客户端侧存储服务驱 动器)可被配置来确定所述确定的存储节点已经失效(或降级),或一些 其他错误情况在存储系统中存在。也注意用于执行写入操作的图7所 示的操作可响应接收写入请求在数据库系统中自动执行(例如,不用 用户干预)。

从分布式数据库优化存储系统的角度来看,用于在数据库系统中 执行写入操作的方法的一个实施方案通过图8中的流程图示出。如在 810处所示,在这个实例中,所述方法可包括接收指向特定数据页面 的重做日志记录的分布式数据库优化存储系统的节点,所述节点存储 (但不是任何版本的特定数据页面本身)来自数据库引擎(例如,来自数 据库头节点的客户端侧存储服务驱动器)或来自存储系统的另一客户 端的所述特定数据页面。响应于接收重做日志记录,所述方法可包括 存储系统节点将用于页面的重做日志记录写入至一个或多个磁盘(或 至另一类型的持久存储介质),如在820中。例如,在不同实施方案 中,存储系统节点可将重做日志记录附加至用于存储在特定磁盘上的 特定数据页面的重做日志,或至存储在相同可用区中或两个或三个不 同可用区中的每一个中的一个或多个磁盘上的此类重做日志的一些 复制品中的任何一个。一旦重做日志记录的一个或多个副本已被成功 写入(根据全系统的、具体应用的、或客户端指定的耐久性政策),所 述方法也可包括存储系统节点将写入确认返回至数据库引擎(或存储 系统的其他客户端),如在830中。注意在成功写入重做日志记录后 的任何时间,存储系统节点可将写入确认返回至数据库引擎,不考虑 重做日志记录是否已被应用至它在存储系统上指向的先前实体化版 本的特定数据页面。

如这个实例所示,如果到了存储系统节点合并用于特定数据页面 的一个或多个重做日志以便创建最新版本的特定数据页面(被示出为 从840的正退出)的时间,所述方法可包括存储系统节点,所述存储 系统节点将一个或多个重做日志记录应用至最近存储版本的特定数 据页面,以便产生在它的当前状态下的新版本的特定数据页面,并且 将新版本的特定数据页面写入至一个或多个磁盘(如在850中)。例如, 合并操作可包括所有重做日志记录的应用,自从对最近实体化版本的 特定数据页面的最后合并操作(和/或还未被应用至任何版本的特定数 据页面)以后接收所述所有重做日志记录。在其他实施方案中,当前 版本的特定数据页面可直接从一个或多个重做日志产生,例如,不用 将它们应用至先前存储版本的特定数据页面。如本文描述的,在不同 实施方案中,存在各种方式来确定何时合并用于给定数据页面的待定 日志记录。例如,可能以规则(例如,周期的)的时间间隔触发用于数 据页面的合并操作,响应于接收把数据页面作为目标的单个重做日 志,响应于已经接收把数据页面作为目标的预定数目的重做日志记 录、或把给定时间段内的数据页面作为目标的预定数目的重做日志记 录,响应于接收把数据页面作为目标的读取请求,响应于崩溃恢复操 作的开始,或根据任何其他合适的政策。

如图8所示,如果不是存储系统节点合并用于特定数据页面的重 做日志记录(被示出为从840的负退出)的时间,但把特定数据页面作 为目标的另一重做日志记录被接收(被示出为从860的正退出),所述 方法可包括为附加的重做日志记录重复在820-860处示出的操作。在 这个实例中,由于把特定数据页面作为目标的更多的重做日志记录由 存储系统接收,存储系统节点可为每个附加的重做日志记录重复在 820-860处示出的操作,并且根据一个或多个可应用的触发和/或政 策,存储系统节点有时可合并用于特定数据页面的重做日志记录。这 通过来自860至820的正退出的反馈,以及来自860至840的负退出 的反馈在图8中示出。注意用于执行写入操作的图8所示的操作可响 应于接收重做日志记录在存储系统中自动执行(例如,不用用户干预)。

注意在一些实施方案中,一些数据页面(例如,如果有的话很少 被访问的数据页面)可能从不在存储器中产生(例如,通过合并操作) 和/或持续。例如,在一些实施方案中,指向此类数据页面的任何重 做日志记录可由一个或多个存储系统节点存储(例如,在存储器中持 续),但这些重做日志记录可能不用于产生完全版本的那些数据页面, 直到或除非对读取它们的请求被接收。在此类实施方案中,即使一种 版本的此类数据页面产生(例如,响应于读取请求),它可能不在存储 器中持续(例如,如果它不可能很快、经常或曾经被再次访问),但反 而在它返回请求者后可被丢弃在任何点处。

在不同的实施方案中,各种不同的分配模型可被实施用于SSD。 例如,在一些实施方案中,日志条目页面和物理应用页面可从与SSD 装置关联的单个堆的页面分配。这个方法可具有留下由日志页面和数 据页面消耗的相对数量的存储的优点,以便保持未指定的以及自动适 应使用。它也可具有允许页面保持未准备的,直到它们随意不用准备 地使用和重新目的化的优点。在其他实施方案中,分配模型可将存储 装置划分成用于日志条目和数据页面的独立空间。一旦此类分配模型 由图9中的框图示出以及在以下描述。

图9为示出根据一个实施方案的可将数据和元数据存储在分布 式数据库优化存储系统的给定存储节点(或持久存储装置)上的方式的 框图。在这个实例中,SSD存储空间900将SSD标头和其他固定的 元数据存储在标记910的空间的部分中。它将日志页面存储在标记 920的空间的部分中,并且包括被初始化和保留用于附加日志页面的 标记930的空间。SSD存储空间900的一部分(被示出为940)被初始 化,但未分配,并且另一空间部分(被示出为950)未被初始化以及未 分配。最终,标记960的SSD存储空间900的部分存储数据页面。

在这个实例中,第一可用日志页槽被指示成915,并且最后使用 的日志页槽(短暂的)被指示成925。最后保留的日志页槽被指示成 935,并且最后可用日志页槽被指示成945。在这个实例中,第一使 用的数据页槽(短暂的)被指示成965。在一些实施方案中,在SSD存 储空间900内的这些元件(915、925、935、945和965)中的每一个的 位置可由各自的指针来识别。

在图9所示的分配方法中,有效日志页面可被包装至平坦存储空 间的开始中。在使用地址空间中较远的附加的日志页槽之前,由于被 释放的日志页面而打开的孔可再用。例如,在最坏的情况下,第一n 个日志页槽包含有效日志数据,其中n为已经同时存在的有效日志页 面的最大数目。在这个实例中,有效数据页面可被包装至平坦存储空 间的末端中。在使用地址空间中较低的附加的数据页槽之前,由于被 释放的数据页面而打开的孔可再用。例如,在最坏的情况下,最后m 个数据页面包含有效数据,其中m为已经同时存在的有效数据页面 的最大数目。

在一些实施方案中,在日志页槽可变成潜在的有效日志页面条目 组的部分之前,它可能需要被初始化至对于有效未来日志条目页面不 可能为混乱的值。由于引退的日志页面具有足够的元数据以便对于新 的有效日志页面为永不混乱的,对于循环的日志页槽这是含蓄真实 的。然而,当存储装置被首先初始化时,或当潜在用于存储应用数据 页面的空间被改造时,日志页槽可能需要在它们添加至日志页槽池之 前被初始化。在一些实施方案中,再平衡/改造日志空间可能作为后 台任务来执行。

在图9所示的实例中,当前日志页槽池包括在第一可用日志页槽 (在915处)与最后保留的日志页槽(925)之间的区域。在一些实施方案 中,这个池可安全增长至最后可用日志页槽(925),不用再初始化新的 日志页槽(例如,通过持续对识别最后保留的日志页槽935的指针的 更新)。在这个实例中,超过最后可用日志页槽(其由指针945识别), 通过持续初始化的日志页槽,以及持续更新用于最后可用日志页槽的 指针(945),所述池可增长至第一使用的数据页槽(其由指针965识别)。 在这个实例中,被示出作为950的SSD存储空间900的先前未初始 化和未分配的部分可被暂用以便存储日志页面。在一些实施方案中, 通过持续对用于最后保留的日志页槽的指针(935)的更新,当前日志页 槽池可向下收缩至最后使用的日志页槽(其通过指针来识别)的位置。

在图9所示的实例中,当前数据页槽池包括在最后可用日志页槽 (其由指针945来识别)与SSD存储空间900的端部之间的区域。在一 些实施方案中,通过持续对最后可用日志页槽的指针(945)的更新,数 据页面池可安全增长至由最后保留的日志页槽的指针(935)识别的位 置。在这个实例中,被示出为940的SSD存储空间900的先前未初 始化但未分配的部分可被暂用以便存储日志页面。超过这个,通过持 续对用于最后保留的日志页槽(935)和最后使用的日志页槽(945)的指 针的更新,有效再分配SSD存储空间900的部分(被示出为930和940) 以便存储数据页面而不是日志页面,所述池可安全增长至由最后使用 的日志页槽的指针(925)识别的位置。在一些实施方案中,通过初始化 附加的日志页槽和持续对最后可用日志页槽的指针(945)的更新,数据 页槽池可安全向下收缩至由第一使用的数据页槽的指针(965)识别的 位置。

在采用图9所示的分配方法的实施方案中,用于日志页面池和数 据页面池的页面大小可被独立挑选,同时仍促进良好的堆积性能。在 此类实施方案中,可能不存在有效日志页面链接至由应用数据形成的 欺骗日志页面的可能性,并且可能区分损坏的日志与链接至还未写入 的下一页面的有效日志尾部。在采用图9所示的分配方法的实施方案 中,在启动时,直到由最后保留的日志页槽的指针(935)识别的位置的 所有日志页槽可迅速和相继地被读取,并且整个日志索引可被再构造 (包括推测的链接和顺序)。在此类实施方案中,由于可从LSN排序约 束推断一切,在日志页面之间可能不需要存在明确的链接。

在一些实施方案中,区段可包括三个主要部分(或区):包含热日 志的一个、包含冷日志的一个、以及包含用户页面数据的一个。区不 必要为SSD的连续区域。它们宁可以存储页面的间隔尺寸来散布。 此外,可能存在用于每个区段的根页面,所述每个区段存储关于所述 区段的元数据和它的性能。例如,用于区段的根页面可存储用于区段 的用户页面大小、区段中的用户页面数目、热日志区的当前开始/头 部(其可能以刷新数目的形式记录)、卷纪元、和/或访问控制元数据。

在一些实施方案中,热日志区可从客户端接受新的写入,如同它 们由存储节点接收。指定来自先前版本的页面的以Δ形式的用户页面 变化的两个Δ用户日志记录(DULR),以及指定完全用户页面的内容 的绝对用户日志记录(AULR)可被完全写入日志中。日志记录可添加 至这个区中,以近似它们被接收(即它们不是通过LSN来分类)以及它 们可横跨日志页面的顺序。日志记录可为自描述的,例如,它们可包 含它们自身的大小的指示。在一些实施方案中,在这个区域中未执行 无用数据收集。相反,在所有需要的日志记录已经被复制至冷日志后, 可通过从日志开始截断来改造空间。每次扇区被写入时,在热区中的 日志扇区可用最近已知的无条件的VDL来注释。有条件的VDL CLR 可在它们被接收时被写入至热区中,但仅最近写入的VDL CLR可能 为有意义的。

在一些实施方案中,每次新的日志页面被写入时,它可被分配一 个刷新数目。刷新数目可被写入作为每个日志页面内的每个扇区的部 分。当比较两个日志页面时,刷新数目可用于确定哪个日志页面稍后 被写入。刷新数目可单调增加,并且范围至SSD(或存储节点)。例如, 一组单调增加的刷新数目在SSD上的所有区段之间(或在存储节点上 的所有区段)共享。

在一些实施方案中,在冷日志区中,日志记录可能以它们的LSN 增长顺序来存储。在这个区中,AULR可能不必被顺序存储,取决于 它们的大小。例如,如果它们具有大的有效负载,所述有效负载的全 部或一部分可存储在数据区中,并且它们可指向它们的数据被存储在 数据区中的地方。在一些实施方案中,在冷日志区中的日志页面每次 可一整页面地被写入,不是扇区接着扇区地。因为在冷区中的日志页 面每次被整个页面地写入,用于其所有扇区中的刷新数目不相同的冷 区中的任何日志页面可被认为是不完全写入的页面并且可被忽略。在 一些实施方案中,在冷日志区中,DULR可以能够横跨日志页面(直 到两个日志页面的最大值)。然而,AULR可能不能够跨越日志扇区, 例如,以使得合并操作在单个原子写入中将能够用AULR来替换 DULR。

在一些实施方案中,冷日志区通过从热日志区复制日志记录来填 充。在此类实施方案中,仅其LSN小于或等于当前无条件的卷耐用 LSN(VDL)的日志记录可为符合条件的以便被复制到冷日志区。当将 日志记录从热日志区移动至冷日志区时,一些日志记录(如许多CLR) 可能不需要被复制因为它们不再是必须的。此外,可在这个点处执行 用户页面的一些附加合并,其可减少所需的复制数量。在一些实施方 案中,一旦给定热区日志页面已被完全写入,并且不再是最新的热区 日志页面,以及在热区日志页面上的所有ULR已被成功复制到冷日 志区,所述热区日志页面可被释放和再使用。

在一些实施方案中,无用数据收集可在冷日志区中进行,以便改 造由废弃日志记录占据的空间,例如,不再需要存储在存储层的SSD 中的日志记录。例如,当存在用于相同用户页面的随后AULR,以及 由日志记录代表的版本的用户页面不再被需要在SSD上保留时,日 志记录可变成废弃的。在一些实施方案中,通过合并两个或更多的邻 近日志页面以及用更少的新日志页面来替换它们,所述更少的新日志 页面包含来自它们替换的日志页面的所有非废弃的日志记录,无用数 据收集进程可改造空间。新的日志页面可被分配大于它们替换的日志 页面的刷新数目的新的刷新数目。在这些新的日志页面的写入完成 后,替换的日志页面可被添加至空闲页面库。注意在一些实施方案中, 可能不存在使用任何指针的日志页面的任何明确链接。反而,日志页 面的序列可通过在那些页面上的刷新数目来含蓄地确定。每当日志记 录的多个副本被发现时,在日志页面中存在的具有最高刷新数目的日 志记录可被认为是有效的,并且其他的可被认为是废弃的。

在一些实施方案中,例如,因为在数据区(扇区)内管理的空间的 间隔尺寸可不同于数据区(存储页面)外的间隔尺寸,可能存在一些存 储残片。在一些实施方案中,为使得这个存储残片在控制下,所述系 统可追踪由每个数据页面使用的扇区的数目,可优先从几乎完整的数 据页面分配,并且可优先无用数据收集几乎空的数据页面(如果它仍 为相关的,其可需要将数据移动至新的位置)。注意在一些实施方案 中,被分配至区段的页面可能在所述三个区中被重定意图。例如,当 被分配至区段的页面被释放时,它可保持与那个区段关联持续某个时 间段,并且随后可在那个区段的三个区中的任何一个中使用。每个扇 区的扇区标头可指示所述扇区属于的区。一旦页面中的所有扇区为空 闲的,所述页面可返回在区上共享的常用空闲存储页面池。这个空闲 存储页面共享在一些实施方案中可减少(或避免)存储残片。

在一些实施方案中,本文描述的分布式数据库优化存储系统可在 存储器中维持各种数据结构。例如,对于在区段中存在的每个用户页 面,用户页面表格可存储比特,所述比特指示这个用户页面是否为“清 除的”(即它是否包括所有零点)、来自用于页面的冷日志区的最新日 志记录的LSN、以及来自用于页面的热日志区的所有日志记录的位置 的阵列/列表。对于每个日志记录,用户页面表格可存储扇区数目、 那个扇区内的日志记录偏移、将在那个日志页面内读取的扇区的数 目、第二日志页面(如果日志记录跨越日志页面)的扇区数目、以及将 在那个日志页面内读取的扇区的数目。在一些实施方案中,用户页面 表格也可存储来自冷日志区的每个日志记录的LSN,和/或用于最新 的AULR(如果它在冷日志区)的有效负载的扇区数目的阵列。

在本文描述的分布式数据库优化存储系统的一些实施方案中, LSN索引可存储在存储器中。LSN索引可将LSN映射至冷日志区内 的日志页面。假设在冷日志区中的日志记录被分类,它可能将包括每 个日志页面一个条目。然而,在一些实施方案中,每个非废弃的LSN 可存储在索引中,并且映射至对应的扇区数目、偏移、和用于每个日 志记录的扇区的数目。

在本文描述的分布式数据库优化存储系统的一些实施方案中,日 志页面表格可存储在存储器中,并且日志页面表格可在冷日志区的无 用数据收集期间使用。例如,日志页面表格可识别哪些日志记录为废 弃的(例如,哪些日志记录可被无用数据收集),以及多少空闲空间在 每个日志页面上可用。

在本文描述的存储系统中,程度可为代表可与其他程度组合(连 结的或剥离的)以便代表卷的高耐用存储单元的逻辑概念。可通过单 个保护组中的成员关系使得每个程度耐用。程度可给LSN类型的读 取/写入接口提供具有在创建时限定的固定大小的连续字节子范围。 对程度的读取/写入操作可通过包含的保护组映射至一个或多个合适 的区段读取/写入操作中。如本文使用的,术语“卷程度”可指用于 代表卷内的具体字节子范围的程度。

如以上指出的,卷可包括多个程度,每个程度由包括一个或多个 区段的保护组代表。在一些实施方案中,指向不同程度的日志记录可 具有交错的LSN。为改变直到特定LSN的卷以便(使其)为耐用的, 可能需要直到那个LSN的所有日志记录为耐用的,无论它们属于的 程度。在一些实施方案中,客户端可追踪还未被使得耐用的突出日志 记录,并且一旦直到具体LSN的所有ULR被使得耐用,它可将卷耐 用LSN(VDL)消息发送至卷中的保护组中的一个。VDL可被写入至用 于保护组的所有同步镜像区段。这有时被称为“无条件VDL”,并且 它可周期性地持续至各种区段(或更具体地,至各种保护组)连同在所 述区段上发生的写入活动。在一些实施方案中,无条件VDL可存储 在日志扇区标头中。

在各种实施方案中,可在区段上执行的操作可包括写入从客户端 接收的DULR或AULR(其可包括将DULR或AULR写入至热日志区 的尾部,以及随后更新用户页面表格)、读取冷用户页面(其可包括定 位用户页面的数据扇区,以及返回它们而不需要应用任何附加的 DULR)、读取热用户页面(其可包括定位用于用户页面的最近AULR 的数据扇区,以及将任何随后的DULR应用至用户页面,在返回它 前),以及用AULR替换DULR(其可包括合并用于用户页面的DULR 以便创建替换应用的最后DULR的AULR)。如本文描述的,合并为 将DULR应用至较早版本的用户页面以便创建稍后版本的用户页面 的进程。因为(直到另一DULR被写入)在合并前写入的所有DULR可 能不需要按需读取和应用,合并用户页面可帮助减少读取时延。通过 使得旧的AULR和DULR为废弃的(假定不存在需要日志记录为当前 的快照),它也可帮助改造存储空间。在一些实施方案中,合并操作 可包括定位最近的AULR,以及依次应用任何随后的DULR而不跳 过DULR中的任何一个。如以上指出的,在一些实施方案中,合并 可能不在热日志区内执行。反而,它可在冷日志区内执行。在一些实 施方案中,当日志记录从热日志区复制至冷日志区时,合并也可被执 行。

在一些实施方案中,合并用户页面的决定可由用于页面的未决定 的DULR链的大小(例如,如果DULR的长度超过用于合并操作的预 先限定的阈值,根据全系统的、具体应用的或客户端指定的政策)、 或由被客户端读取的用户页面来触发。

图10为示出根据一个实施方案的数据库卷1010的示例性配置的 框图。在这个实例中,对应于各种地址范围1015(被示出作为地址范 围1015a-1015e)中的每一个的数据被存储为不同的区段1045(被示出 为区段1045a-1045n)。更具体地,对应于各种地址范围1015中的每 一个的数据可被组织至不同的程度(被示出作为程度1025a-1025b,和 程度1035a-1035h)中,并且这些程度中的每一个可包括在不同的保护 组1030(被示出作为1030a-1030f)中,用或不用剥离(如被示出为带区 集1020a和带区集1020b)。在这个实例中,保护组1示出擦除编码的 使用。在这个实例中,保护组2和3以及保护组6和7代表彼此的镜 像数据组,同时保护组4代表单个实例(非冗余的)的数据组。在这个 实例中,保护组8代表组合其他保护组的多层保护组(例如,这可代 表多区域保护组)。在这个实例中,带区集1(1020a)和带区集2(1020b) 示出在一些实施方案中程度(例如,程度1025a和1025b)可如何被剥 离至卷中。

更具体地,在这个实例中,保护组1(1030a)包括程度 a-c(1035a-1035c),所述程度a-c(1035a-1035c)分别包括来自范围 1-3(1015a-1015c)的数据,并且这些程度可映射至区段 1-4(1045a-1045d)。保护组2(1030b)包括程度d(1035d),所述程度 d(1035d)包括从范围4(1015d)剥离的数据,并且这个程度映射至区段 5-7(1045e-1045g)。类似地,保护组3(1030c)包括程度e(1035e),所述 程度e(1035e)包括从范围4(1015d)剥离的数据,并且被映射至区段 8-9(1045h-1045i),以及保护组4(1030d)包括程度f(1035f),所述程度 f(1035f)包括从范围4(1015d)剥离的数据,并且被映射至区段 10(1045j)。在这个实例中,保护组6(1030e)包括程度g(1035g),所述 程度g(1035g)包括从范围5(1015e)剥离的数据,并且被映射至区段 11-12(1045k-1045l),以及保护组7(1030f)包括程度h(1035h),所述程 度h(1035h)包括从范围5(1015e)剥离的数据,并且被映射至区段 13-14(1045m-1045n)。

从数据库引擎的角度来看,用于在数据库系统中执行读取操作的 方法的一个实施方案通过图11中的流程图示出。如在1110处所示, 在这个实例中,所述方法包括数据库引擎头节点接收(例如,从数据 库客户端)、指向特定数据页面的读取请求。所述方法也可包括数据 库引擎头节点(或其特定部件)解析和/或优化读取请求,如在1120中。 例如,在一些实施方案中,数据库引擎头节点可负责产生查询执行计 划。如图11所示,如果特定数据页面驻留在数据引擎头节点的高速 缓冲存储器中,被示出作为从1130的正退出,所述方法可包括数据 库引擎头节点返回来自在它的高速缓冲存储器中发现的版本的特定 数据页面的请求的数据,如在1135中。例如,在一些实施方案中, 数据库引擎头节点可暂时将最近访问的数据页面的副本保持在它的 高速缓冲存储器中,并且可响应于接收指向它们的写入请求而更新那 些副本(例如,除了产生和将用于那些写入请求的重做日志记录传送 至分布式数据库优化存储系统之外)。在一些此类实施方案中,如果 被读取操作作为目标的特定数据页面驻留在高速缓冲存储器中,它可 假定为最新版本的特定数据页面(例如,可假定把所述数据页面作为 目标的所有重做日志记录已经被应用至存储在高速缓冲存储器中的 版本的特定数据页面)。

如图11所示,如果特定数据页面不驻留在数据库引擎头节点的 高速缓冲存储器中,被示出为从1130的负退出,所述方法可包括数 据库引擎头节点(或更具体地,在数据库引擎头节点上的客户端侧存 储服务驱动器)确定在存储特定数据页面的分布式数据库优化存储系 统中的节点,以及将对应的读取请求发送至确定的存储系统节点,如 在1140中。如图11所示,可能不存在数据库引擎头节点相对于写入 请求采取的其他行动,直到(以及除非)数据库引擎头节点(或更具体 地,在数据库引擎头节点上的客户端侧存储服务驱动器)从存储系统 接收特定数据页面(在它的当前状态)。一旦数据引擎头节点(或更具体 地,在数据库引擎头节点上的客户端侧存储服务驱动器)从确定的存 储系统节点接收在它的当前状态下的特定数据页面(被示出为从1150 的正退出),所述方法可包括数据库引擎头节点将请求的数据返回至 请求者(例如,从其接收读取请求的客户端),如在1160中。例如,如 果从确定的存储系统节点接收的版本的特定数据页面为把到目前为 止的特定数据页面作为目标的所有重做日志记录(或可被应用同时维 持数据库系统的事务性和一致性特性的至少所有的重做日志记录)已 被应用至其的版本的特定数据页面,数据库引擎头节点可返回来自从 确定的存储系统节点接收的版本的特定数据页面的请求的数据。注意 在一些实施方案中,如果在预定的时间段内不从存储系统接收特定数 据页面的当前副本,数据库引擎头节点(或更具体地,在数据库引擎 头节点上的客户端侧存储服务驱动器)可被配置来确定所述确定的存 储节点已经失效(或降级),或一些其他错误情况在存储系统中存在。 也注意用于执行读取操作的图11所示的操作可响应于接收读取请求 而在数据库系统中自动执行(例如,不用用户干预)。

从分布式数据库优化存储系统的角度来看,用于在数据库系统中 执行读取操作的方法的一个实施方案通过图12中的流程图示出。如 在1210处所示,在这个实例中,所述方法可包括在分布式数据库优 化存储系统中的节点接收指向由存储系统节点存储的特定数据页面 的读取请求。在不同的实施方案中,存储系统可从数据库引擎(例如, 从数据库头节点的客户端侧存储服务驱动器),或从另一存储服务客 户端接收读取请求。如这个实例所示,如果存储系统节点存储数据页 面的最新副本(被示出为从1220的正退出),所述方法可包括存储系统 节点返回它已经存储的数据页面的最新副本,如在1250中。例如, 如果把到目前为止已被存储系统节点接收的特定块作为目标的所有 重做日志记录(或可能被应用同时维持数据库系统的事务性和一致性 特性的至少所有的重做日志记录)已经被应用至特定数据页面(例如, 如果它们已经被合并以便创建当前版本的特定数据页面),存储系统 节点在返回响应前可能不需要在用于特定数据页面的重做日志记录 上执行附加的合并操作。

另一方面,如果存储系统节点不存储数据页面的最新副本(被示 出为从1220的负退出),所述方法可包括存储系统节点从磁盘或另一 持久存储装置检索特定数据页面的最近存储的副本,如在1230中, 以及随后将在用于特定数据页面的一个或多个重做日志记录中指定 的改变应用至特定数据页面的检索副本,以便产生特定数据页面的最 新副本,如在1240中。例如,存储系统节点可应用至特定数据页面 的检索副本和把特定数据页面作为目标的所有重做日志记录,所述所 有重做日志记录到目前为止已被存储系统节点接收,但还未被应用至 特定数据页面。一旦存储系统节点已经创建特定数据页面的最新副 本,存储系统节点可将特定数据页面的最新创建的副本返回至数据库 引擎(或其他存储系统客户端)作为数据页面的最新副本(如在1250 中)。注意用于执行读取操作的图12所示的操作可响应于接收读取请 求而在存储系统中自动执行(例如,不用用户干预)。

如先前指出的,保护组(PG)为代表由区段集形成的耐久性单元的 抽象分布式实体。在一些实施方案中,保护组可代表卷内的一个或多 个程度。保护组可暴露用于一个或多个程度的接口,并且可封装(或 隐藏)一个或多个区段和关联的元数据。根据被配置用于保护组的耐 久性政策,保护组可负责维持它暴露的程度的耐久性。在一些实施方 案中,通过使用冗余区段以便持续程度数据,以及通过积极维持此类 冗余,保护组可获得它所有的构成的程度的耐久性。保护组将程度读 取/写入操作映射至基础区段上的方式对程度的用户可能是难懂的。 可在不同的实施方案中采用不同的冗余策略,包括但不限于程度镜 像、程度可擦除编码、和/或徐缓复制。

“镜像保护组”为其中构成区段中的每一个为单个程度的同步镜 像副本的保护组。在这个模型中,如果改变在保护组内的所有受影响 的同步镜像区段上已被使得耐用的,那么所述改变被认为是耐用的。 保护组可在单个可用区内或在多个可用区上形成。例如,对于仅封装 特定可用性区内的区段的保护组,所述保护组的可用性可直接捆绑至 关联的可用性区的可用性。在一些实施方案中,区域保护组可封装在 多个可用性区上的区段。在一些此类实施方案中,区域保护组可被实 施作为对应的AZ保护组的集合,来自每个AZ的一个。

用于在包括保护组的分布式数据库优化存储系统中执行读取和 写入操作的方法的一个实施方案由图13中的流程图示出。如在1310 处所示,在这个实例中,所述方法包括数据库层的数据库引擎头节点 接收(例如,从数据库客户端)指向数据库表格中的数据记录的写入请 求。例如,写入请求可指定新的数据记录应被添加至数据库表格(或 至其特定数据页面)或可指定对数据表格的特定数据页面中的现存数 据记录的修改。响应于接收写入请求,所述方法可包括数据库引擎头 节点(或更具体地,在数据库引擎头节点上的客户端侧存储服务驱动 器)将重做日志记录(但不是写入请求指向的特定数据页面的副本)发 送至存储所述请求指向的特定数据页面的分布式数据库优化存储系 统的保护组中的两个或更多的存储节点,如在1320中。

如这个实例所示,直到数据库引擎头节点(或更具体地,在数据 引擎头节点上的客户端侧存储服务驱动器)接收来自保护组中的法定 数目的存储节点的写入成功完成的确认,数据库引擎头节点可等待从 保护组中的法定数目的存储节点接收写入确认。这在图13中通过来 自从1330至1330的输入的负退出的反馈来示出。一旦数据库引擎头 节点已经从自保护组中的法定数目的存储节点接收写入确认(被示出 作为从1330的正退出),所述方法可包括数据库引擎头节点将对应的 写入确认返回请求者(例如,至数据库客户端),如在1340中。注意在 一些实施方案中,如果在预定的时间段内不从保护组中的法定数目的 存储节点接收写入确认,数据库引擎头节点(或更具体地,在数据库 引擎头节点上的客户端侧存储服务驱动器)可被配置来确定在保护组 中的一个或多个存储节点已经失效(或降级),或一些其他错误情况在 存储系统中存在。

如图13所示,所述方法可包括(例如,在接收和响应写入请求后 的某个时间点)数据库引擎头节点(或更具体地,在数据库引擎头节点 上的客户端侧存储服务驱动器)接收指向特定数据页面的读取请求(如 在1350中)。响应于接收读取请求,所述方法可包括数据库引擎头节 点(或更具体地,在数据库引擎头节点上的客户端侧存储服务驱动器) 将读取请求发送至存储特定数据页面的保护组中的两个或更多的存 储节点(如在1360中)。

如这个实例所示,直到数据库引擎头节点(或更具体地,在数据 引擎头节点上的客户端侧存储服务驱动器)从保护组中的法定数目的 存储节点接收特定数据页面当前副本,数据库引擎头节点可等待从保 护组中的法定数目的存储节点接收特定数据页面的当前副本。例如, 在一些实施方案中,保护组中的一个或多个存储节点可能不存储特定 数据页面的当前副本,并且可能必须通过在响应前将一个或多个未决 定的重做日志记录应用至较早版本的特定数据页面(例如,在合并操 作中)来创建特定数据页面的当前副本。这在图13中通过来自从1370 至1370的输入的负退出的反馈来示出。一旦数据库引擎头节点已经 从自保护组中的法定数目的存储节点接收特定数据页面的当前副本 (被示出作为从1370的正退出),所述方法可包括数据库引擎头节点将 数据页面的当前副本返回请求者(例如,至数据库客户端),如在1380 中。注意在一些实施方案中,如果在预定的时间段内不从保护组中的 法定数目的存储节点接收特定数据页面的当前副本,数据库引擎头节 点(或更具体地,在数据库引擎头节点上的客户端侧存储服务驱动器) 可被配置来确定在保护组中的一个或多个存储节点已经失效(或降 级),或一些其他错误情况在存储系统中存在。也注意用于执行写入 操作或用于执行读取操作的图13所示的操作可响应于接收这样做的 请求而在数据库系统中自动执行(例如,不用用户干预)。

一些现存的数据库系统将所有的数据页面周期性地刷新至磁盘 (例如,每五分钟检验指示所有页面一次)。在此类系统中,如果存在 崩溃,系统可能必须重播大量的重做日志记录,以便重新创建当前版 本的数据页面,自从上一次数据页面被刷新,许多改变指向所述当前 版本的数据页面。例如,这可能为用于在大量改变持续指向的高速缓 冲存储器中的热数据页面的情况,如其中每次进入顺序被接收在电子 商务应用中时,序列编号增加的页面。代替一次检查指示存储在系统 中的所有数据页面,在本文描述的系统中,检查指示可能在数据块(例 如,数据页面)基础上,而不是在数据库或区段基础上执行。例如, 在一些实施方案中,检查指示可在每个存储节点处执行,并且存储在 特定存储节点上的每个数据页面可能被合并以便在存储节点上创建 新版本的数据页面(例如,那个数据页面的检查点),仅当它被批准时 (例如,当重做日志数目记录它自身的重做日志达到预定的数目)时。 在此类实施方案中,数据库层可能根本不包括在检查指示中。反而, 检查指示可为分布式处理(例如,后台处理),所述分布式处理为存储 节点自身的责任。注意因为检查指示可能通过在存储层(其可在影响 每个存储节点的前台和/或后台活动中具有可见性)上的后台处理来执 行,在一些实施方案中,存储层(或其存储系统服务节点中的一个)可 被配置来推迟用于特定存储点的检查指示操作,如果它被另一前台处 理或后台处理严重加载。在一些实施方案中,推迟检查指示操作可能 阻止检查指示不利地影响前台时延。

在一些实施方案中,各种存储器内的数据结构(如本文描述的那 些)可能被需要用于区段以便运行。在一些实施方案中,这些存储器 内的结构可能在启动(例如,在崩溃后)期间通过进行所有日志页面的 完全扫描来建立。在一些实施方案中,这些存储器中的数据结构中的 一些的周期检查点可能被执行以便减少在崩溃后的启动时间。

在一些现存的数据库系统中,数据库层可能需要以与接收改变相 同的频率来将数据页面向外写入至存储层,否则,如果高速缓冲存储 器充满还未被向外写入至存储层的弄脏页面,页面可能必须被刷新以 便接收更多的改变,这将时延引入至系统中。相比之下,在本文描述 的系统中,只要用于数据库引擎头节点的高速缓冲存储器中的数据页 面的重做日志已经被传送至分布式存储系统(以及写入确定已被接 收),数据库层可能将数据页面(其随时可通过存储层来再构造)从它的 高速缓冲存储器驱逐。

在本文所述的系统的一些实施方案中,崩溃恢复、闪回、和时间 点复原操作可能不需要重做日志或撤销日志的重播。反而,它们可包 括建造一个实例、将当前卷LSN重新设置成合适的提交点、以及重 新开始数据库服务。

在一些实施方案中本文描述的数据库系统可被缩放以便容纳比 一些现存的数据库更大的数据库表格和/或更高的吞吐量,而不用忍 受与先前数据库缩放方法关联的一些缺点(例如,根据复杂性和/或成 本的缺点)。例如,在一些实施方案中,可能不存在对卷大小的实际 限制,并且卷可以能够动态增长,而没有可用性损失或性能改变(例 如,通过添加附加的区段保护组)。此外,假定写入流量散布在区段 上,可使得IOPS事实上无边界。例如,在一些实施方案中,IOPS可 能增加或减少而不影响当前运行的数据库的性能,任何必须的再剥离 在后台中执行同时新的写入被转发至存储层。在此类实施方案中,可 使得查询性能可预测和一致的,而不需要在备份操作或重新镜像期间 冻结IO流量。反而,存储层可管理剥离、镜像和热管理,将这些责 任从数据库层或管理员移除。

如本文所述,在被确认返回数据库层之前,可使得在存储层中的 所有写入在持久介质上耐用。这可阻止在大规模电力事件上的逻辑破 坏,并且在此类情况下可移除从备份复原的需要。在一些实施方案中, 需要从备份复原的唯一时间可能为响应于顾客错误(例如,表格的意 外删除,或类似的)。

在一些实施方案中,由于复制操作包含移动日志记录,并且非数 据库,复制的性能影响可能远低于在其他数据库系统中。此外,在可 用性区上的写入协调可能在存储层处执行,并且可能不需要使用用于 同步复制的保留的数据库备用节点,当与现存的数据库系统比较时这 可减少成本。

在各种实施方案中,本文所述的方法可通过硬件和软件的任何结 合来实施。例如,在一个实施方案中,所述方法可由包括执行程序指 令的一个或多个处理器的计算机系统来实施,所述程序指令存储在连 接至处理器的计算机可读存储介质上。程序指令可被配置来实施本文 所述的功能(例如,实施数据库服务/系统和/或本文所述的存储服务/ 系统的各种服务器和其他部件的功能)。

图14为示出根据各种实施方案的被配置来实施本文所述的数据 库系统的至少一部分的计算机系统的框图。例如,在不同的实施方案 中,计算机系统1400可被配置来实施数据库层的数据库引擎头节点、 或独立分布式数据库优化存储系统的多个存储节点中的一个,所述独 立分布式数据库优化存储系统存储数据库表格和代表数据库层的客 户端的关联元数据。计算机系统1400可能是各种类型的装置中的任 何一种,包括但不限于:个人计算机系统、台式电脑、膝上电脑或笔 记本电脑、主机计算机系统、手持式计算机、工作站、网络计算机、 消费装置、应用服务器、存储装置、电话、移动电话、或大体上任何 类型的计算装置。

计算机系统1400包括通过输入/输出(I/O)接口1430连接至系统 存储器1420的一个或多个处理器1410(其中的任何一个可包括多个 核心,所述多个核心可为单线程的或多线程的)。计算机系统1400还 包括耦接到I/O接口1430的网络接口1440。在各种实施方案中,计 算机系统1400可为包括一个处理器1410的单一处理器系统,或包括 若干处理器1410(例如两个、四个、八个或另一合适数量)的多处理器 系统。处理器1410可为能够执行指令的任何处理器。例如,在各种 实施方案中,处理器1410可为实施各种指令集架构(ISA)中任何一种 架构的通用或嵌入式处理器,所述架构例如x86、PowerPC、SPARC、 或MIPS ISA或任何其他合适ISA。在多处理器系统中,每一个处理 器1410可通常但不一定实施相同的ISA。计算机系统1400也包括一 个或多个网络通信装置(例如,网络接口1440),用于与其他系统和/ 或部件通过通信网络(例如,因特网、LAN等)通信。例如,在系统 1400上执行的客户端应用程序可使用网络接口1440,以便与在单个 服务器或一组服务器上执行的服务器应用程序通信,所述一组服务器 实施本文所述的数据库系统的一个或多个部件。在另一实例中,在计 算机系统1400上执行的服务器应用程序的实例可使用网络接口 1440,以便与可能在其他计算机系统(例如,计算机系统1490)上执行 的服务器应用程序(或另一服务器应用程序)的其他实例通信。

在所述的实施方案中,计算机系统1400也包括一个或多个持久 的存储装置1460和/或一个或多个I/O装置1480。在各种实施方案中, 持久存储装置1460可对应于磁盘驱动、磁带驱动、固态存储器、其 他大容量存储装置、或任何其他持久存储装置。计算机系统1400(或 分布式应用程序或在其上操作的操作系统)可如期望的将指令和/或数 据存储在持久存储装置1460中,并且可按需检索存储的指令和/或数 据。例如,在一些实施方案中,计算机系统1400可代管存储系统服 务器节点,并且持久存储1460可包括附接至那个服务器节点的SSD。

计算机系统1400包括被配置来存储可由处理器1410访问的指令 和数据的一个或多个系统存储器1420。在各种实施方案中,系统存 储器1420可使用任何合适的存储器技术(例如,高速缓冲存储器、静 态随机存取存储器(SRAM)、DRAM、RDRAM、EDO RAM、DDR 10 RAM、同步动态RAM(SDRAM)、Rambus RAM、EEPROM、非暂时 性/闪存类型的存储器、或任何其他类型的存储器中的一个或多个)来 实施。系统存储器1420可包含程序指令1425,所述程序指令1425 可由处理器1410执行以便实施本文所述的方法和技术。在各种实施 方案中,程序指令1425可能以平台本地二进制、任何解译语言(如 JavaTM字节代码)、或以任何其他语言(C/C++、JavaTM等)、或以其 任何组合来编码。例如,在所示的实施方案中,程序指令1425包括 程序指令,所述程序指令可执行以便实施数据库层的数据库引擎头节 点、或独立分布式数据库优化存储系统的多个存储节点中的一个的功 能性,所述独立分布式数据库优化存储系统在不同的实施方案中存储 数据库表格和代表数据库层的客户端的关联元数据。在一些实施方案 中,程序指令1425可实施多个独立客户端、服务器节点、和/或其他 部件。

在一些实施方案中,程序指令1425可包括可执行以便实施操作 系统(未示出)的指令,所述操作系统可为各种操作系统中的任何一种, 如UNIX、LINUX、SolarisTM、MacOSTM、WindowsTM等。程序 指令1425中的任何一个或所有可被提供作为可包括具有在其上存储 的指令的非暂时性计算机可读存储介质的计算机程序产品、或软件, 所述指令可用于编程计算机系统(或其他电子装置)以便根据各种实施 方案执行进程。非暂时性的计算机可读的存储介质可包括用于存储机 器(例如,计算机)可读的形式(例如软件、处理应用程序)的信息的任 何机构。一般来说,非暂时性的计算机可访问的介质可包括计算机可 读的存储介质或存储器介质,例如磁性介质或光学介质,例如经由I/O 接口1430连接至计算机系统1400的磁盘或DVD/CD-ROM。非暂时 性计算机可读存储介质还可以包括可作为系统存储器1420或另一类 型的存储器被包括在计算机系统1400的一些实施方案中的任何易失 性或非易失性介质,如RAM(例如,SDRAM、DDR SDRAM、RDRAM、 SRAM等)、ROM等。在其他实施方案中,程序指令可使用通过通信 介质(如网络链接和/或无线链接)传达的光学、声学或其他形式的传播 信号(例如,载波、红外线信号、数字信号等)来通信,如可通过网络 接口1440执行的。

在一些实施方案中,系统存储器1420可包括可如本文所述配置 的数据存储1445。例如,在不同时间和在各种实施方案中,如本文 描述成由数据库层(例如,在数据库引擎头节点上)存储的信息(如事务 日志、撤销日志、高速缓存的数据页面、或在执行本文所述的数据库 层功能中使用的其他信息)可存储在数据存储1445中、或在一个或多 个节点上的系统存储器1420的另一部分上、在持久存储1460中、和 /或在一个或多个远程存储装置1470上。类似的,在不同时间和在各 种实施方案中,如本文描述成由存储层存储的信息(例如,重做日志 记录、合并的数据页面、和/或在执行本文所述的分布式存储系统功 能中使用的其他信息)可存储在数据存储1445中、或在一个或多个节 点上的系统存储器1420的另一部分上、在持久存储1460中、和/或 在一个或多个远程存储装置1470上。一般而言,系统存储器1420(例 如,系统存储器1420内的数据存储1445)、持久存储1460、和/或远 程存储1470可存储数据块、数据块复制品、与数据块和/或它们的状 态关联的元数据、数据块配置信息、和/或可在实施本文所述的方法 和技术中使用的任何其他信息。

在一个实施方案中,I/O接口1430可被配置来协调处理器1410、 系统存储器1420和系统中的任何外围装置之间的I/O流量,包括通 过网络接口1440或其他外围接口。在一些实施方案中,I/O接口1430 可执行任何必需协议、时序或其他数据转换以便将来自一个部件(例 如,系统存储器1420)的数据信号转换成适合于由另一个部件(例如, 处理器1410)使用的格式。在一些实施方案中,I/O接口1430可包括 对于通过各种类型的外围总线附接的装置的支持,所述外围总线例如 外围组件互连(PCI)总线标准或通用串行总线(USB)标准的变化形式。 在一些实施方案中,I/O接口1430的功能可分成两个或更多个单独的 部件中,例如北桥和南桥。另外,在一些实施方案中,I/O接口1430 的一些或所有功能性,例如至系统存储器1420的接口,可直接并入 处理器1410中。

例如,网络接口1440可被配置来允许数据在计算机系统1400与 附接至网络的其他装置之间交换,所述其他装置如其他计算机系统 1490(其可实施一个或多个存储系统服务器节点、数据库引擎头节点、 和/或本文所述的数据库系统的客户端)。此外,网络接口1440可被配 置来允许在计算机系统1400与各种I/O装置1450和/或远程存储1470 之间的通信。输入/输出装置1450可在一些实施方案中包括一个或多 个显示终端、键盘、小键盘、触摸屏、扫描装置、语音或光学识别装 置,或适合于由一个或多个计算机系统1400输入或撷取数据的任何 其他装置。多个输入/输出装置1450可存在于计算机系统1400中或 可分布于计算机系统1400的不同节点上。在一些实施方案中,类似 输入/输出装置可与计算机系统1400分开并且可经由有线或无线连 接,例如网络接口1440来与包括计算机系统1400的分布式系统的一 个或多个节点相互作用。网络接口1440通常可支持一个或多个无线 网络协议(例如,Wi-Fi/IEEE 802.11、或另一无线网络标准)。然而, 在各个实施方案中,网络接口1440可以支持经由任何合适的有线或 无线通用数据网络(例如以太网网络类型)进行通信。另外,网络接口 1440可以支持经由电信/电话网络(如模拟语音网络或数字光纤通信 网络)、经由存储区域网络(如光纤信道SAN)或经由任何其他合适类 型的网络和/或协议进行通信。在各种实施方案中,计算机系统1400 可包括多于、少于、或不同于图14所示的那些的部件(例如,显示器、 视频卡、音频卡、外围装置、其他网络接口,如ATM接口、以太网 接口、帧中继接口等)。

注意本文所述的分布式系统实施方案中的任何一个,或它们的部 件中的任何一个,可被实施作为一个或多个网络服务。例如,数据库 系统的数据层内的数据库引擎头节点可呈现数据库服务和/或其他类 型的数据存储服务,所述数据库服务和/或其他类型的数据存储服务 对客户端采用文本所述的分布式存储系统,如网络服务。在一些实施 方案中,网络服务可由被设计来支持通过网络的彼此协作的机对机相 互作用的软件和/或硬件系统实施。网络服务可具有以机器可处理格 式描述的接口,如网络服务描述语言(WSDL)。其他系统可能以由描 述网络服务的接口的描述规定的方式与网络服务相互作用。例如,网 络服务可限定其他系统可调用的各种操作,并且可限定特定的应用编 程接口(API),当请求各种操作时,其他系统可能期望服从所述特定 的应用编程接口(API)。

在各种实施方案中,通过使用包括与网络服务请求关联的参数和 /或数据的消息,网络服务可被请求或调用。此类消息可根据特定的 标记语言(如可延伸标记语言(XML))被格式化,和/或使用协议(简单对 象访问协议(SOAP))来封装。为执行网络服务请求,网络服务客户端 可装配包括所述请求的消息,以及使用基于因特网的应用层转移协议 (如超文本传输协议(HTTP))将所述消息传达至对应于网络服务的可 寻址端点(例如,统一资源定位符(URL))。

在一些实施方案中,网络服务可使用表述性状态转移(“RESTful”) 技术而不是基于消息的技术来实施。例如,根据RESTful技术实施的 网络服务可通过包括在HTTP方法(如PUT、GET或DELETE)内而不 是封装在SOAP消息内的参数来调用。

鉴于以下条款,上述实施方案可更好地理解:

1.一种计算系统,其包括:

多个计算节点,其中的每一个包括至少一个处理器和存储器;

其中所述多个计算节点中的一个或多个被配置来实施数据库服 务,并且其中所述数据库服务包括数据库引擎头节点;

其中所述多个计算节点中的两个或更多的其他节点被配置来实 施分布式存储服务的服务器节点,所述分布式存储服务存储数据库表 格的部分作为在一个或多个存储装置上的各自数据页面;

其中所述数据库引擎头节点被配置来:

从所述数据库服务的客户端接收指向数据库表格中的给定数据 记录的写入请求,其中所述写入请求指定将对所述给定数据记录进行 的修改;

产生代表将对所述给定数据记录进行的所述修改的重做日志记 录;

将所述重做日志记录,但非包括所述给定数据记录的数据页面, 发送至存储包括所述给定数据记录的版本的所述数据页面的所述分 布式存储服务的特定服务器节点;

其中所述分布式存储服务的所述特定服务器节点被配置来:

从所述数据库引擎头节点接收所述重做日志记录;

将所述重做日志记录写入至一个或多个存储装置;

将所述重做日志记录被写入的确认返回至所述数据库引擎头节 点;以及

在返回所述确认之后:

产生包括所述给定数据记录的当前版本的所述数据页面,其中为 产生所述当前版本的所述数据页面,所述分布式存储服务的所述特定 服务器节点被配置来将所述所接收的重做日志记录和代表对所述数 据页面的修改的一个或多个其他重做日志记录应用至先前存储版本 的所述数据页面;以及

将所述当前版本的所述数据页面写入至一个或多个存储装置。

2.如条款1所述的计算系统,

其中所述数据库引擎头节点被进一步配置来:

从数据库客户端接收对读取包括所述给定数据记录的所述数据 页面的请求;以及

响应于接收对读取所述数据页面的所述请求,将用于当前版本的 所述数据页面的请求发送至所述分布式存储服务的所述特定服务器 节点。

3.如条款2所述的计算系统,

其中所述分布式存储服务的所述特定服务器节点被进一步配置 来:

从所述数据库引擎头节点接收用于包括所述给定数据记录的所 述当前版本的所述数据页面的所述请求;以及

响应于接收用于所述当前版本的所述数据页面的所述请求,将所 述当前版本的所述数据页面返回至所述数据库引擎头节点。

4.如条款3所述的计算系统,其中响应于接收用于所述当前版 本的所述数据页面的所述请求,产生所述当前版本的所述数据页面被 执行。

5.如条款1所述的计算系统,

其中所述数据库引擎头节点包括用于所述分布式存储系统的客 户端侧驱动器;以及

其中为将所述重做日志记录发送至所述分布式存储系统的所述 特定服务器节点,所述客户端侧驱动器被配置来:

确定存储包括所述给定数据记录的版本的所述数据页面的所述 分布式存储服务的所述特定服务器节点;以及

将所述重做日志记录发送至代表所述数据库服务的所述分布式 存储系统的所述特定服务器节点。

6.一种系统,其包括:

一个或多个计算节点,其中的每一个包括至少一个处理器和存储 器,其中所述一个或多个计算节点被配置来共同实施数据库服务,并 且其中所述数据库服务包括数据库引擎头节点和针对分布式存储系 统的接口;

其中所述数据库引擎头节点被配置来:

从所述数据库服务的客户端接收指向数据库表格中的给定数据 记录的写入请求,其中所述写入请求指定将对所述给定数据记录进行 的修改;

产生代表将对所述给定数据记录进行的所述修改的重做日志记 录;

将所述重做日志记录,但非包括所述给定数据记录的数据页面, 通过所述接口发送至存储包括所述给定数据记录的版本的所述数据 页面的所述分布式存储服务的特定服务器节点;

通过所述接口接收所述重做日志记录已经被写入至所述分布式 存储服务的确认;以及

将指示所述请求的写入已被执行的响应返回至所述数据库客户 端。

7.如条款6所述的系统,其中所述数据库引擎头节点被进一步 配置来:

从所述数据库服务的客户端接收对读取包括所述给定数据记录 的所述数据页面的请求;以及

响应于接收对读取所述数据页面的所述请求:

通过所述接口将用于当前版本的所述数据页面的请求发送至所 述分布式存储服务的所述特定服务器节点;

通过所述接口接收所述当前版本的所述数据页面;以及

将所述当前版本的所述数据页面返回至从其接收对读取所述数 据页面的所述请求的所述客户端。

8.如条款7所述的系统,

其中所述数据库引擎头节点包括存储最近访问的数据页面的高 速缓冲存储器;

其中,响应于确定当前版本的所述数据页面不存在于所述高速缓 冲存储器中,所述数据库引擎头节点被配置来将用于所述当前版本的 所述数据页面的所述请求发送至所述特定服务器节点。

9.如条款6所述的系统,

其中所述数据库引擎头节点包括存储最近访问的数据页面的高 速缓冲存储器;

其中所述高速缓冲存储器存储包括所述给定数据记录的所述数 据页面的副本;以及

其中所述数据库引擎头节点被进一步配置来将在所述写入请求 中指定的所述修改应用至所述数据页面的所述高速缓存的副本中的 所述给定数据记录。

10.如条款6所述的系统,其中所述数据库引擎头节点被进一步 配置来:

在发送所述重做日志记录之前,确定所述分布式存储服务的所述 特定服务器节点,所述分布式存储服务存储包括所述给定数据记录的 版本的所述数据页面,其中确定所述特定服务器节点通过针对所述分 布式存储系统的所述接口来执行。

11.如条款6所述的系统,其中所述数据库引擎头节点被进一步 配置来:

从所述数据库服务的一个或多个客户端接收指向所述数据库表 格的两个或更多的附加写入请求;以及

服务所述两个或更多的附加写入请求,其中服务所述两个或更多 的附加写入请求包括施行把所述数据库表格作为目标的事务的原子 性、隔离和一致性特性。

12.一种系统,其包括:

一个或多个计算节点,其中的每一个包括至少一个处理器和存储 器,其中所述一个或多个计算节点被配置来共同实施分布式存储服 务,所述分布式存储服务在代表所述分布式存储服务的客户端的一个 或多个存储装置上存储数据块;

其中所述一个或多个计算节点中的给定的一个被配置来:

从所述客户端接收用于在所述给定计算节点上存储的特定数据 块的更新记录,其中所述更新记录指定将对所述特定数据块进行的修 改;

将所述更新记录写入至所述一个或多个存储装置中的一个或多 个;以及

将所述更新记录被写入的确认返回至所述客户端,而不用等待当 前版本的所述特定数据块产生或等待在所述更新记录中指定的所述 修改被应用至所述特定数据块。

13.如条款12所述的系统,其中在返回所述确认之后,所述一 个或多个计算节点中的所述给定的一个被进一步配置来:

取决于所述更新记录产生当前版本的所述特定数据块;以及

将所述当前版本的所述特定数据块写入至所述一个或多个存储 装置中的一个或多个。

14.如条款13所述的系统,其中为产生所述当前版本的所述特 定数据块,所述给定计算节点被配置来将所述更新记录应用至先前存 储版本的所述特定数据块。

15.如条款14所述的系统,其中为产生所述当前版本的所述特 定数据块,所述给定计算节点被进一步配置,以便将代表对所述特定 数据块的修改的一个或多个其他更新记录应用至所述先前存储版本 的所述特定数据块,所述一个或多个其他更新记录自从所述先前存储 版本的所述特定数据块被写入后被接收。

16.如条款13所述的系统,其中为产生所述当前版本的所述特 定数据块,所述给定计算节点被配置来执行后台处理,以便将所述更 新记录和一个或多个其他更新记录应用至先前存储版本的所述特定 数据块,同时前台进程接收把所述分布式存储服务存储的数据块作为 目标的读取和写入请求。

17.如条款13所述的系统,

其中所述一个或多个计算节点中的所述给定的一个被进一步配 置来从所述客户端接收把所述数据块作为目标的读取请求;以及

其中响应于接收所述读取请求,产生所述当前版本的所述特定数 据块被执行。

18.如条款12所述的系统,

其中所述一个或多个计算节点中的另一个存储所述特定数据块; 以及

其中所述一个或多个计算节点中的所述另一个被配置来:

从所述客户端接收用于所述特定数据块的所述更新记录;

将所述更新记录写入至所述一个或多个存储装置中的另一个;

将所述更新记录被写入的另一确认返回至所述客户端;以及

在返回所述另一确认之后:

产生当前版本的所述特定数据块,其中为产生所述当前版本的所 述特定数据块,所述给定计算节点被配置来将所述所接收的更新记录 应用至先前存储版本的所述特定数据块;以及

将所述当前版本的所述特定数据块写入至所述一个或多个存储 装置中的另一个。

19.一种存储程序指令的非暂时性计算机可读存储介质,所述程 序指令在一个或多个计算机上执行时致使所述一个或多个计算机执 行以下操作:

接收包括把存储在分布式存储系统中的数据块作为目标的写入 请求的查询,其中所述写入请求指定对所述数据块进行的修改;

产生代表将对所述数据块进行的所述修改的重做日志记录;

确定存储所述数据块的在所述分布式存储系统中的节点;

将所述重做日志记录,但非所述数据块的副本,发送至所述分布 式存储系统中的所述确定的节点;以及

从所述分布式存储系统中的所述确定的节点接收所述重做日志 记录已被写入至所述确定的节点上的存储装置的确认。

20.如条款19所述的非暂时性计算机可读存储介质,其中当在 所述一个或多个计算机上执行时,所述程序指令进一步致使所述一个 或多个计算机在所述产生重做日志前执行以下操作:

解析所述查询;以及

产生查询执行计划。

21.如条款19所述的非暂时性计算机可读存储介质,其中当在 所述一个或多个计算机上执行时,所述程序指令进一步致使所述一个 或多个计算机执行以下操作:

确定存储所述数据块的在所述分布式存储系统中的一个或多个 其他节点,其中所述一个或多个其他节点为与所述确定的节点相同的 保护组的一部分;以及

将所述重做日志记录,但非所述数据块的副本,发送至所述分布 式存储系统中的所述一个或多个其他节点。

22.如条款21所述的非暂时性计算机可读存储介质,其中当在 所述一个或多个计算机上执行时,所述程序指令进一步致使所述一个 或多个计算机执行以下操作:

从所述保护组中的法定数目的节点接收所述重做日志记录已经 被写入至所述法定数目的节点中的每个所述节点上的存储装置的确 认;以及

响应于从所述法定数目的节点接收确认,将指示所述写入请求已 经被提交的所述查询响应返回至从其接收所述查询的客户端。

23.如条款19所述的非暂时性计算机可读存储介质,其中从数 据库服务接收所述查询。

24.一种存储程序指令的非暂时性计算机可读存储介质,所述程 序指令在一个或多个计算机上执行时致使所述一个或多个计算机执 行以下操作:

将包括数据库表格的数据记录的多个数据页面存储在一个或多 个存储系统服务器节点上,每个节点包括一个或多个存储装置;

接收指向特定数据页面的重做日志记录;

将所述重做日志记录存储在所述存储装置中的一个或多个上;

确定合并操作被批准用于所述特定数据页面;

响应于所述确定:

执行用于所述特定数据页面的合并操作,其中执行所述合并操作 包括将所述重做日志记录和一个或多个其他重做日志记录应用至先 前产生的版本的所述特定数据页面,以便产生当前版本的所述特定数 据页面;以及

将所述当前版本的所述特定数据页面存储至所述存储装置中的 一个或多个。

25.如条款24所述的非暂时性计算机可读存储介质,其中当在 所述一个或多个计算机上执行时,所述程序指令进一步致使所述一个 或多个计算机执行以下操作:

接收指向所述特定数据页面的读取请求;以及

响应于接收所述读取请求,返回所述当前版本的所述特定数据页 面。

26.如条款24所述的非暂时性计算机可读存储介质,其中合并 操作被批准的所述确定包括确定指向所述特定数据页面的重做日志 记录的数目超过用于合并操作的预定阈值,所述重做日志记录已被接 收但还未被应用至所述特定数据页面。

27.如条款24所述的非暂时性计算机可读存储介质,其中合并 操作被批准的所述确定包括确定节点或存储装置已经失效。

28.如条款24所述的非暂时性计算机可读存储介质,其中当在 所述一个或多个计算机上执行时,所述程序指令进一步致使所述一个 或多个计算机执行以下操作:

接收指向力另一数据页面的另一重做日志记录;

将所述另一重做日志记录存储在所述存储装置中的一个或多个 上;

确定合并操作未被批准用于所述另一数据页面;以及

响应于所述确定,抑制执行用于另一数据页面的合并操作。

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

尽管已相当详细地描述了以上实施方案,但一旦完全了解以上公 开内容,各种变化和修改对所属领域的技术人员将变为显而易见。旨 在以下权利要求被解释成包含所有这些修改和变化,并且相应地,以 上描述应视为具有说明性而非限制性意义。

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