首页 / 专利库 / 赌博 / 交易记录 / 用于分布式数据库系统的快速崩溃恢复

用于分布式数据库系统的快速崩溃恢复

阅读:791发布:2023-01-23

专利汇可以提供用于分布式数据库系统的快速崩溃恢复专利检索,专利查询,专利分析的服务。并且一种分布式 数据库 系统可实施快速崩溃恢复。在从数据库头 节点 故障恢复之后,可与存储用于数据库的数据的分布式存储系统的一个或多个存储节点建立连接,所述数据库由所述数据库头节点实施。在与所述存储节点建立所述连接之后,可使得所述数据库可供用于 访问 ,如用于各种访问 请求 。在各种实施方案中,可不重播重做日志记录以便对所述数据库提供访问。在至少一些实施方案中,响应于请求,所述存储节点可提供存储用于所述数据库的数据的当前状态。,下面是用于分布式数据库系统的快速崩溃恢复专利的具体信息内容。

1.一种系统,其包括:
多个存储节点,所述多个存储节点实施分布式存储系统,其中所述分布式存储系统被配置来实施用于数据库的日志结构化数据存储,其中先前已经在所述多个存储节点处从数据库系统接收多个重做日志记录,其中所述重做日志记录中的每一个描述对存储在所述多个存储节点之中、用于所述数据库的数据的改变;
数据库头节点,所述数据库头节点实施所述数据库系统,其中所述数据库头节点被配置来执行故障恢复操作以:
与所述多个存储节点建立连接;并且
在与所述多个存储节点建立所述连接之后,针对一个或多个访问请求对所述数据库提供访问。
2.如权利要求1所述的系统,其中对所述数据库提供访问,而无需重播所述多个重做日志记录。
3.如权利要求2所述的系统,其中所述数据库系统头节点进一步被配置来:
接收对所述数据库的访问请求;
基于所接收的访问请求,向所述多个存储节点中的一个发送对存储在所述存储节点处的数据页面的当前状态的请求;并且
从所述存储节点接收在所请求数据页面的当前状态下的所请求数据页面,其中将所述多个重做日志记录中的一个或多个应用至所述数据页面的先前保存状态,以在所述存储节点处产生在所述数据页面的当前状态下的所述数据页面。
4.如权利要求1所述的系统,其中向所述多个存储节点发送的所述多个重做日志记录中的至少一些构成系统事务,其中所述多个存储节点中的一个存储节点被配置来:
确定所述系统事务是未完成的;并且
在产生由所述多个重做日志记录中的所述至少一些改变的数据页面的当前状态时,将所述至少一些重做日志记录识别为将不被应用。
5.如权利要求1所述的系统,其中向所述多个存储节点发送的所述多个重做日志记录中的至少一些构成系统事务,其中所述数据库系统头节点进一步被配置来:
确定所述系统事务是未完成的;
在产生由所述多个重做日志记录中的所述至少一些改变的数据页面的当前状态时,将所述至少一些重做日志记录识别为将不被应用;并且
向所述多个存储节点中的一个或多个发送指示所识别的所述多个重做日志记录中将不被应用的至少一些的通知。
6.一种方法,其包括:
由实施数据库头节点的一个或多个计算装置执行以下各项:
在从数据库头节点故障恢复之后:
与实施存储用于数据库的数据的分布式存储系统的多个存储节点中的一个或多个存储节点建立连接,其中所述分布式存储系统被配置来实施用于所述数据库的日志结构化数据存储,其中先前已经在所述多个存储节点处接收多个重做日志记录,其中所述重做日志记录中的每一个描述对存储在其被接收处的相应存储节点处的用于所述数据库的数据的改变;以及
在与所述多个存储节点中的所述一个或多个存储节点建立所述连接之后,使得所述数据库可供用于访问。
7.如权利要求6所述的方法,其还包括:
接收对所述数据库的访问请求;
响应于接收所述访问请求,从所述一个或多个存储节点请求存储用于所述数据库的所述数据的一部分的一个或多个数据页面的当前状态;以及
从所述一个或多个存储节点接收存储用于所述数据库的所述数据的所述部分的所述一个或多个数据页面的当前状态,以用于服务所述访问请求。
8.如权利要求7所述的方法,其中由所述一个或多个存储节点中的一个产生所接收的存储用于所述数据库的所述数据的所述部分的所述一个或多个数据页面中的至少一个的所述当前状态,所述一个存储节点将所述多个重做日志记录中的一个或多个重播至先前存储版本的所述至少一个数据页面。
9.如权利要求8所述的方法,其中由所述一个或多个存储节点中的一个发送与所接收的存储用于所述数据库的所述数据的所述部分的所述一个或多个数据页面中的所述至少一个不同的一个的所述当前状态,而无需将所述多个重做日志记录中的一个或多个重播至先前存储版本的所述数据页面。
10.如权利要求7所述的方法,其中所述数据库头节点维持多个撤销日志记录,用于撤销作为重做日志记录发送至所述多个存储的改变,其中所述方法还包括:
确定从所述一个或多个存储节点接收的所述一个或多个数据页面中的一个受未完成用户事务影响,其中所述用户事务将改变指向存储在所述一个或多个存储节点处的所述数据、包括所述一个数据页面;以及
将一个或多个撤销日志记录应用至所述数据页面,以撤销由所述用户事务指向所述数据页面的改变。
11.如权利要求10所述的方法,其中所述数据库头节点维持指示包括所述用户事务的多个未完成用户事务的事务表,其中所述方法还包括:
至少部分地基于所述事务表,确定受所述多个未完成用户交易中的至少一个影响的一个或多个另外数据页面;
从所述一个或多个存储节点请求一个或多个另外数据页面的当前状态;
响应于接收所述一个或多个另外数据页面,将另外一个或多个撤销日志记录应用至所述一个或多个另外数据页面,以撤销由所述至少一个未完成用户事务指向所述一个或多个另外数据页面的改变。
12.如权利要求11所述的方法,其中所述确定所述一个或多个另外数据页面、所述请求所述一个或多个另外数据页面以及所述将所述另外一个或多个撤销日志记录应用至所述一个或多个另外数据页面作为后台进程的一部分在所述数据库头节点处执行,并且其中所述接收所述访问请求、所述请求所述一个或多个数据页面的所述当前状态以及所述接收所述一个或多个数据页面的当前状态作为前台进程的一部分执行。
13.如权利要求6所述的方法,其还包括:
在从所述数据库头节点故障恢复之后:
在使得所述数据库可供用于访问之前,向所述多个存储节点发送对将存储在所述多个存储节点处的用于所述数据库的所述数据复原至对应于先前记录的快照的状态,其中所述复原包括将所述多个重做日志记录中的一个或多个应用至先前版本的所述数据。
14.如权利要求6所述的方法,其中使得所述数据库可供用于访问看,而无需重播所述多个重做日志记录。
15.一种系统,其包括:
一个或多个处理器;以及
一个或多个存储器,所述存储器存储当由所述一个或多个处理器执行时实施数据库系统的数据库头节点的程序指令,所述数据库头节点实施以下各项:
在从数据库头节点故障恢复之后:
与实施存储用于数据库的数据的分布式存储系统的多个存储节点中的一个或多个存储节点建立连接,其中所述分布式存储系统被配置来实施用于所述数据库的日志结构化数据存储,其中先前已经在所述多个存储节点处接收多个重做日志记录,其中所述重做日志记录中的每一个描述对存储在其被接收处的相应存储节点处的用于所述数据库的数据的改变;以及
在与所述多个存储节点中的所述一个或多个存储节点建立所述连接之后,针对一个或多个访问请求对所述数据库提供访问。

说明书全文

用于分布式数据库系统的快速崩溃恢复

[0001] 背景
[0002] 在一些情况下,软件堆栈的各种部件的分布可提供(或支持)容错性(例如,通过复制)、较高耐久性、和较不昂贵的解决方案(例如,通过使用许多较小的、较不昂贵的部件,而不是较少大型的、昂贵的部件)。然而,在历史上数据库已经是至少服从分布的软件堆栈的部件。例如,可能难以分布数据库同时仍确保期望它们提供的所谓ACID特性(例如,原子性、一致性、隔离性、和耐久性)。
[0003] 尽管大部分现存的相关数据库未被分布,使用两个常用模型中的一个来“向外扩展”(与通过仅采用较大单片系统的“向上扩展”相反)一些现存的数据库:“无共享”模型和“共享磁盘”模型。一般来说,在“无共享”模型中,接收的查询分解成数据库碎片(其中的每一个包括查询部件),这些碎片被发送至不同的计算机节点用于查询处理,并且在它们返回前收集和集合结果。一般来说,在“共享磁盘”模型中,群集中的每个计算机节点访问相同的基础数据。在采用这个模型的系统中,必须非常小心以便管理高速缓存一致性。在这两个模型中,在多个节点(包括单机数据库实例的所有功能性)上复制大型、单片数据库,并且添加“胶合”逻辑以便将它们缝合在一起。例如,在“无共享”模型中,胶合逻辑可提供分配器的功能性,所述分配器使查询细分、将它们发送至多个计算机节点、以及随后组合结果。在“共享磁盘”模型中,胶合逻辑可用来将多个节点的高速缓存融合在一起(例如,以便管理在高速缓存层处的一致性)。部署这些“无共享”和“共享磁盘”数据库系统可能花费较大,并且维持起来较复杂,以及它们可能过度服务许多数据库使用情况。附图说明
[0004] 图1为示出根据一个实施方案的数据库软件堆栈的各种部件的框图
[0005] 图2为示出根据一些实施方案的服务系统架构的框图,所述服务系统架构可被配置来实施基于网络服务的数据库服务。
[0006] 图3为示出根据一个实施方案的数据库系统的各种部件的框图,所述数据库系统包括数据库引擎和独立分布式数据库存储服务。
[0007] 图4为示出根据一个实施方案的分布式数据库优化存储系统的框图。
[0008] 图5为示出根据一个实施方案的数据库系统中的独立分布式数据库优化存储系统的使用的框图。
[0009] 图6为示出根据一个实施方案的可将数据和元数据存储在分布式数据库优化存储系统的给定节点上的方式的框图。
[0010] 图7为示出根据一个实施方案的数据库容量的示例性配置的框图。
[0011] 图8为示出根据一些实施方案的用于在分布式数据库系统中的系统范围检查点避免的方法的流程图
[0012] 图9A为展示根据一些实施方案的执行用于分布式数据库系统的快速崩溃恢复的方法的一系列图示。
[0013] 图9B为示出根据一些实施方案的执行用于分布式数据库系统的快速崩溃恢复的方法的流程图。
[0014] 图9C为示出根据一些实施方案的在所恢复数据库中处理访问请求的方法的流程图。
[0015] 图10为示出根据各种实施方案的被配置来实施数据库系统的至少一部分的计算机系统的框图,所述数据库系统包括数据库引擎和独立分布式数据库存储服务。
[0016] 虽然在本文中通过列举若干实施方案和示意性附图的实例的方式描述了实施方案,本领域的技术人员应认识到,实施方案并不限于所描述的实施方案或附图。应理解,附图和对其的详细描述并非意图将实施方案限于所公开的特定形式,而是相反,其意图在于涵盖落入由所附权利要求书所界定的精神和范围内的所有修改、等同物以及替代方案。本文中使用的任何标题都仅用于组织目的,并且并不意图用于限制描述或权利要求书的范围。贯穿本申请所使用的词语“可以”是在许可的意义上(即意指具有可能性)、而非强制的意义上(即意指必须)使用。词语“包括(include/including/includes)”指示开放性关系并且因此意味着包括但不限于。类似地,词语“具有(have/having/has)”也指示开放性关系,并且因此意味着具有但不限于。本文使用的术语“第一”、“第二”、“第三”等用作它们后面的名词的标签,并且不暗示任何类型的排序(例如,空间、时间、逻辑等),除非这种排序另有明确说明。
[0017] 各种部件可被描述为“被配置来”执行一个或多个任务。在这类情况下,“被配置来”是一般意味着“具有在操作过程中执行一个或多个任务的结构”的宽泛叙述。因此,部件可被配置来执行任务,即使是部件当前并未执行所述任务时(例如,计算机系统可被配置来执行操作,即使是所述操作当前并未被执行时)。在一些情况下,“被配置来”可以是一般意味着“具有在操作过程中执行一个或多个任务的电路系统”的结构的宽泛叙述。因此,部件可被配置来执行任务,即使是所述部件当前并未开启时。一般而言,形成对应于“被配置来”的结构的电路系统可包括硬件电路。
[0018] 为了方便描述,各种部件可被描述为执行一个或多个任务。这些描述应被解释为包括短语“被配置来”。叙述被配置来执行一个或多个任务的部件明确地意图不援引美国法典第35章第112条第六段对所述部件的解释。
[0019] “基于.”如本文所使用,此术语用于描述影响确定的一个或多个因素。此术语不排除可能影响确定的另外因素。也就是说,确定可仅仅是基于这些因素,或至少部分地基于这些因素。考虑短语“基于B确定A”。尽管B可能是影响A的确定的因素,但是这种短语不排除也基于C确定A。在其他例子中,可仅基于B来确定A。
[0020] 本公开的范围包括本文公开的任何特征或特征的组合(明确地或含蓄地)或其任何概括,无论它是否缓解了本文所提出的任何或所有问题。因此,在本申请(或要求其优先权的申请)的审理过程中可以就特征的任何此类组合制定新的权利要求书。具体地,参考所附权利要求书,来自从属权利要求的特征可与独立权利要求的特征相结合,并且来自相应独立权利要求的特征可以任何适当的方式而不是仅仅以所附权利要求书中列举的具体结合来组合。

具体实施方式

[0021] 本发明公开分布式数据库系统的系统范围检查点避免的各种实施方案。在一些实施方案中,分布式存储系统的存储节点可从数据库系统接收一个或多个重做日志记录,所述一个或多个重做日志记录链接至存储在存储节点上的特定数据页面。数据页面可以是存储用于数据库的数据的多个数据页面中的一个。至少部分地基于链接至特定数据页面的一个或多个重做日志记录,可检测特定数据页面的合并事件。可执行合并操作以将一个或多个日志记录应用至先前存储版本的特定数据页面,以产生在它的当前状态下的特定数据页面。
[0022] 本发明公开用于分布式数据库系统的快速崩溃恢复的各种实施方案。在一些实施方案中,数据库系统头节点可执行故障恢复操作。在从系统故障恢复之后,可与存储用于数据库的数据的分布式存储系统的存储节点建立连接。在一些实施方案中,在与存储节点建立连接之后,数据库头节点可使得数据库可供用于访问。在至少一些实施方案中,可接收一个或多个访问请求,并且可从存储节点请求和接收一个或多个数据页面的当前状态。
[0023] 本说明书首先描述被配置来实施系统范围检查点避免(例如,创建、删除、使用、操纵等)和快速崩溃恢复技术的示例性基于网络服务的数据库服务。示例性基于网络服务的数据库服务的描述中包括示例性基于网络服务的数据库服务的各个方面,如数据库引擎和独立分布式数据库存储服务。本说明书随后描述用于系统范围检查点避免和快速崩溃恢复的方法的各种实施方案的流程图。接下来,本说明书描述可实施所公开的技术的示例性系统。在整个说明书中提供各种实例。
[0024] 在一些实施方案中,本文中描述的系统可实施网络服务,所述网络服务使得客户端(例如,订阅者)能够在计算环境中操作数据存储系统。在一些实施方案中,数据存储系统可为高度可缩放的和可扩展的企业级数据库系统。在一些实施方案中,查询可指向横跨多个物理源分布的数据库存储,并且数据库系统可在所需的基础上扩大或缩小。在不同实施方案中,数据库系统可在各种类型和/或组织的数据库模式下有效工作。在一些实施方案中,客户端/订阅者可能以许多方式(例如,通过到数据库系统的SQL接口以交互方式)提交查询。在其他实施方案中,外部应用和程序可使用到数据库系统的开放数据库连接(ODBC)和/或Java数据库连接(JDBC)驱动器接口来提交查询。
[0025] 更具体地,在一些实施方案中,本文描述的系统可实施面向服务的数据库架构,在所述数据库架构中单个数据库系统的各种功能部件固有地分布。例如,不是将多个完全的和单片的数据库实例(其中的每一个可包括外来功能性,如应用服务器、搜索功能性、或超过需要用来提供数据库的核心功能的其他功能性)绑在一起,这些系统可将数据库的基本操作(例如,查询处理、事务管理、高速缓存和存储)组织成可单独和独立缩放的层。例如,在一些实施方案中,本文所描述的系统中的每个数据库实例可包括数据库层(其可包括单个数据库引擎头节点和客户端侧存储系统驱动器)、和独立分布式存储系统(其可包括共同执行在现有系统的数据库层中常规执行的操作中的一些的多个存储节点)。
[0026] 如本文更详细描述的,在一些实施方案中,数据库的一些最低平操作(例如,备份、复原、快照、恢复、日志记录操纵、和/或各种空间管理操作)可从数据库引擎卸载至存储层,并且分布在多个节点和存储装置上。例如,在一些实施方案中,不是数据库引擎对数据库(或其数据页面)应用改变以及随后将修改的数据页面发送至存储层,对存储的数据库(或其数据页面)的改变的应用可为存储层本身的责任。在此类实施方案中,可将重做日志记录而不是修改的数据页面发送至存储层,在其之后重做处理(例如,应用重做日志记录)可稍微徐缓地并且以分布式方式执行(例如,通过后台处理)。在一些实施方案中,崩溃恢复(例如,从存储的重做日志记录重建数据页面)也可由存储层执行,以及也可由分布式(并且在一些情况下徐缓的)后台处理执行。
[0027] 在一些实施方案中,因为只有重做日志(以及未修改的数据页面)被发送至存储层,在数据库层与存储层之间可存在比现有数据库系统中更少的网络流量。在一些实施方案中,每个重做日志可大约为它指定变化的对应数据页面大小的十分之一。注意从数据数据库层和分布式存储系统发送的请求可为异步的,并且多个此类请求可同时在发送中。
[0028] 一般来说,在被给予数据片之后,数据库的基本要求为它可最终交还回那个数据片。为此,数据库可包括若干不同部件(或层),其中的每一个执行不同的功能。例如,传统数据库可被认为具有三个层:用于执行查询解析、优化和执行的第一层;用于提供事务性、恢复和耐久性的第二层;以及在本地附接的磁盘上或在网络附接的存储区上提供存储的第三层。如以上指出的,对缩放传统数据库的先前尝试通常已包含复制数据库的所有三层,以及在多个机器上分布那些复制的数据库实例。
[0029] 在一些实施方案中,本文描述的系统可不同于传统数据库中的来划分数据库系统的功能性,并且可在多个机器上仅分布功能部件的子集(不是完全的数据库实例)以便实施缩放。例如,在一些实施方案中,面向客户端的层可被配置来接收请求,所述请求指定存储和检索什么数据,但未指定如何存储和检索所述数据。这个层可执行请求解析和/或优化(例如,SQL解析和优化),而另一层可负责查询执行。在一些实施方案中,第三层可负责提供结果的事务性和一致性。例如,这个层可被配置来施行一些所谓的ACID特性,具体地,把数据库作为目标的事务的原子性、维持数据库内的一致性、以及确保把数据库作为目标的事务之间的隔离。在一些实施方案中,第四层随后可负责在存在各种故障的情况下提供存储的数据的耐久性。例如,这个层可负责改变日志、从数据库崩溃恢复、管理对基础存储容量的访问和/或在基础存储容量中的空间管理。
[0030] 现在转向附图,图1为示出根据一个实施方案的数据库软件堆栈的各种部件的框图。如这个实例中示出的,数据库实例可包括多个功能部件(或层),其中的每一个提供数据库实例功能性的一部分。在这个实例中,数据库实例100包括查询解析和查询优化层(被示作110)、查询执行层(被示作120)、事务性和一致性管理层(被示作130)、和耐久性和空间管理层(被示作140)。如以上指出的,在一些现存数据库系统中,缩放数据库实例可包含复制整个数据库实例一次或多次(包括图1中示出的所有层),以及随后添加胶合逻辑以便将它们缝合在一起。在一些实施方案中,本文描述的系统反而可将耐久性和空间管理层140的功能性从数据库层卸载至独立存储层,并且可在存储层中的多个存储节点上分布那个功能性。
[0031] 在一些实施方案中,本文描述的数据库系统可保持图1所示的数据库实例的上半部的大部分结构,但可重新分布用于对存储层的备份、复原、快照、恢复、和/或各种空间管理操作的至少部分的责任。当与用来提供可缩放数据库的先前方法相比时,以这种方式重新分布功能性以及在数据库层与存储层之间紧密连接日志处理可改善性能、增加可用性和降低成本。例如,由于只有重做日志记录(其在大小上比实际数据页面小很多)可在节点上运送或在写入操作的时延路径内持续,所以可减少网络和输入/输出带宽要求。此外,数据页面的产生可在每个存储节点上独立地后台完成(如前台处理允许的),而不阻塞进入的写入操作。在一些实施方案中,使用日志结构化、非重写的存储可允许备份、复原、快照、时间点恢复、和容量增长操作被更有效地执行,例如,通过使用元数据操纵而不是移动或复制数据页面。在一些实施方案中,存储层也可承担复制代表客户端的在多个存储节点上存储的数据(和/或与所述数据关联的元数据,如重做日志记录)的责任。例如,数据(和/或元数据)可本地(例如,在单个“可用区”内,在所述单个“可用区”中存储节点集合在它自身的物理不同的、独立的基础结构上执行)复制和/或在单个区域或不同区域中的可用区上复制。
[0032] 在各种实施方案中,本文描述的数据库系统可支持用于各种数据库操作的标准或定制的应用编程接口(API)。例如,API可支持用于创建数据库、创建表格、更改表格、创建用户、删除用户、在表格中插入一个或多个行、复制值、从表格内选择数据(例如,查询表格)、取消或中止查询、创建快照、和/或其他操作。
[0033] 在一些实施方案中,数据库实例的数据库层可包括数据库引擎头节点服务器,所述数据库引擎头节点服务器接收来自各种客户端程序(例如,应用)和/或订阅者(用户)的读取和/或写入请求,随后解析它们并且发展执行计划以便实施关联的数据库操作。例如,数据库引擎头节点可发展对获得用于复杂的查询和连接的结果有必要的步骤系列。在一些实施方案中,数据库引擎头节点可管理在数据库系统的数据库层与客户端/订阅者之间的通信,以及在数据库层与独立分布式数据库优化存储系统之间的通信。
[0034] 在一些实施方案中,数据库引擎头节点可负责从端部客户端通过JDBC接口或ODBC接口来接收SQL请求,以及负责本地执行SQL处理和事务管理(其可包括定)。然而,并非在本地产生数据页面,数据库引擎头节点(或其各种部件)可产生重做日志记录,并且可将它们运送至独立分布式存储系统的适当节点。在一些实施方案中,用于分布式存储系统的客户端侧驱动器可在数据库引擎头节点上代管,并且可负责将重做日志记录路由至存储那些重做日志记录指向的区段(或其数据页面)的存储系统节点(或多个节点)。例如,在一些实施方案中,每个区段在形成保护组的多个存储系统节点上可为镜像的(或否则被形成为耐用的)。在此类实施方案中,客户端侧驱动器可记录在其上存储每个区段的节点,并且当接收客户端请求时,可将重做日志路由至在其上存储区段的所有节点(例如,异步地和基本上同时并行)。一旦客户端侧从保护组中的存储节点的写入群体接收返回的确认(其可指示重做日志记录已被写入至存储节点),它就可将请求的变化的确认发送至数据库层(例如,至数据库引擎头节点)。例如,在其中通过使用保护组使得数据耐用的实施方案中,数据库引擎头节点可能不能够提交事务,除非客户端侧驱动器从足够的存储节点实例接收回复以便构成写入群体。类似地,对于指向特定区段的读取请求,客户端侧驱动器可将读取请求路由至在其上存储所述区段的所有节点(例如,异步地和基本上同时并行地)。一旦客户端侧驱动器从保护组中的存储节点的读取群体接收请求的数据,它可将请求的数据返回至数据库层(例如,至数据库引擎头节点)。
[0035] 在一些实施方案中,数据库层(或更具体地,数据库引擎头节点)可包括在其中临时保持最近访问的数据页面的高速缓冲存储器。在此类实施方案中,如果接收将保持在此类高速缓冲存储器中的数据页面作为目标的写入请求,除了将对应的重做日志记录运送至存储层之外,数据库引擎可对保持在它的高速缓冲存储器中的数据页面的复制应用改变。然而,不同于在其他数据库系统中,保持在这个高速缓冲存储器中的数据页面可能从不被刷新至存储层,并且它可在任何时候被抛弃(例如,在用于最近应用至高速缓存的复制的写入请求的重做日志记录已被发送至存储层和被确认之后的任何时候)。在不同实施方案中,高速缓冲存储器可实施任何的各种锁定机构,以便通过每次最多一个写入者(或多个读取者)控制访问高速缓冲存储器。然而注意在包括此类高速缓冲存储器的实施方案中,高速缓冲存储器可能未分布在多个节点上,但对于给定数据库实例可仅存在于数据库引擎头节点上。因此,可能不存在要管理的高速缓存相干性或一致性问题。
[0036] 在一些实施方案中,数据库层可支持在系统中使用同步或异步读取复制品,例如,在读取请求可被路由至其的数据库层的不同节点上的数据只读副本。在此类实施方案中,如果用于给定数据库的数据库引擎头节点接收指向特定数据页面的读取请求,那么它可将请求路由至这些只读副本中的任何一个(或特定的一个)。在一些实施方案中,数据库引擎头节点中的客户端侧驱动器可被配置来通知这些其他节点关于高速缓存的数据页面的升级和/或失效(例如,以便提示它们使它们的高速缓冲存储器无效,在其之后它们可从存储层请求更新的数据页面的更新副本)。
[0037] 在一些实施方案中,在数据库引擎头节点上运行的客户端侧驱动器可暴露针对存储层的专用接口。在一些实施方案中,它也可暴露针对一个或多个其他部件(例如,其他数据库引擎或虚拟计算服务部件)的传统iSCSI接口。在一些实施方案中,在存储层中用于数据库实例的存储可被模制成单个卷,所述单个卷可在大小上增长而不受限制,并且可具有不限数目的与它关联的IOPS。当创建卷时,可用具体大小、用具体的可用性/耐久性特性(例如,指定它被如何复制)、和/或与它关联的IOPS速率(例如,峰值和持续的)来创建它。例如,在一些实施方案中,各种不同的耐久性模型可被支持,并且用户/订阅者可以能够为它们的数据库基于它们的耐久性、性能和成本目标来指定一些复制副本、区、或区域、和/或复制是同步的还是异步的。
[0038] 在一些实施方案中,客户端侧驱动器可维持关于卷的元数据,并且可将异步请求直接发送至对实现读取请求和写入请求有必要的每个存储节点,而不需要在存储节点之间的附加跳跃。例如,在一些实施方案中,响应对数据库进行改变的请求,客户端侧驱动器可被配置来确定实施用于目标数据页面的存储的一个或多个节点,以及路由指定对那些存储节点的改变的重做日志记录。存储节点随后可在将来的某个时刻负责将在重做日志记录中指定的改变应用至目标数据页面。由于返回客户端侧驱动器的写入被确认,所以客户端侧驱动器可提前在其处卷为耐用的点,并且可确认返回数据库层的提交。如先前指出的,在一些实施方案中,客户端侧驱动器可能从不将数据页面发送至存储节点服务器。这不仅可减少网络流量,还可移除对检查点或后台写入线程的需要,所述检查点或后台写入线程在先前的数据库系统中约束前台处理吞吐量。
[0039] 在一些实施方案中,许多读取请求可由数据库引擎头节点高速缓冲存储器服务。然而,由于大规模的故障事件可能太常见而不允许仅在存储器中复制,写入请求可能需要耐久性。因此,本文描述的系统可被配置来最小化重做日志记录写入操作的成本,所述重做日志记录写入操作在前台延时路径中,通过将存储层中的数据存储实施成两个区域:小型仅附加的日志结构化区域,当从数据库层被接收重做日志记录时将其写入至其中;以及较大区域,在所述较大区域中日志记录合并在一起以便后台创建新版本的数据页面。在一些实施方案中,可维持存储器中结构用于每个数据页面,所述每个数据页面指向用于那个页面的最后重做日志记录、反向链接日志记录,直到实体化数据被引用。这个方法可提供用于混合的读取-写入工作负荷的良好性能,包括在其中大量高速缓存读取的应用中。
[0040] 在一些实施方案中,因为对用于重做日志记录的日志结构化数据存储的访问可包括一系列连续的输入/输出操作(不是随机输入/输出操作),做出的改变可被紧密包装在一起。还应注意,与在其中对数据页面的每个改变导致对持久数据存储的两个输入/输出操作(一个用于重做日志,并且一个用于修改的数据页面本身)的现存系统相比,在一些实施方案中,通过基于重做日志记录的接收来合并在分布式存储系统的存储节点处的数据页面,本文描述的系统可避免这个“写入放大”。
[0041] 如先前指出的,在一些实施方案中,数据库系统的存储层可负责取得数据库快照。然而,因为存储层实施日志结构化存储,取得数据页面(例如,数据块)的快照可包括记录与最近应用至数据页面/数据块的重做日志记录关联的时间戳(或与合并多个重做日志记录以便创建新版本的数据页面/数据块的最近操作关联的时间戳),和阻止先前版本的页面/块的无用数据收集以及直到记录的时间点的任何随后日志条目。在这类实施方案中,取得数据库快照可能不需要如当采用远离卷备份策略时将需要的读取、复制或写入数据块。在一些实施方案中,对快照的空间要求可为最小的,由于仅修改的数据将需要附加的空间,但用户/订阅者可以能够选择除活动数据集之外他们想要保持多少附加空间用于在卷上的快照。在不同的实施方案中,快照可为离散的(例如,每个快照可提供对在具体时间点的数据页面中的所有数据的访问)或连续的(例如,每个快照可提供对存在于两个时间点之间的数据页面中的所有版本的数据的访问)。在一些实施方案中,回复至先前的快照可包括记录日志记录以便指示所有的重做日志记录和数据页面(由于快照为无效的和可无用数据收集的),以及在快照点后丢弃所有数据库高速缓存条目。在此类实施方案中,由于存储系统将在逐块基础上如请求的和后台在所有节点上对数据块应用重做日志记录,就像它在正常的向前读取/写入处理中做的,所以不需要向前滚动,。从而可使得崩溃恢复并行和分布在节点上。
[0042] 图2中示出可被配置来实施基于网络服务的数据库服务的服务系统架构的一个实施方案。在所示的实施方案中,一些客户端(被示作数据库客户端250a-250n)可被配置来通过网络260与网络服务平台200互相作用。网络服务平台200可被配置来与数据库服务210、分布式数据库优化存储服务220和/或一个或多个其他虚拟计算服务230的一个或多个实例相互作用。注意其中给定部件的一个或多个实例可存在,可使得本文中对那个部件的引用为单数的或复数的。然而,任何一种形式的使用不意图排除另一种。
[0043] 在各种实施方案中,图2所示的部件可直接在计算机硬件内实施,如可由计算机硬件直接执行或间接执行的指令(例如,微处理器或计算机系统),或使用这些技术的组合。例如,图2的部件可由包括一些计算节点(或简单地,节点)的系统来实施,所述计算节点中的每一个可类似于图10所示的和以下描述的计算机系统实施方案。在各种实施方案中,给定服务系统部件(例如,数据库服务的部件或存储服务的部件)的功能性可由特定节点来实施或可分布在若干节点上。在一些实施方案中,给定节点可实施多于一个服务系统部件(例如,多于一个数据库服务系统部件)的功能性。
[0044] 一般来说,客户端250可包含可被配置来通过网络260向网络服务平台200提交网络请求、包括用于数据库服务的请求(例如,产生快照的请求等)的任何类型的客户端。例如,给定客户端250可包括适当版本的网络浏览器,或可包括被配置来作为延伸执行或在由网络浏览器提供的执行环境内执行的插件模块或其他类型的代码模块。可替代地,客户端250(例如,数据库服务客户端)可包含应用程序,如数据库应用程序(或其用户接口)、媒体应用程序、办公室应用程序、或可使用持久存储资源以便存储和/或访问一个或多个数据库的任何其他应用程序。在一些实施方案中,此类应用程序可包括足够的协议支持(例如,用于适当版本的超文本传输协议(HTTP)),用于产生和处理网络服务请求,而不必要地实施用于所有类型的基于网络的数据的完全浏览器支持。就是说,客户端250可为被配置来直接与网络服务平台200相互作用的应用程序。在一些实施方案中,客户端250可被配置来根据表述性状态转移(REST)类型的网络架构、基于文件或基于消息的网络服务架构、或另一适当的网络服务架构产生网络服务请求。
[0045] 在一些实施方案中,客户端250(例如,数据库服务客户端)可被配置来向其他应用程序以对这些应用程序透明的方式提供对基于网络服务的数据库存储的访问。例如,客户端250可被配置来与操作系统或文件系统集成,来提供根据本文所描述的存储模型的适当变体的存储。然而,操作系统或文件系统可呈现针对应用程序的不同存储接口,如文件、目录和/或文件夹的常规文件系统层级。在此类实施方案中,应用程序可能不需要被修改以便使用图1的存储系统服务模型。反而,对网络服务平台200的介接的细节可通过客户端250和代表在操作系统环境内执行的应用程序的操作系统或文件系统来协调。
[0046] 客户端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通信。
[0047] 一般来说,网络服务平台200可被配置,以便实施被配置来接收和处理网络服务请求(如对访问数据页面(或其记录)的请求)的一个或多个服务端点。例如,网络服务平台200可包括被配置来实施特定端点的硬件和/或软件,以使得指向那个端点的基于HTTP的网络服务请求被适当地接收和处理。在一个实施方案中,网络服务平台200可被实施作为服务器系统,所述服务器系统被配置来从客户端250接收网络服务请求,并且将它们转发至实施数据库服务210、分布式数据库优化存储服务220和/或另一虚拟计算服务230的系统的部件用于处理。在其他实施方案中,网络服务平台200可被配置成一些异构系统(例如,处于集群拓扑),所述异构系统实施负载平衡和被配置来动态管理大规模的网络服务请求处理负载的其他请求管理特征。在各种实施方案中,网络服务平台200可被配置来支持REST类型的或基于文件(例如,基于SOAP)类型的网络服务请求。
[0048] 除起到用于客户端的网络服务请求的可寻址端点的作用之外,在一些实施方案中,网络服务平台200可实施各种客户端管理特征。例如,平台200可协调网络服务(包括存储资源)的客户端使用的测量和计数,如通过追踪请求客户端250的身份、客户端请求的数目和/或频率、被存储或检索的代表客户端250的数据表格(或其记录)的大小、由客户端250使用的总存储带宽、由客户端250请求的存储类别、或任何其他可测量的客户端使用参数。平台200也可实施财务账目和计费系统,或可维持使用数据的数据库,所述使用数据的数据库可由用于客户端使用活动的报告和计费的外部系统查询和处理。在某些实施方案中,平台200可被配置来收集、监视和/或集合各种存储服务系统操作度量,如反映从客户端250接收的请求的速率和类型、由此类请求利用的带宽、用于此类请求的系统处理时延、系统部件利用(例如,网络带宽和/或存储服务系统内的存储利用)、由请求导致的错误的速率和类型、存储的和请求的数据页面或其记录的特性(例如,大小、数据类型等)的度量、或任何其他适当的度量。在一些实施方案中,此类度量可由系统管理员使用以便调谐和维持系统部件,而在其他实施方案中,此类度量(或此类度量的相关部分)可暴露于客户端250,以便使得此类客户端能够监视它们使用数据库服务210、分布式数据库优化存储服务
220和/或另一虚拟计算服务230(或实施那些服务的基础系统)。
[0049] 在一些实施方案中,平台200也可实施用户认证和访问控制程序。例如,对于访问特定数据库的给定网络服务请求,平台200可被配置来查明与请求关联的客户端250是否被授权访问特定数据库。平台200可确定此类认证,例如通过相对于与特定数据库关联的凭据评估身份、密码或其他凭据,或相对于用于特定数据库的访问控制列表评估对特定数据库的请求的访问。例如,如果客户端250不具有足够的凭据来访问特定数据库,平台200可例如通过将指示错误情况的响应返回至请求客户端250来拒绝对应的网络服务请求。通过数据库服务210、分布式数据库优化存储服务220和/或其他虚拟计算服务230,各种访问控制政策可被存储作为访问控制信息的记录或列表。
[0050] 注意尽管网络服务平台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的计数和/或凭证服务对于内部客户端(如管理客户端)或在同一企业内的服务部件之间可能为不必要的。
[0051] 注意在各种实施方案中,不同的存储政策可由数据库服务210和/或分布式数据库优化存储服务220来实施。此类存储政策的实例可包括耐久性政策(例如,指示将被存储的数据库(或其数据页面)的实例数目和在其上它们将被存储的不同节点数目的政策)和/或负载平衡政策(其可在不同的节点、卷和/或磁盘上分布数据库或其数据页面,试图均衡请求流量)。此外,通过各种服务中的一个,可对不同类型的存储项目应用不同的存储政策。例如,在一些实施方案中,分配式数据库优化存储服务220可为重做日志记录实施比为数据页面更高的耐久性。
[0052] 图3为示出根据一个实施方案的数据库系统的各种部件的框图,所述数据库系统包括数据库引擎和独立分布式数据库存储服务。在这个实例中,数据库系统300包括用于若干数据库中的每一个的各自数据库引擎头节点320和分布式数据库优化存储服务310(其对数据库系统的客户端可能是或可能不是可见的,所述客户端被示出为数据库客户端350a-350n)。如这个实例所示,数据库客户端350a-350n中的一个或多个可通过网络
360(例如,这些部件对于数据库客户端350a-350n可为网络可寻址的和可访问的)来访问数据库头节点320(例如,头节点320a、头节点320b、或头节点320c,其中的每一个为各自数据库实例的部件)。然而,可由数据库系统采用以便存储代表数据库客户端350a-350n的一个或多个数据(以及重做日志记录和/或与其关联的其他元数据)的数据页面以及执行如本文所述的数据库系统的其他功能的分布式数据库优化存储服务310在不同的实施方案中对于存储客户端350a-350n可能是或可能不是网络可寻址的或可访问的。例如,在一些实施方案中,分布式数据库优化存储服务310可能以对存储客户端350a-350n不可见的方式来执行各种存储、访问、改变日志、恢复、日志记录操纵、和/或空间管理操作。
[0053] 如先前指出的,每个数据库实例可包括单个数据库引擎头节点320,所述单个数据库引擎头节点320接收来自各种客户端程序(例如,应用程序)和/或订阅者(用户)的请求(例如,快照请求等),随后解析它们,优化它们并且发展执行计划以便实施关联的数据库操作。在图3所示的实例中,数据库引擎头节点320a的查询解析、优化和执行部件305可执行用于查询的这些功能,所述查询从数据库客户端350a接收并且把数据库引擎头节点320a为部件的数据库实例作为目标。在一些实施方案中,查询解析、优化和执行部件305可将查询响应返回至数据库客户端305a,所述查询响应可包括写入确认、请求的数据页面(或其部分)、错误消息、和/或其他响应(在适当情况下)。如这个实例所示,数据库引擎头节点320a也可包括客户端侧存储服务驱动器325,所述客户端侧存储服务驱动器325可将读取请求和/或重做日志记录路由至在分布式数据库优化存储服务310内的各种存储节点,从分布式数据优化存储服务310接收写入确认,从分布式数据库优化存储服务310接收请求的数据页面,和/或将数据页面、错误消息、或其他响应返回至查询解析、优化和执行部件305(其反过来可将它们返回至数据库客户端350a)。
[0054] 在这个实例中,数据库引擎头节点320a包括在其中最近访问的数据页面可被暂时保持的数据页面高速缓冲存储器335。如图3所示,数据库引擎头节点320a也可包括事务和一致性管理部件330,所述事务和一致性管理部件330可负责在数据库头节点320a为部件的数据库实例中提供事务性和一致性。例如,这个部件可负责确保数据库实例的原子性、一致性和隔离特性以及指向数据库实例的事务。如图3所示,数据库引擎头节点320a也可包括事务日志340和撤销日志345,所述事务日志340和撤销日志345可由事务和一致性管理部件330采用,以便追踪各种事务状态以及将不提交的事务的任何本地高速缓存的结果向后滚动。
[0055] 注意图3所示的其他数据库引擎头节点320中的每一个(例如,320b和320c)可包括类似的部件并且可执行用于查询的类似功能,所述查询由数据库客户端350a-350n中的一个或多个接收,并且指向它为部件的各自数据库实例。
[0056] 在一些实施方案中,本文描述的分布式数据库优化存储系统可在各种逻辑卷、区段和页面中组织数据用于一个或多个存储节点上存储。例如,在一些实施方案中,每个数据库由逻辑卷代表,并且每个逻辑卷在存储节点集合上被分割。依存在存储节点中的特定一个上的每个区段包含一组连续块地址。在一些实施方案中,每个数据页面存储在区段中,以使得每个区段存储一个或多个数据页面的集合和用于它存储的每个数据页面的改变日志(也被称为重做日志)(例如,重做日志记录的日志)。如本文详细描述的,存储节点可被配置来接收重做日志记录(其在本文中也被称为ULR),以及合并它们来创建新版本的对应数据页面和/或附加日志记录或替换日志记录(例如,徐缓地和/或响应于对数据页面的请求或数据库崩溃)。在一些实施方案中,根据可变的配置(其可由客户端指定,所述客户端被代表的数据库被维持在数据库系统中),数据页面和/或改变日志在多个存储节点上可为镜像的。例如,在不同实施方案中,根据默认配置、具体应用的耐久性偏好、或具体客户端的耐久性偏好,数据日志或改变日志的一个、两个或三个副本可存储在一个、两个或三个不同的可用区或区域中的每一个中。
[0057] 如本文使用的,以下术语可用于描述根据各种实施方案的通过分布式数据库优化存储系统进行的数据的组织。
[0058] 卷:卷为代表存储系统的用户/客户端/应用程序理解的高度耐用的存储单元的逻辑概念。更具体地,卷为对用户/客户端/应用程序显示成对数据库的各种用户页面的写入操作的单个一致有序日志的分布式存储。每个写入操作可被编码在用户日志记录(ULR)中,所述用户日志记录(ULR)代表对卷内的单个用户页面的内容的逻辑、有序突变。如以上指出的,ULR在本文中也可被称为重做日志记录。每个ULR可包括唯一识别符(例如,逻辑序列编号(LSN))或逻辑序列号。每个ULR可持续至形成保护组(PG)的在分布式存储中的一个或多个同步区段,以便为ULR提供高耐久性和可用性。卷可提供用于可变大小的连续字节范围的LSN类型的读取/写入接口。
[0059] 一些实施方案中,卷可包括多个程度,通过保护组使得每个耐用。在此类实施方案中,卷可代表由变异连续的卷程度序列组成的存储单元。指向卷的读取和写入可映射至对构成的卷程度的对应的读取和写入中。在一些实施方案中,卷的大小可通过从卷末端添加或移除卷程度来改变。
[0060] 区段:区段为分配至单个存储节点的耐久性受限的存储单元。更具体地,区段为具体固定大小的数据字节范围提供有限的最大努耐久性(例如,为存储节点的持久的、但非冗余的单个故障点)。在一些情况下,这个数据可为用户可寻址数据的镜像,或在各种实施方案中,它可为其他数据,如卷元数据或可擦除的编码比特。给定区段可恰好依存在一个存储节点上。在存储节点内,多个区段可依存在每个SSD上,并且每个区段可被限制于一个SSD(例如,区段可能不横跨多个SSD)。在一些实施方案中,可能不需要区段来占据SSD上的连续区域;宁可在每个SSD中存在描述由每个区段拥有的区域的分配映射。如以上指出的,保护组可包括在多个存储节点上散布的多个区段。在一些实施方案中,区段可提供用于固定大小(其中大小在创建时被限定)的连续字节范围的LSN类型的读取/写入接口。在一些实施方案中,每个区段可通过区段UUID(例如,区段的通用唯一识别符)来识别。
[0061] 存储页面:存储页面为通常具有固定大小的存储器块。在一些实施方案中,每个页面为具有由操作系统限定的大小的存储器块(例如,虚拟存储器、磁盘、或其他物理存储器的),并且在本文中也可被称为术语“数据块”。更具体地,存储页面可为一组连续扇区。它可用作SSD中的分配单元,以及日志页面中对于其存在标头和元数据的单元。在一些实施方案中,以及在本文描述的数据库系统的情况下,术语“页面”或“存储页面”可指具有由数据库配置限定的大小的类似块,所述大小通常可为2的倍数,如4096、8192、16384或32768字节。
[0062] 日志页面:日志页面为用于存储日志记录(例如,重做日志记录或撤销日志记录)的一种类型的存储页面。在一些实施方案中,日志页面在大小上可等于存储页面。每个日志页面可包括标头,所述标头包含关于那个日志页面的元数据(例如,识别它属于的区段的元数据)。注意日志页面为组织单元,并且可能不必须为包括在写入操作中的数据单元。例如,在一些实施方案中,在正常向前处理期间,写入操作可一次一个扇区地写入至日志尾部。
[0063] 日志记录:日志记录(例如,日志页面的单独元件)可具有若干不同的类别。例如,由存储系统的用户/客户端/应用程序创建和理解的用户日志记录(ULR)可用于指示对卷中的用户数据的改变。由存储系统产生的控制日志记录(CLR)可包含用于追踪元数据(如当前无条件的卷耐用LSN(VDL))的控制信息。在一些实施方案中,空日志记录(NLR)可用作填料,以便填充日志扇区或日志页面中的未用空间。在一些实施方案中,在这些类别中的每一个内可存在各种类型的日志记录,并且日志记录类型可对应于需要被调用以便解释日志记录的功能。例如,一种类型可使用具体的压缩格式来代表压缩格式的用户页面的所有数据;第二类型可代表用于用户页面内的字节范围的新值;第三类型可代表对被解释成整数的字节序列的增量操作;以及第四类型可代表在页面内将一个字节范围复制到另一位置。在一些实施方案中,日志记录类型可由GUID(不是由整数或枚举)来识别,所述GUID可简化版本控制和发展,特别用于ULR。
[0064] 有效负载:日志记录的有效负载为针对一个或多个特定类型的日志记录的数据或参数值。例如,在一些实施方案中,可能存在大部分(或所有的)日志记录包括,并且存储系统本身理解的一组参数或属性。这些属性可为与扇区大小相比可能为相对小的常用日志记录标头/结构的部分。此外,大部分日志记录可包括针对那个日志记录类型的附加的参数或数据,并且这个附加信息可被认为是那个日志记录的有效负载。在一些实施方案中,如果用于特定ULR的有效负载大于用户页面大小,它可由绝对ULR(AULR)来替换,所述绝对ULR的有效负载包括用于用户页面的所有数据。这可使得存储系统能够对等于用户页面大小的ULR的有效负载的大小施行上限。
[0065] 注意当将日志记录存储在区段日志中时,在一些实施方案中,有效负载可连通日志标头一起存储。在其他实施方案中,有效负载可存储在独立位置中,并且到在其中存储有效负载的位置的指针可与日志标头一起存储。在另一些实施方案中,有效负载的一部分可存储在标头中,并且有效负载的剩余物可存储在独立位置中。如果整个有效负载与日志标头一起存储,这可被称为带内存储;否则存储可被称为带外的。在一些实施方案中,大部分大型AULR的有效负载可带外存储在日志冷区(其在以下描述)中。
[0066] 户页面:用户页面为用于特定卷的字节范围(固定大小的)和其对准,所述特定卷对存储系统的用户/客户端为可见的。用户页面为逻辑概念,并且在特定用户页面中的字节可能或可能不原样存储在任何存储页面中。用于特定卷的用户页面的大小可独立于用于那个卷的存储页面的大小。在一些实施方案中,用户页面大小可被每卷配置,并且在存储节点上的不同区段可具有不同的用户页面大小。在一些实施方案中,用户页面大小可被约束成多个扇区大小(例如,4KB),并且可具有上限(例如,64KB)。另一方面,存储页面大小对于整个存储节点可为固定的,并且可能不改变除非存在对基础硬件的改变。
[0067] 数据页面:数据页面为用于存储压缩形式的用户页面数据的一种类型的存储页面。在一些实施方案中,存储在数据页面中的每个数据片与日志记录关联,并且每个日志记录可包括到数据页面内的扇区(也被称为数据扇区)的指针。在一些实施方案中,数据页面可能不包括除由每个扇区提供的之外的任何嵌入式元数据。在数据页面中扇区之间可能不存在关系。反而,到页面中的组织可仅作为到区段的数据分配的间隔尺寸的表达存在。
[0068] 存储节点:存储节点为在其上存储节点服务器代码被部署的单个虚拟机器。每个存储节点可包含多个本地附接的SSD,并且可提供网络API用于访问一个或多个区段。在一些实施方案中,各种节点可在活动列表上,或在降级列表上(例如,如果它们缓慢响应或另外被损坏,但未完全不能用)。在一些实施方案中,客户端侧驱动器基于观测的性能可帮助(或负责)将节点分类成活动的或降级的,用于确定它们是否以及何时应被替换,和/或用于确定何时和如何在各种节点中重新分布数据。
[0069] SSD:如本文指出的,术语“SSD”可指如通过存储节点可见的本地块存储卷,不考虑由那个存储卷采用的存储类型,例如,磁盘、固态驱动、电池支持的RAM、非易失性RAM装置(例如,一个或个NV-DIMM)、或另一类型的持久存储装置。SSD不必要直接映射至硬件。例如,单个固态存储装置可能分成多个本地卷,其中在不同的实施方案中,每个卷被分裂成多个区段以及在多个区段上剥离,和/或单个驱动可仅为容易管理而分成多个卷。在一些实施方案中,每个SSD可在单个固定位置处存储分配映射。这个映射可指示特定区段拥有的那些存储页面,以及这些页面中的哪些为日志页面(与数据页面相对)。在一些实施方案中,存储页面可被提前分配至每个区段,以使得向前处理可能不需要等待分配。在新分配的存储页面由区段使用之前,可能需要使得对分配映射的任何改变耐用。
[0070] 分布式数据库优化存储系统的一个实施方案由图4中的框图示出。在这个实例中,数据库系统400包括分布式数据库优化存储系统410,所述分布式数据库优化存储系统410通过互连460与数据库引擎头节点420通信。如在3所示的实例中,数据库引擎头节点
420可包括客户端侧存储服务驱动器425。在这个实例中,分布式数据库优化存储系统410包括多个存储系统服务器节点(包括被示出为430、440、和450的那些),其中的每一个包括用于数据页面的存储和用于它存储的区段的重做日志,以及被配置来执行各种区段管理功能的硬件和/或软件。例如,每个存储系统服务器节点可包括被配置来执行任何或所有的以下操作中的至少一部分的硬件和/或软件:复制(本地,例如在存储节点内)、合并重做日志以便产生数据页面、快照(例如,创建、复原、删除等)、日志管理(例如,操纵日志记录)、崩溃恢复、和/或空间管理(例如,用于区段)。每个存储系统服务器节点也可具有在其上可存储代表客户端(例如,用户、客户端应用程序、和/或数据库服务订阅者)的数据块的多个附接的存储装置(例如,SSD)。
[0071] 在图4所示的实例中,存储系统服务器节点430包括数据页面433、区段重做日志435、区段管理功能437、和附接的SSD 471-478。再次注意标签“SSD”可能或可能不指固态驱动,但更通常地可能指本地块存储卷,不考虑它的基础硬件。类似地,存储系统服务器节点440包括数据页面443、区段重做日志445、区段管理功能447、和附接的SSD 481-488;并且存储系统服务器节点450包括数据页面453、区段重做日志455、区段管理功能457、和附接的SSD 491-498。
[0072] 如先前指出的,在一些实施方案中,扇区为在SSD上的对齐单元,并且可为在SSD上可被写入而没有所述写入将仅被部分完成的险的最大大小。例如,用于各种固态驱动和旋压介质的扇区大小可为4KB。在本文所述的分布式数据库优化存储系统的一些实施方案中,每个以及每一个扇区可在所述扇区开始处包括64比特(8字节)CRC,不考虑扇区为其一部分的较高水平实体。在此类实施方案中,这个CRC(每次当从SSD读取扇区时,其可生效)可在检测破坏中使用。在一些实施方案中,每个和每一个扇区也可包括“扇区类型”字节,其值将所述扇区识别成日志扇区、数据扇区、或未初始化的扇区。例如,在一些实施方案中,为0的扇区类型字节值可指示扇区未初始化。
[0073] 在一些实施方案中,在分布式数据库优化存储系统中的每个存储系统服务器节点可实施在节点服务器的操作系统上运行的一组处理,所述处理管理与数据库引擎头节点的通信,例如,以便接收重做日志、送回数据页面等。在一些实施方案中,写入至分布式数据块优化存储系统的所有数据块可备份到长期存储和/或档案存储(例如,在远程键值耐用备份存储系统中)。
[0074] 图5为示出根据一个实施方案的数据库系统中的独立分布式数据库优化存储系统的使用的框图。在这个实例中,一个或多个客户端进程510可将数据存储至由数据库系统维持的一个或多个数据库,所述数据库系统包括数据库引擎520和分布式数据库优化存储系统530。在图5所示的实例中,数据库引擎520包括数据库层部件560和客户端侧驱动器540(其用于分布式数据库优化存储系统530与数据库层部件560之间的接口)。在一些实施方案中,数据库层部件560可执行功能(如由图3的查询解析、优化和执行部件305以及事务和一致性管理部件330执行的那些),和/或可存储数据页面、事务日志和/或撤销日志(如由图3的数据页面高速缓冲存储器335、事务日志340和撤销日志345存储的那些)。
[0075] 在这个实例中,一个或多个客户端进程510可将数据库查询请求515(其可包括把存储在一个或多个存储节点535a-535n上的数据作为目标的读取和/或写入请求)发送至数据库层部件560,并且可从数据库层部件560接收数据库查询响应517(例如,包括写入确认和/请求的数据的响应)。包括对写入数据页面的请求的每个数据库查询请求515可被解析和优化,以便产生可被发送至客户端侧驱动器540用于随后路由至分布式数据库优化存储系统530的一个或多个写入记录请求541。在这个实例中,客户端侧驱动器540可产生对应每个写入记录请求541的一个或多个重做日志记录531,并且可将它们发送至分布式数据库优化存储系统530的存储节点535中的具体的一些。分布式数据库优化存储系统530可将用于每个重做日志记录531的对应写入确认523返回至数据库引擎520(具体至客户端侧驱动器540)。客户端侧驱动器540可将这些写入确认传递至数据库层部件560(作为写入响应542),所述数据库层部件560随后可将对应的相应(例如,写入确认)发送至一个或多个客户端进程510作为数据库查询响应517中的一个。
[0076] 在这个实例中,包括对读取数据页面的请求的每个数据库查询请求515可被解析和优化,以便产生可被发送至客户端侧驱动器540用于随后路由至分布式数据库优化存储系统530的一个或多个读取记录请求543。在这个实例中,客户端侧驱动器540可将这些请求发送至分布式数据库优化存储系统530的存储节点535中的具体的一些,并且分布式数据库优化存储系统530可将请求的数据页面533返回至数据库引擎520(具体至客户端侧驱动器540)。客户端侧驱动器540可将返回的数据页面发送至数据库层部件560作为返回数据记录544,并且数据库层部件560随后可将数据页面发送至一个或多个客户端进程510作为数据库查询响应517。
[0077] 在一些实施方案中,各种错误和/或数据损失消息534可从分布式数据库优化存储系统530发送至数据库引擎520(具体至客户端侧驱动器540)。这些消息可从客户端侧驱动器540传递至数据库层部件560作为错误和/或损失报告消息545,并且随后连同(或代替)数据库查询响应517至一个或多个客户端进程510。
[0078] 在一些实施方案中,分布式数据库优化存储系统530的API 531-534和客户端侧驱动器540的API 541-545可将分布式数据库优化存储系统530的功能性暴露至数据库引擎520,犹如数据库引擎520为分布式数据库优化存储系统530的客户端。例如,数据库引擎520(通过客户端侧驱动器540)可通过这些API写入重做日志记录或请求数据页面,以便执行(或促进其性能)由数据库引擎520和分布式数据库优化存储系统530的组合实施的数据库系统的各种操作(例如,存储、访问、改变日志、恢复、和/或空间管理操作)。如图5所示,分布式数据库优化存储系统530可在存储节点535a-535n上存储数据块,所述存储节点535a-535n中的每一个可具有多个附接的SSD。在一些实施方案中,分布式数据库优化存储系统530可通过应用各种类型的冗余方案为存储的数据块提供高耐久性。
[0079] 注意在各种实施方案中,在图5中,在数据库引擎520与分布式数据库优化存储系统530之间的API调用和响应(例如,API 531-534)和/或在客户端侧驱动器540与数据库层部件560之间的API调用和响应(例如,API 541-545)可在安全代理连接(例如,由网关控制面管理的一个)上执行,或可在公共网络上,或可替代地在专用通道(如虚拟专用网络(VPN)连接)上执行。到本文所述的数据库系统的部件和/或在其之间的这些和其他API可根据不同的技术(包括但不限于,简单对象访问协议(SOAP)技术和表述性状态转移(REST)技术)来实施。例如,这些API可能,但不必须被实施作为SOAP API或RESTful API。SOAP为用于在基于网络的服务的情况下用于交换信息的协议。REST为用于分布式超媒体系统的构造风格。RESTful API(其也可被称为RESTful网络服务)为使用HTTP和REST技术实施的网络服务API。本文描述的API在一些实施方案中可用各种语言(包括但不限C、C++、Java、C#和Perl)中的客户端库来包装,以便支持与数据库引擎520和/或分布式数据库优化存储系统530的合并。
[0080] 如以上指出的,在一些实施方案中,数据库系统的功能部件可在由数据库引擎执行的那些与在独立、分布式、数据库优化存储系统中执行的那些之间划分。在一个具体实例中,响应于接收来自客户端进程(或其线程)的对将某物插入至数据库中(例如,通过将记录添加那个数据块来更新单个数据块)的请求,数据库引擎头节点的一个或多个部件可执行查询解析、优化、和执行,以及可将查询的每个部分发送至事务和一致性管理部件。事务和一致性管理部件可确保没有其他客户端进程(或其线程)试图同时修改相同的行。例如,事务和一致性管理部件可负责确保这个改变自动地、一致地、耐久地以及以隔离的方式在数据库中执行。例如,事务和一致性管理部件可与数据库引擎头节点的客户端侧存储服务驱动器一起工作,以便产生将被发送至分布式数据库优化存储服务中的一个节点的重做日志记录,以及将它发送至分布式数据库优化存储服务(连同响应于其他客户端请求产生的其他重做日志),以一个顺序和/或用确保ACID特性满足这个事务的定时。在接收重做日志记录(其可被认为通过存储服务的“更新记录”)后,对应的存储节点可更新数据块,并且可更新用于所述数据块的重做日志(例如,指向数据块的所有改变的记录)。在一些实施方案中,数据库引擎可负责产生用于这个改变的撤销日志,并且也可负责产生用于撤销日志的重做日志记录,其都可本地(在数据库层中)用于确保事务性。然而,不同于常规数据库系统,本文描述的系统可将对数据块应用改变的责任转移至存储系统(不是在数据库层应用它们以及将修改的数据块运送至存储系统)。此外,如本文在图8-9B所述,在各种实施方案中,在数据库系统处可避免系统范围检查点、连同从由于也可由存储系统执行的各种日志记录操作造成的数据库系统崩溃的快速恢复。
[0081] 在不同的实施方案中,各种不同的分配模型可被实施用于SSD。例如,在一些实施方案中,日志条目页面和物理应用页面可从与SSD装置关联的单个堆的页面分配。这个方法可具有留下由日志页面和数据页面消耗的相对数量的存储的优点,以便保持未指定的以及自动适应使用。它也可具有允许页面保持未准备的,直到它们随意不用准备地使用和重新目的化的优点。在其他实施方案中,分配模型可将存储装置划分成用于日志条目和数据页面的独立空间。一旦此类分配模型由图6中的框图示出以及在以下描述。
[0082] 图6为示出根据一个实施方案的可将数据和元数据存储在分布式数据库优化存储系统的给定存储节点(或持久存储装置)上的方式的框图。在这个实例中,SSD存储空间600将SSD标头和其他固定的元数据存储在标记610的空间的部分中。它将日志页面存储在标记620的空间的部分中,并且包括被初始化和保留用于附加日志页面的标记630的空间。SSD存储空间600的一部分(被示出为640)被初始化,但未分配,并且另一空间部分(被示出为650)未被初始化以及未分配。最终,标记660的SSD存储空间600的部分存储数据页面。
[0083] 在这个实例中,第一可用日志页槽被指示成615,并且最后使用的日志页槽(短暂的)被指示成625。最后保留的日志页槽被指示成635,并且最后可用日志页槽被指示成645。在这个实例中,第一使用的数据页槽(短暂的)被指示成665。在一些实施方案中,在SSD存储空间600内的这些元件(615、625、635、645和665)中的每一个的位置可由各自的指针来识别。
[0084] 在图6所示的分配方法中,有效日志页面可被包装至平坦存储空间的开始中。在使用地址空间中较远的附加的日志页槽之前,由于被释放的日志页面而打开的孔可再用。例如,在最坏的情况下,第一n个日志页槽包含有效日志数据,其中n为已经同时存在的有效日志页面的最大数目。在这个实例中,有效数据页面可被包装至平坦存储空间的末端中。
在使用地址空间中较低的附加的数据页槽之前,由于被释放的数据页面而打开的孔可再用。例如,在最坏的情况下,最后m个数据页面包含有效数据,其中m为已经同时存在的有效数据页面的最大数目。
[0085] 在一些实施方案中,在日志页槽可变成潜在的有效日志页面条目组的部分之前,它可能需要被初始化至对于有效未来日志条目页面不可能为混乱的值。由于引退的日志页面具有足够的元数据以便对于新的有效日志页面为永不混乱的,对于循环的日志页槽这是含蓄真实的。然而,当存储装置被首先初始化时,或当潜在用于存储应用数据页面的空间被改造时,日志页槽可能需要在它们添加至日志页槽池之前被初始化。在一些实施方案中,再平衡/改造日志空间可能作为后台任务来执行。
[0086] 在图6所示的实例中,当前日志页槽池包括在第一可用日志页槽(在615处)与最后保留的日志页槽(625)之间的区域。在一些实施方案中,这个池可安全增长至最后可用日志页槽(625),不用再初始化新的日志页槽(例如,通过持续对识别最后保留的日志页槽635的指针的更新)。在这个实例中,超过最后可用日志页槽(其由指针645识别),通过持续初始化的日志页槽,以及持续更新用于最后可用日志页槽的指针(645),所述池可增长至第一使用的数据页槽(其由指针665识别)。在这个实例中,被示出作为650的SSD存储空间600的先前未初始化和未分配的部分可被暂用以便存储日志页面。在一些实施方案中,通过持续对用于最后保留的日志页槽的指针(635)的更新,当前日志页槽池可向下收缩至最后使用的日志页槽(其通过指针来识别)的位置。
[0087] 在图6所示的实例中,当前数据页槽池包括在最后可用日志页槽(其由指针645来识别)与SSD存储空间600的端部之间的区域。在一些实施方案中,通过持续对最后可用日志页槽的指针(645)的更新,数据页面池可安全增长至由最后保留的日志页槽的指针(635)识别的位置。在这个实例中,被示出为640的SSD存储空间600的先前未初始化但未分配的部分可被暂用以便存储日志页面。超过这个,通过持续对用于最后保留的日志页槽(635)和最后使用的日志页槽(645)的指针的更新,有效再分配SSD存储空间600的部分(被示出为630和640)以便存储数据页面而不是日志页面,所述池可安全增长至由最后使用的日志页槽的指针(625)识别的位置。在一些实施方案中,通过初始化附加的日志页槽和持续对最后可用日志页槽的指针(645)的更新,数据页槽池可安全向下收缩至由第一使用的数据页槽的指针(665)识别的位置。
[0088] 在采用图6所示的分配方法的实施方案中,用于日志页面池和数据页面池的页面大小可被独立挑选,同时仍促进良好的堆积性能。在此类实施方案中,可能不存在有效日志页面链接至由应用数据形成的欺骗日志页面的可能性,并且可能区分损坏的日志与链接至还未写入的下一页面的有效日志尾部。在采用图6所示的分配方法的实施方案中,在启动时,直到由最后保留的日志页槽的指针(635)识别的位置的所有日志页槽可迅速和相继地被读取,并且整个日志索引可被再构造(包括推测的链接和顺序)。在此类实施方案中,由于可从LSN排序约束推断一切,在日志页面之间可能不需要存在明确的链接。
[0089] 在一些实施方案中,区段可包括三个主要部分(或区):包含热日志的一个、包含冷日志的一个、以及包含用户页面数据的一个。区不必要为SSD的连续区域。它们宁可以存储页面的间隔尺寸来散布。此外,可能存在用于每个区段的根页面,所述每个区段存储关于所述区段的元数据和它的性能。例如,用于区段的根页面可存储用于区段的用户页面大小、区段中的用户页面数目、热日志区的当前开始/头部(其可能以刷新数目的形式记录)、卷纪元、和/或访问控制元数据。
[0090] 在一些实施方案中,热日志区可从客户端接受新的写入,如同它们由存储节点接收。指定来自先前版本的页面的以Δ形式的用户/数据页面改变的两个Δ用户日志记录(DULR),以及指定完全用户/数据页面的内容的绝对用户日志记录(AULR)可被完全写入日志中。日志记录可添加至这个区中,以近似它们被接收(例如,它们不是通过LSN来分类)以及它们可横跨日志页面的顺序。日志记录可为自描述的,例如,它们可包含它们自身的大小的指示。在一些实施方案中,在这个区域中未执行无用数据收集。相反,在所有需要的日志记录已经被复制至冷日志后,可通过从日志开始截断来改造空间。每次扇区被写入时,在热区中的日志扇区可用最近已知的无条件的VDL来注释。有条件的VDL CLR可在它们被接收时被写入至热区中,但仅最近写入的VDL CLR可能为有意义的。
[0091] 在一些实施方案中,每次新的日志页面被写入时,它可被分配一个刷新数目。刷新数目可被写入作为每个日志页面内的每个扇区的部分。当比较两个日志页面时,刷新数目可用于确定哪个日志页面稍后被写入。刷新数目可单调增加,并且范围至SSD(或存储节点)。例如,一组单调增加的刷新数目在SSD上的所有区段之间(或在存储节点上的所有区段)共享。
[0092] 在一些实施方案中,在冷日志区中,日志记录可能以它们的LSN增长顺序来存储。在这个区中,AULR可能不必被顺序存储,取决于它们的大小。例如,如果它们具有大的有效负载,所述有效负载的全部或一部分可存储在数据区中,并且它们可指向它们的数据被存储在数据区中的地方。在一些实施方案中,在冷日志区中的日志页面每次可一整页面地被写入,不是扇区接着扇区地。因为在冷区中的日志页面每次被整个页面地写入,用于其所有扇区中的刷新数目不相同的冷区中的任何日志页面可被认为是不完全写入的页面并且可被忽略。在一些实施方案中,在冷日志区中,DULR可以能够横跨日志页面(直到两个日志页面的最大值)。然而,AULR可能不能够跨越日志扇区,例如,以使得合并操作在单个原子写入中将能够用AULR来替换DULR。
[0093] 在一些实施方案中,冷日志区通过从热日志区复制日志记录来填充。在此类实施方案中,仅其LSN小于或等于当前无条件的卷耐用LSN(VDL)的日志记录可为符合条件的以便被复制到冷日志区。当将日志记录从热日志区移动至冷日志区时,一些日志记录(如许多CLR)可能不需要被复制因为它们不再是必须的。此外,可在这个点处执行用户页面的一些附加合并,其可简化所需的复制数量。在一些实施方案中,一旦给定热区日志页面已被完全写入,并且不再是最新的热区日志页面,以及在热区日志页面上的所有ULR已被成功复制到冷日志区,所述热区日志页面可被释放和再使用。
[0094] 在一些实施方案中,无用数据收集可在冷日志区中进行,以便改造由废弃日志记录占据的空间,例如,不再需要存储在存储层的SSD中的日志记录。例如,当存在用于相同用户页面的随后AULR,以及由日志记录代表的版本的用户页面不再被需要在SSD上保留时,日志记录可变成废弃的。在一些实施方案中,通过合并两个或更多的邻近日志页面以及用更少的新日志页面来替换它们,所述更少的新日志页面包含来自它们替换的日志页面的所有非废弃的日志记录,无用数据收集进程可改造空间。新的日志页面可被分配大于它们替换的日志页面的刷新数目的新的刷新数目。在这些新的日志页面的写入完成后,替换的日志页面可被添加至空闲页面库。注意在一些实施方案中,可能不存在使用任何指针的日志页面的任何明确链接。反而,日志页面的序列可通过在那些页面上的刷新数目来含蓄地确定。每当日志记录的多个副本被发现时,在日志页面中存在的具有最高刷新数目的日志记录可被认为是有效的,并且其他的可被认为是废弃的。
[0095] 在一些实施方案中,例如,因为在数据区(扇区)内管理的空间的间隔尺寸可不同于数据区(存储页面)外的间隔尺寸,可能存在一些存储残片。在一些实施方案中,为使得这个存储残片在控制下,所述系统可追踪由每个数据页面使用的扇区的数目,可优先从几乎完全的数据页面分配,并且可优先无用数据收集几乎空的数据页面(如果它仍为相关的,其可需要将数据移动至新的位置)。注意在一些实施方案中,被分配至区段的页面可能在所述三个区中被重定意图。例如,当被分配至区段的页面被释放时,它可保持与那个区段关联持续某个时间段,并且随后可在那个区段的三个区中的任何一个中使用。每个扇区的扇区标头可指示所述扇区属于的区。一旦页面中的所有扇区为空闲的,所述页面可返回在区上共享的常用空闲存储页面池。这个空闲存储页面共享在一些实施方案中可减少(或避免)存储残片。
[0096] 在一些实施方案中,本文描述的分布式数据库优化存储系统可在存储器中维持各种数据结构。例如,对于在区段中存在的每个用户页面,用户页面表格可存储比特,所述比特指示这个用户页面是否为“清除的”(即它是否包括所有零点)、来自用于页面的冷日志区的最新日志记录的LSN、以及来自用于页面的热日志区的所有日志记录的位置的阵列/列表。对于每个日志记录,用户页面表格可存储扇区数目、那个扇区内的日志记录偏移、将在那个日志页面内读取的扇区的数目、第二日志页面(如果日志记录跨越日志页面)的扇区数目、以及将在那个日志页面内读取的扇区的数目。在一些实施方案中,用户页面表格也可存储来自冷日志区的每个日志记录的LSN,和/或用于最新的AULR(如果它在冷日志区)的有效负载的扇区数目的阵列。
[0097] 在本文描述的分布式数据库优化存储系统的一些实施方案中,LSN索引可存储在存储器中。LSN索引可将LSN映射至冷日志区内的日志页面。假设在冷日志区中的日志记录被分类,它可能将包括每个日志页面一个条目。然而,在一些实施方案中,每个非废弃的LSN可存储在索引中,并且映射至对应的扇区数目、偏移、和用于每个日志记录的扇区的数目。
[0098] 在本文描述的分布式数据库优化存储系统的一些实施方案中,日志页面表格可存储在存储器中,并且日志页面表格可在冷日志区的无用数据收集期间使用。例如,日志页面表格可识别哪些日志记录为废弃的(例如,哪些日志记录可被无用数据收集),以及多少空闲空间在每个日志页面上可用。
[0099] 在本文描述的存储系统中,程度可为代表可与其他程度组合(连结的或剥离的)以便代表卷的高耐用存储单元的逻辑概念。可通过单个保护组中的成员关系使得每个程度耐用。程度可给LSN类型的读取/写入接口提供具有在创建时限定的固定大小的连续字节子范围。对程度的读取/写入操作可通过包含的保护组映射至一个或多个合适的区段读取/写入操作中。如本文使用的,术语“卷程度”可指用于代表卷内的具体字节子范围的程度。
[0100] 如以上指出的,卷可包括多个程度,每个程度由包括一个或多个区段的保护组代表。在一些实施方案中,指向不同程度的日志记录可具有交错的LSN。为改变直到特定LSN的卷以便(使其)为耐用的,可能需要直到那个LSN的所有日志记录为耐用的,无论它们属于的程度。在一些实施方案中,客户端可追踪还未被使得耐用的突出日志记录,并且一旦直到具体LSN的所有ULR被使得耐用,它可将卷耐用LSN(VDL)消息发送至卷中的保护组中的一个。VDL可被写入至用于保护组的所有同步镜像区段。这有时被称为“无条件VDL”,并且它可周期性地持续至各种区段(或更具体地,至各种保护组)连同在所述区段上发生的写入活动。在一些实施方案中,无条件VDL可存储在日志扇区标头中。
[0101] 在各种实施方案中,可在区段上执行的操作可包括写入从客户端接收的DULR或AULR(其可包括将DULR或AULR写入至热日志区的尾部,以及随后更新用户页面表格)、读取冷用户页面(其可包括定位用户页面的数据扇区,以及返回它们而不需要应用任何附加的DULR)、读取热用户页面(其可包括定位用于用户页面的最近AULR的数据扇区,将任何随后的DULR应用至用户页面,在返回它前),用AULR替换DULR(其可包括合并用于用户页面的DULR以便创建替换应用的最后DULR的AULR)、操纵日志记录等。如本文描述的,合并为将DULR应用至较早版本的用户页面以便创建稍后版本的用户页面的进程。因为(直到另一DULR被写入)在合并前写入的所有DULR可能不需要按需读取和应用,合并用户页面可帮助简化读取时延。通过使得旧的AULR和DULR为废弃的(假定不存在需要日志记录为当前的快照),它也可帮助改造存储空间。在一些实施方案中,合并操作可包括定位最近的AULR,以及依次应用任何随后的DULR而不跳过DULR中的任何一个。如以上指出的,在一些实施方案中,合并可能不在热日志区内执行。反而,它可在冷日志区内执行。在一些实施方案中,当日志记录从热日志区复制至冷日志区时,合并也可被执行。
[0102] 在一些实施方案中,合并用户页面的决定可由用于页面的未决定的DULR链的大小(例如,如果DULR的长度超过用于合并操作的预先限定的阈值,根据全系统的、具体应用的或客户端指定的政策))、或由被客户端读取的用户页面来触发。
[0103] 图7为示出根据一个实施方案的数据库卷710的示例性配置的框图。在这个实例中,对应于各种地址范围715(被示出作为地址范围715a-715e)中的每一个的数据被存储为不同的区段745(被示出为区段745a-745n)。更具体地,对应于各种地址范围715中的每一个的数据可被组织至不同的程度(被示出作为程度725a-725b,和程度735a-735h)中,并且这些程度中的每一个可包括在不同的保护组730(被示出作为730a-730f)中,用或不用剥离(如被示出为带区集720a和带区集720b)。在这个实例中,保护组1示出擦除编码的使用。在这个实例中,保护组2和3以及保护组6和7代表彼此的镜像数据组,同时保护组4代表单个实例(非冗余的)的数据组。在这个实例中,保护组8代表组合其他保护组的多层保护组(例如,这可代表多区域保护组)。在这个实例中,带区集1(720a)和带区集2(720b)示出在一些实施方案中程度(例如,程度725a和725b)可如何被剥离至卷中。
[0104] 更具体地,在这个实例中,保护组1(730a)包括程度a-c(735a-735c),所述程度a-c(735a-735c)分别包括来自范围1-3(715a-715c)的数据,并且这些程度可映射至区段1-4(745a-745d)。保护组2(730b)包括程度d(735d),所述程度d(735d)包括从范围4(715d)剥离的数据,并且这个程度映射至区段5-7(745e-745g)。类似地,保护组3(730c)包括程度e(735e),所述程度e(735e)包括从范围4(715d)剥离的数据,并且被映射至区段8-9(745h-745i),以及保护组4(730d)包括程度f(735f),所述程度f(735f)包括从范围4(715d)剥离的数据,并且被映射至区段10(745j)。在这个实例中,保护组6(730e)包括程度g(735g),所述程度g(735g)包括从范围5(715e)剥离的数据,并且被映射至区段
11-12(745k-745l),以及保护组7(730f)包括程度h(735h),所述程度h(735h)包括从范围
5(715e)剥离的数据,并且被映射至区段13-14(745m-745n)。
[0105] 现在转向图8,在各种实施方案中,如上所述,数据库系统可被配置来响应于对存储在存储节点上的数据页面内的数据的各种访问请求(例如,写入请求)产生重做日志记录,并且将重做日志记录发送至存储针对其产生重做日志记录的相应数据页面的存储节点。存储节点可检测特定数据页面的合并事件,并且作为响应针对特定数据页面执行合并操作。相比之下,典型的数据库系统可应用系统范围检查点,所述系统范围检查点以周期性间隔刷新将应用至所存储数据的所有所产生的重做日志,从而扰乱访问请求和由数据库系统执行的其他任务的处理。
[0106] 尽管图8的方法可被描述为由日志结构化存储系统、如分布式数据库优化存储系统410的各种部件(例如,存储系统服务器节点430、440、450等)来执行,但是在一些情况下所述方法不需要由任何特定部件来执行。例如,在一些情况下,根据一些实施方案,图8的方法可由一些其他部件或计算机系统执行。或者,在一些情况下,数据库系统400的部件可以与图4的实例中所示不同的方式组合或存在。在各种实施方案中,图8的方法可由分布式数据库优化存储系统的一个或多个计算机执行,所述计算机中的一个被示出为图10的计算机系统。图8的方法被示出为用于系统范围检查点避免的方法的一种示例性实现方式。在其他实现方式中,图8的方法可包括另外的或比所示少的框图。
[0107] 如810处所指示,可维持链接至存储用于数据库的特定数据页面的重做日志记录。这些重做日志记录(有时称为如以上所述的ULR)可描述用户数据的改变。重做日志记录可链接至用户数据的特定部分,如数据页面。例如,在一些实施方案中,重做日志记录可形成最终链接至特定数据页面的一连串重做日志记录,其中每个重做日志记录指向先前接收的数据页面的重做日志记录。使用这个实例,如果三个重做日志记录链接至特定数据页面,那么最近接收的重做日志记录将指向下一个最近接收的重做日志记录,所述下一个最近接收的重做日志记录又将指向第三个最近接收的重做日志记录,所述第三个最近接收的重做日志记录指向数据页面的最近保存状态。请注意,由指向前一重做日志记录的每个指针指示的重做日志记录的逻辑排序不暗示此类重做日志记录以这种顺序物理存储。如以上关于图6讨论的,在一些实施方案中,这些重做日志记录可与链接至用户数据的其他部分的其他重做日志记录交错。因此,先前实例不意图进行限制。
[0108] 在各种实施方案中,可从可管理一个或多个数据库的数据库系统、如数据库引擎头节点420接收重做日志记录,用于所述一个或多个数据库的数据可存储在存储节点如存储节点430、440、450等处。然而,在至少一些实施方案中,存储节点可从一个或多个另外数据库系统或节点接收重做日志记录,存储节点存储用于另外数据库系统或节点的数据。这些其他数据库系统或节点也可发送链接至存储在存储节点处的用于其相应数据库的数据的特定部分的重做日志记录。
[0109] 在一些实施方案中,随后可存储接收的重做日志记录。图6描述此类重做日志记录可在存储节点处被接收、处理并存储的方式的各种实施方案。可维持所存储重做日志记录的各种形式的元数据,如链接至特定部分数据(如数据页面)的重做日志记录的数目或计数。例如,如果像在以上给定的实例中,三个重做日志记录链接至特定数据页面,那么针对特定数据页面的重做日志记录计数可维持在三。可维持关于重做日志记录的其他元数据、如大小或物理位置,以及它们所链接至的数据的部分、如指向各个其他日志记录的指针或指向数据页面的最近保存状态的指针。
[0110] 响应于重做日志记录自身的改变、它们所链接至的特定数据页面的改变、或通过利用重做日志记录执行的或关于重做日志记录的操作或其他方法或技术,可对所维持的所存储重做日志记录的元数据进行更新。例如,如果如830处所指示执行合并操作以应用链接至特定数据页面的一个或多个重做日志记录来产生数据页面的当前状态,那么重做日志记录计数可更新,以将那些所应用的重做日志记录从针对特定数据页面的重做日志记录计数移除。
[0111] 在各种实施方案中,至少部分地基于链接至特定数据页面的一个或多个重做日志记录,可检测特定数据页面的合并事件,如820处所指示。检测到的合并事件可指示可针对特定数据页面执行合并操作。在至少一些实施方案中,检测特定数据页面的合并事件可独立于或不考虑所检测的其他数据页面的合并事件而发生。考虑其中特定数据页面可以是许多重做日志记录针对其被接收的“热”数据页面的情境。极少地接收针对其他数据页面的重做日志记录。检测合并事件可基于链接至相应数据页面的重做日志记录的数目超过合并阈值,并且因此在这种情境下,与其他数据页面相比可更频繁地检测特定“热”数据页面的合并事件。
[0112] 检测合并事件可作为存储节点监视部件或进程(其可作为后台进程运行)的一部分执行,其中处置读取、写入或其他访问请求的前台进程可先于(或迟于)检测合并事件执行。合并事件的检测可以周期性间隔或非周期性间隔发生,如在存储节点的工作负载小于工作负载阈值时。
[0113] 可实施用于至少部分地基于链接至特定数据页面的重做日志记录检测合并事件的各种方法和技术。例如,在至少一些实施方案中,可利用合并阈值检测合并事件。合并阈值可限定在检测到合并事件之前可链接至特定数据页面的重做日志记录的数目。例如,如果特定数据页面具有11个重做日志记录,超过10个重做日志记录的合并阈值,那么可检测到合并事件。针对不同的数据页面可利用不同的合并阈值。例如,再次考虑接收链接至数据页面的频繁重做日志记录的“热”数据页面情境。与较不频繁地接收重做日志记录的数据页面相比,针对“热”数据页面可利用较高的合并阈值,从而减少针对“热”数据页面执行的合并操作的数目。可替代地,在一些实施方案中,可利用相同或类似的合并阈值。合并阈值也可与各种其他技术或部件结合。例如,使用其他部件来计算何时可超过合并阈值,以及设置计时器或其他部件以向执行合并事件检测的后台监视器或其他进程指示应检查针对特定数据页面的重做日志记录计数。
[0114] 在至少一些实施方案中,可确定针对特定数据页面(或针对特定数据页面组)的合并阈值。例如在一些实施方案中,可根据用户限定的合并阈值来确定合并阈值。用户限定的合并阈值可为请求的、确定的或向来自数据库系统的节点(如数据库引擎头节点420)指示的合并阈值,或数据库系统的客户端可供应将用于检测合并事件的合并阈值。在一些实施方案中,合并阈值可基于存储节点的工作负载或性能来确定。例如,在一些实施方案中,如果工作负载或性能测量指示执行合并操作的能力低,那么可增加合并阈值,以使得存储节点在其当前工作负载下可处置所述数目的检测到的合并事件。在一些实施方案中,可计算针对特定数据页面接收重做日志记录的速率或频率,并且将其用于确定合并阈值。在至少一些实施方案中,各种其他特征可用于确定合并阈值,如重做日志记录的大小、重做日志记录在物理存储中的位置、可供用于存储重做日志记录的空间、和/或可执行合并操作以将重做日志记录应用至先前存储版本的数据页面的时间。
[0115] 响应于检测特定数据页面的合并事件,可将链接至特定数据页面的一个或多个重做日志记录应用至先前存储版本的特定数据,以产生在它的当前状态下的特定数据页面,如830处所指示。在至少一些实施方案中,应用链接至特定数据页面的重做日志记录作为合并操作的一部分执行。如以上所述的合并操作或合并可将重做日志记录(如DULR)应用至更早版本的用户页面,以创建稍后版本的用户页面。在一些实施方案中,合并操作可包括定位最近的AULR(例如,先前存储版本的数据页面),以及依次应用任何随后的DULR而不跳过任何DULR。例如,如果3个DULR被接收并链接至AULR,将第一接收的DULR应用至AULR(从而将第一接收的改变应用至先前存储的数据页面)。随后,应用下一个接收的DULR,并且最后应用最近的DULR,从而以基于在存储节点处接收DULR所确定的顺序来应用DULR。在一些实施方案中,产生新的AULR以作为特定数据页面的当前状态。可更新以上讨论的元数据(如重做日志记录计数)以反映重做日志记录的应用,并且考虑到重做日志记录计数,从计数移除它们的数目。
[0116] 在至少一些实施方案中,在检测合并事件(820处所指示)与应用重做日志记录(830处所指示)之间可存在或强制实施延迟。例如,执行所述检测和所述应用的存储节点的工作负载可确定执行应用重做日志记录与检测合并事件之间的延迟。类似地,响应于检测合并事件而应用重做日志记录可作为后台进程的一部分执行,后台进程被简化或仅当不执行前台进程、如处置各种访问请求(例如,读取请求或写入请求)时执行。可将数据页面的重做日志的延迟的合并操作或应用输入至数据结构中,如确定数据页面何时应应用重做日志记录的顺序、次序或时机的先进先出(FIFO)队列或优先队列。例如,如果像在以上描述的情境中,“热”数据页面具有检测到的合并事件,可更有效的是对“热”数据页面而不是另一数据页面执行应用重做日志。作为延迟或执行应用重做日志(作为后台进程)的结果,可接收链接至已经被检测到合并事件的数据页面的一个或多个另外重做日志记录。在至少一些实施方案中,当其他重做日志记录应用至先前存储版本的数据页面时,可应用这些另外重做日志记录。
[0117] 如图4所示,多个存储节点430、440、450等可作为分布式存储服务的一部分实施。以上关于图8描述的各种方法和技术可由这些相互独立的多个存储节点执行。每个存储节点可确定不同的或相同的合并阈值,并且执行检测合并事件并作为响应而与彼此在同时或不同时间应用一个或多个重做日志记录。
[0118] 现在转向图9A,其示出展示根据一些实施方案的执行用于分布式数据库系统的快速崩溃恢复的方法的一系列图示。典型数据库系统中的崩溃恢复是艰巨的过程。在这些典型系统中,在从数据库系统故障恢复之后,获得干净版本的数据库,随后必须重播来自尚未存储在磁盘上的事务的所有重做日志记录,以将数据库复原至它在数据库系统故障之前的当前状态,从而在可访问数据库之前产生大量复原时间。相比之下,图9A提供用于分布式数据库系统的快速崩溃恢复的图示,快速崩溃恢复可提供更快且更有效的执行崩溃恢复的技术。
[0119] 在场景992中,数据库客户端906(如以上关于图2描述的数据库客户端250)通过网络260(以上在图2中描述)与实施数据库的数据库头节点902(如以上关于图4描述的数据库头节点430)通信。存储节点908可以是可为由数据库头节点902实施的数据库实施日志结构化数据存储的一个或多个存储节点。可接收各种访问请求,并随后在从存储节点908检索所访问数据之后由数据库头节点902服务。代替发送用户数据,可产生重做日志记录(如以上关于图8描述的那些)并将其发送至存储节点908。可将重做日志记录维持在存储节点908处。在至少一些实施方案中,响应于检测合并事件,可执行合并操作,如以上关于图8所描述。
[0120] 场景994示出数据库头节点902故障。数据库头节点故障可为导致数据库头节点不能继续运行的任何类型的系统故障,如功率损失、无可用存储器、系统失灵等。在数据库客户端906与数据库头节点902之间无通信可被发送或接收,如图示中所指示。因此,不可提供对数据库的访问。同样地,在存储节点908与数据库头节点902之间无通信可被发送或接收,从而不可处理对存储用于数据库的数据的请求。
[0121] 在场景996中,可示出恢复操作。可使新的数据库头节点904上线,新的数据库头节点904可为在相同的系统硬件上重新启动的一个版本的头节点应用程序,或在不同的硬件上启动的头节点的另一个实例。如图所示,可由数据库头节点904建立与存储节点908的连接。场景998描述在与存储节点908建立连接之后,可使得与在数据库头节点902处所实施相同的数据库可供用于在新的数据库头节点904处进行访问。访问请求(如读取请求或写入请求)可通过网络260从数据库客户端906发送至新的数据库头节点904。新的数据库头节点904可无需重播重做日志记录以获得数据在数据库头节点故障之前的当前状态,这是因为重做日志记录已经被发送至存储节点908,从而可向新的数据库头节点908提供当前版本的存储用于数据库的数据以用于服务访问请求。当接收对特定数据的请求时,存储节点908可将重做日志记录应用至先前存储版本的特定数据。可替代地,特定数据的当前状态可能已经存储在存储节点处,其中已经应用指向特定数据页面的任何重做日志记录,如在如以上关于图8所讨论检测到合并事件时。
[0122] 图9B为展示根据一些实施方案的执行用于分布式数据库系统的快速崩溃恢复的方法的流程图。在各种实施方案中,数据库头节点故障可能发生。这个头节点故障可能阻止对由故障的数据库头节点实施和管理的数据库的任何通信、修改、或其他形式的访问。例如,数据库系统客户端(如图2描述的数据库客户端250)可能不能够将读取请求或写入请求发送至故障的数据库头节点。可如由以上在图2中描述的网络服务平台200或一些其他系统或部件检测数据库头节点的故障。响应于头节点的故障,可命令重新启动的数据库头节点或新的数据库头节点(例如,与先前故障的头节点托管在相同或不同硬件上的新的数据库头节点虚拟实例)执行恢复操作。在一些实施方案中,这个恢复操作可包括图9B中描述的各种元件,尽管它不限于这些元件。
[0123] 如910处所指示,从数据库头节点故障恢复可能发生。恢复可以多种方式执行并确定为完成。例如,数据库头节点应用程序在准备运行时可具有各种状态,如执行各种测试、使能各种装置等。作为这个进程的一部分,可确定数据库头节点的就绪状态,所述就绪状态可指示从节点故障恢复的完成。在如910处所指示从数据库节点故障恢复之后,可与存储用于数据库的数据的一个或多个存储节点建立连接,如920处所指示。
[0124] 如以上关于图9A和以上各个其他附图描述的,数据库可由数据库头节点、如图3和4中描述的数据库头节点320或440实施和管理。作为实施数据库的一部分,可在数据库头节点处处理访问请求、如以上描述的读取请求或写入请求。在至少一些实施方案中,将反映对数据库的改变的重做日志记录发送至一个或多个存储节点、如以上在图4中描述的存储节点450,所述重做日志记录反映对存储在存储节点处的数据的改变。存储将被改变的数据(如特定数据页面或数据的其他部分)的存储节点可接收链接至将被改变的数据的部分(如数据页面)的重做日志记录。随后响应于对当前版本的数据页面的请求,或在某个其他时间、如响应于检测合并事件,可将这些重做日志记录应用(例如,合并操作)至先前存储版本的数据的部分(如数据页面)。由于为在数据库头节点处实施的数据库维持用于数据库的重做日志记录(如以上面讨论的各种方式),在一些实施方案中,存储节点可将数据的当前状态发送至数据库头节点,数据的当前状态被保证一直到数据库头节点故障的时间是当前的。
[0125] 可识别将与其建立连接的存储节点。例如,以上在图4中描述的客户端侧存储服务驱动器425可维持指示哪些存储节点存储用于数据库的数据以及数据库的哪些部分存储在存储节点上的信息。可使用以上关于图4讨论的各种通信方法之一来发送连接请求或某个其他通信消息。同样地,可交换确认以及关于存储节点和/或数据库头节点的状态的其他信息。
[0126] 在如920处所指示与一个或多个存储节点建立连接之后,可使得数据库可供用于访问,如930处所指示。在一些实施方案中,可针对一个或多个访问请求(例如,读取请求、写入请求)提供访问。可产生数据库可用性的指示并将其发送至客户端。例如,可将数据库可供用于访问的消息发送至数据库客户端。可通过网络服务平台200(图2中所描述)或某个其他通信平台或装置发送这种消息。如以上所指出,在典型数据库系统中,在使得数据库可用之前必须执行重做日志记录的重播。然而,在至少一些实施方案中,可使得数据库可用而无需重播重做日志记录。请注意,当与重做日志记录一起使用时,术语“重播”通常意味着将一个或多个重做日志记录应用至先前存储版本的数据。
[0127] 在至少一些实施方案中,存储节点可以能够检测或以其他方式意识到数据库头节点故障。响应于检测数据库头节点故障,存储节点可对在存储节点处接收的重做日志记录执行截断操作。截断操作可确定或识别为在数据库头节点故障之前未完成的系统事务的一部分的重做日志记录。随后可将这些识别的重做日志记录移除或以其他方式标记、移动、或识别,以使得它们可不被应用至它们已经链接至的数据页面。例如,如果存储页面维持用于特定数据页面的5个重做日志记录,并且最近的3个重做日志记录为在数据库节点故障之前未完成的系统事务的一部分,那么当通过仅应用2个最旧的重做日志记录来产生数据页面的当前状态时,存储节点可忽略用于数据页面的最近的3个重做日志记录。在至少一些实施方案中,在允许与恢复的数据库头节点建立连接之前,可在具有受影响重做日志记录的存储节点上执行截断操作。在一些实施方案中,数据库引擎头节点可类似地被配置来确定或识别为在数据库头节点故障之前未完成的系统事务的一部分的重做日志记录,并且向存储节点发送通知:可将这些识别的重做日志记录移除或以其他方式标记、移动、或识别,以使得它们可不被应用至它们已经链接至的数据页面。例如,客户端侧存储服务驱动器(如以上关于图3描述的客户端侧存储服务驱动器325)可执行先前描述的技术。在一些实施方案中,描述截断操作的这些技术可作为后台进程的一部分执行。
[0128] 在至少一些实施方案中,系统事务可为执行或实施用户事务的操作或其他形式的一个或多个任务。用户事务可包括执行来自接收的访问请求的各种任务或操作的多个系统事务。例如,可接收对数据库的插入指令。作为用户事务,这个插入指令可包括执行插入的多个系统事务,如交互数据库数据结构(例如b树)以执行插入。在至少一些实施方案中,未完成用户事务为以下用户事务:所述用户事务中所包括的所有系统事务可能尚未完成(或变持久)。类似地,系统事务可能也是未完成的。在一些实施方案中,作为用户和系统事务的一部分的反映对存储用于数据库的数据进行的改变的重做日志记录可利用特定用户和/或系统事务来识别。
[0129] 图9C为示出根据一些实施方案的在所恢复数据库中处理访问请求的方法的流程图。如以上所指出,在至少一些实施方案中,可在已经使得数据库可供用于访问的数据库头节点处接收访问请求。访问请求可为读取请求、写入请求、或获得或修改存储用于数据库的数据的任何其他请求。如图9C示出,可接收对数据库的访问请求,如940处所指示。作为响应,可进行从一个或多个存储节点请求一个或多个数据页面,如950处所指示(以上关于图5更详细论及来自客户端的访问请求和来自数据库头节点的数据请求两者)。可从存储节点接收所请求一个或多个数据页面的当前状态,如960处所指示。如以上讨论的,这个当前状态可通过将先前接收的重做日志记录重播或应用至先前存储版本的数据页面,或通过返回为当前状态的先前存储版本的数据页面来产生。在各种实施方案中,响应于接收对数据的请求,所请求的每个数据页面或数据的部分可确定、产生、和/或发送回它的当前状态(例如,以惰性方式)。
[0130] 在至少一些实施方案中,可在数据库头节点处维持撤销日志记录。如以上讨论的,撤销日志记录可记录将应用至存储用于数据库的数据以撤销对数据进行的改变的改变,如在未完成用户事务的情况下。用户事务可包括对存储用于数据库的数据的多个改变(如多个系统事务),产生一个或多个重做日志记录和一个或多个撤销日志记录。在未提交所有用户事务的改变(例如,使得其持久)时,用户事务可能是未完成的。如以上关于图3描述的事务日志340的事务表可被实施,以指示哪些用户事务和它们所关联的存储在存储节点处的数据的部分在数据库头节点故障之前未提交,并且因此是未完成的。如970处所指示,可确定接收的数据页面是否受未完成用户事务影响,如由事务表所指示。如果是,如肯定出口指示,那么可将一个或多个撤销日志记录应用至数据页面以撤销由未完成事务做出的改变,以产生数据页面的新的当前状态,如972处所指示。在已经应用撤销日志记录之后,或数据页面不受未完成用户事务影响,那么可提供数据页面的当前状态以用于服务访问请求,如980处所指示。
[0131] 在至少一些实施方案中,可执行基于事务表来确定或识别受未完成用户事务影响的数据的部分的后台进程。可发送并接收对受未完成用户事务影响的数据的部分(如数据页面)的当前状态的请求。随后可应用撤销日志记录以撤销由未完成用户事务指向这些数据页面的改变。在各种实施方案中,在已经应用重做日志记录之后,可用这些数据页面来更新数据库高速缓冲存储器。
[0132] 在至少一些实施方案中,可使用先前记录的快照将数据库状态复原至更早的状态。例如,在使得数据库可供用于访问之前,可向存储节点发送将用于数据库的数据复原至对应于先前记录的快照的状态的请求。可通过识别用于存储节点处所存储的重做日志的时间戳记或其他标记或指示符来记录快照,所述时间戳记或其他标记或指示符允许将先前接收的重做日志记录重播直到记录的快照点(例如,时间戳或标记),其中所述复原包括将多个重做日志中的一个或多个应用至先前版本的数据。以上提供在存储节点上实施快照的进一步的讨论。
[0133] 尽管图9B-9C的方法和技术可被描述为由数据库系统的各种部件(如数据库引擎头节点420)执行,但是在一些情况下所述方法不需要由任何特定部件执行。例如,在一些情况下,根据一些实施方案,图9B-9C的方法可由一些其他部件或计算机系统来执行。或者,在一些情况下,数据库系统400的部件可以与图4的实例中所示不同的方式组合或存在。在各种实施方案中,图9B-9C的方法可由分布式数据库系统的一个或多个计算机执行,所述计算机中的一个被示出为图10的计算机系统。图9B-9C的方法被示出为用于分布式数据库系统的快速崩溃恢复的方法的一种示例性实现方式。在其他实现方式中,图9B-9C的方法可包括另外的或比所示少的框图。
[0134] 在各种实施方案中,本文所述的方法可通过硬件和软件的任何结合来实施。例如,在一个实施方案中,所述方法可由包括执行程序指令的一个或多个处理器的计算机系统(例如,如图10中的计算机系统)来实施,所述程序指令存储在连接至处理器的计算机可读存储介质上。程序指令可被配置来实施本文所述的功能(例如,实施数据库服务/系统和/或本文所述的存储服务/系统的各种服务器和其他部件的功能)。
[0135] 图10为示出根据各种实施方案的被配置来实施本文所述的数据库系统的至少一部分的计算机系统的框图。例如,在不同的实施方案中,计算机系统1000可被配置来实施数据库层的数据库引擎头节点、或独立分布式数据库优化存储系统的多个存储节点中的一个,所述独立分布式数据库优化存储系统存储数据库和代表数据库层的客户端的关联元数据。计算机系统1000可能是各种类型的装置中的任何一种,包括但不限于:个人计算机系统、台式电脑、膝上电脑或笔记本电脑、主机计算机系统、手持式计算机、工作站、网络计算机、消费装置、应用服务器、存储装置、电话、移动电话、或大体上任何类型的计算装置。
[0136] 计算机系统1000包括通过输入/输出(I/O)接口1030连接至系统存储器1020的一个或多个处理器1010(其中的任何一个可包括多个核心,所述多个核心可为单线程的或多线程的)。计算机系统1000还包括耦接到I/O接口1030的网络接口1040。在各种实施方案中,计算机系统1000可为包括一个处理器1010的单一处理器系统,或包括若干处理器1010(例如两个、四个、八个或另一合适数量)的多处理器系统。处理器1010可为能够执行指令的任何处理器。例如,在各种实施方案中,处理器1010可为实施各种指令集架构(ISA)中任何一种架构的通用或嵌入式处理器,所述架构例如x86、PowerPC、SPARC、或MIPS ISA或任何其他合适ISA。在多处理器系统中,每一个处理器1010可通常但不一定实施相同的ISA。计算机系统1000也包括一个或多个网络通信装置(例如,网络接口1040),用于与其他系统和/或部件通过通信网络(例如,因特网、LAN等)通信。例如,在系统1000上执行的客户端应用程序可使用网络接口1040,以便与在单个服务器或一组服务器上执行的服务器应用程序通信,所述一组服务器实施本文所述的数据库系统的一个或多个部件。在另一实例中,在计算机系统1000上执行的服务器应用程序的实例可使用网络接口1040,以便与可能在其他计算机系统(例如,计算机系统1090)上执行的服务器应用程序(或另一服务器应用程序)的其他实例通信。
[0137] 在所述的实施方案中,计算机系统1000也包括一个或多个持久的存储装置1060和/或一个或多个I/O装置1080。在各种实施方案中,持久存储装置1060可对应于磁盘驱动、磁带驱动、固态存储器、其他大容量存储装置、或任何其他持久存储装置。计算机系统1000(或分布式应用程序或在其上操作的操作系统)可如期望的将指令和/或数据存储在持久存储装置1060中,并且可按需检索存储的指令和/或数据。例如,在一些实施方案中,计算机系统1000可代管存储系统服务器节点,并且持久存储1060可包括附接至那个服务器节点的SSD。
[0138] 计算机系统1000包括被配置来存储可由处理器1010访问的指令和数据的一个或多个系统存储器1020。在各种实施方案中,系统存储器1020可使用任何合适的存储器技术(例如,高速缓冲存储器、静态随机存取存储器(SRAM)、DRAM、RDRAM、EDO RAM、DDR 10RAM、同步动态RAM(SDRAM)、Rambus RAM、EEPROM、非暂时性/闪存类型的存储器、或任何其他类型的存储器中的一个或多个)来实施。系统存储器1020可包含程序指令1025,所述程序指令1025可由处理器1010执行以便实施本文所述的方法和技术。在各种实施方案中,程序指令1025可能以平台本地二进制、任何解译语言(如JavaTM字节代码)、或以任何其他语言(C/C++、JavaTM等)、或以其任何组合来编码。例如,在所示的实施方案中,程序指令1025包括程序指令,所述程序指令可执行以便实施数据库层的数据库引擎头节点、或独立分布式数据库优化存储系统的多个存储节点中的一个的功能性,所述独立分布式数据库优化存储系统在不同的实施方案中存储数据库和代表数据库层的客户端的关联元数据。在一些实施方案中,程序指令1025可实施多个独立客户端、服务器节点、和/或其他部件。
[0139] 在一些实施方案中,程序指令1025可包括可执行以便实施操作系统(未示出)的指令,所述操作系统可为各种操作系统中的任何一种,如UNIX、LINUX、SolarisTM、MacOSTM、WindowsTM等。程序指令1025中的任何一个或所有可被提供作为可包括具有在其上存储的指令的非暂时性计算机可读存储介质的计算机程序产品、或软件,所述指令可用于编程计算机系统(或其他电子装置)以便根据各种实施方案执行进程。非暂时性的计算机可读的存储介质可包括用于存储机器(例如,计算机)可读的形式(例如软件、处理应用程序)的信息的任何机构。一般来说,非暂时性的计算机可访问的介质可包括计算机可读的存储介质或存储器介质,例如磁性介质或光学介质,例如经由I/O接口1030连接至计算机系统1000的磁盘或DVD/CD-ROM。非暂时性计算机可读存储介质还可以包括可作为系统存储器
1020或另一类型的存储器被包括在计算机系统1000的一些实施方案中的任何易失性或非易失性介质,如RAM(例如,SDRAM、DDR SDRAM、RDRAM、SRAM等)、ROM等。在其他实施方案中,程序指令可使用通过通信介质(如网络链接和/或无线链接)传达的光学、声学或其他形式的传播信号(例如,载波、红外线信号、数字信号等)来通信,如可通过网络接口1040执行的。
[0140] 在一些实施方案中,系统存储器1020可包括可如本文所述配置的数据存储1045。例如,在不同时间和在各种实施方案中,如本文描述成由数据库层(例如,在数据库引擎头节点上)存储的信息(如事务日志、撤销日志、高速缓存的数据页面、或在执行本文所述的数据库层功能中使用的其他信息)可存储在数据存储1045中、或在一个或多个节点上的系统存储器1020的另一部分上、在持久存储1060中、和/或在一个或多个远程存储装置1070上。类似的,在不同时间和在各种实施方案中,如本文描述成由存储层存储的信息(例如,重做日志记录、合并的数据页面、和/或在执行本文所述的分布式存储系统功能中使用的其他信息)可存储在数据存储1045中、或在一个或多个节点上的系统存储器1020的另一部分上、在持久存储1060中、和/或在一个或多个远程存储装置1070上。一般而言,系统存储器1020(例如,系统存储器1020内的数据存储1045)、持久存储1060、和/或远程存储
1070可存储数据块、数据块复制品、与数据块和/或它们的状态关联的元数据、数据块配置信息、和/或可在实施本文所述的方法和技术中使用的任何其他信息。
[0141] 在一个实施方案中,I/O接口1030可被配置来协调处理器1010、系统存储器1020和系统中的任何外围装置之间的I/O流量,包括通过网络接口1040或其他外围接口。在一些实施方案中,I/O接口1030可执行任何必需协议、时序或其他数据转换以便将来自一个部件(例如,系统存储器1020)的数据信号转换成适合于由另一个部件(例如,处理器1010)使用的格式。在一些实施方案中,I/O接口1030可包括对于通过各种类型的外围总线附接的装置的支持,所述外围总线例如外围组件互连(PCI)总线标准或通用串行总线(USB)标准的变化形式。在一些实施方案中,I/O接口1030的功能可分成两个或更多个单独的部件中,例如北桥和南桥。另外,在一些实施方案中,I/O接口1030的一些或所有功能性,例如至系统存储器1020的接口,可直接并入处理器1010中。
[0142] 例如,网络接口1040可被配置来允许数据在计算机系统1000与附接至网络的其他装置之间交换,所述其他装置如其他计算机系统1090(其可实施一个或多个存储系统服务器节点、数据库引擎头节点、和/或本文所述的数据库系统的客户端)。此外,网络接口1040可被配置来允许在计算机系统1000与各种I/O装置1050和/或远程存储1070之间的通信。输入/输出装置1050可在一些实施方案中包括一个或多个显示终端、键盘、小键盘、触摸屏、扫描装置、语音或光学识别装置,或适合于由一个或多个计算机系统1000输入或撷取数据的任何其他装置。多个输入/输出装置1050可存在于计算机系统1000中或可分布于计算机系统1000的不同节点上。在一些实施方案中,类似输入/输出装置可与计算机系统1000分开并且可经由有线或无线连接,例如网络接口1040来与包括计算机系统
1000的分布式系统的一个或多个节点相互作用。网络接口1040通常可支持一个或多个无线网络协议(例如,Wi-Fi/IEEE 802.11、或另一无线网络标准)。然而,在各个实施方案中,网络接口1040可以支持经由任何合适的有线或无线通用数据网络(例如以太网网络类型)进行通信。另外,网络接口1040可以支持经由电信/电话网络(如模拟语音网络或数字光纤通信网络)、经由存储区域网络(如光纤信道SAN)或经由任何其他合适类型的网络和/或协议进行通信。在各种实施方案中,计算机系统1000可包括多于、少于、或不同于图10所示的那些的部件(例如,显示器、视频卡、音频卡、外围装置、其他网络接口,如ATM接口、以太网接口、中继接口等。)
[0143] 注意本文所述的分布式系统实施方案中的任何一个,或它们的部件中的任何一个,可被实施作为一个或多个网络服务。例如,数据库系统的数据层内的数据库引擎头节点可呈现数据库服务和/或其他类型的数据存储服务,所述数据库服务和/或其他类型的数据存储服务对客户端采用文本所述的分布式存储系统,如网络服务。在一些实施方案中,网络服务可由被设计来支持通过网络的彼此协作的机对机相互作用的软件和/或硬件系统实施。网络服务可具有以机器可处理格式描述的接口,如网络服务描述语言(WSDL)。其他系统可能以由描述网络服务的接口的描述规定的方式与网络服务相互作用。例如,网络服务可限定其他系统可调用的各种操作,并且可限定特定的应用编程接口(API),当请求各种操作时,其他系统可能期望服从所述特定的应用编程接口(API)。
[0144] 在各种实施方案中,通过使用包括与网络服务请求关联的参数和/或数据的消息,网络服务可被请求或调用。此类消息可根据特定的标记语言(如可延伸标记语言(XML))被格式化,和/或使用协议(简单对象访问协议(SOAP))来封装。为执行网络服务请求,网络服务客户端可装配包括所述请求的消息,以及使用基于因特网的应用层转移协议(如超文本传输协议(HTTP))将所述消息传达至对应于网络服务的可寻址端点(例如,统一资源定位符(URL))。
[0145] 在一些实施方案中,网络服务可使用表述性状态转移(“RESTful”)技术而不是基于消息的技术来实施。例如,根据RESTful技术实施的网络服务可通过包括在HTTP方法(如PUT、GET或DELETE)内而不是封装在SOAP消息内的参数来调用。
[0146] 鉴于以下条款,上述实施方案可更好地理解:
[0147] 1.一种系统,其包括:
[0148] 多个存储节点,所述多个存储节点实施分布式存储系统,其中所述分布式存储系统被配置来实施用于数据库的日志结构化数据存储,其中先前已经在所述多个存储节点处从数据库系统接收多个重做日志记录,其中所述重做日志记录中的每一个描述对存储在所述多个存储节点之中、用于所述数据库的数据的改变;
[0149] 数据库头节点,所述数据库头节点实施所述数据库系统,其中所述数据库头节点被配置来执行故障恢复操作以:
[0150] 与所述多个存储节点建立连接;并且
[0151] 在与所述多个存储节点建立所述连接之后,针对一个或多个访问请求对所述数据库提供访问。
[0152] 2.如条款1所述的系统,其中对所述数据库提供访问,而无需重播所述多个重做日志记录。
[0153] 3.如条款2所述的系统,其中所述数据库系统头节点进一步被配置来:
[0154] 接收对所述数据库的访问请求;
[0155] 基于所接收的访问请求,向所述多个存储节点中的一个发送对存储在所述存储节点处的数据页面的当前状态的请求;并且
[0156] 从所述存储节点接收在所请求数据页面的当前状态下的所请求数据页面,其中将所述多个重做日志记录中的一个或多个应用至所述数据页面的先前保存状态,以在所述存储节点处产生在所述数据页面的当前状态下的所述数据页面。
[0157] 4.如条款1所述的系统,其中向所述多个存储节点发送的所述多个重做日志记录中的至少一些构成系统事务,其中所述多个存储节点中的一个存储节点被配置来:
[0158] 确定所述系统事务是未完成的;并且
[0159] 在产生由所述多个重做日志记录中的所述至少一些改变的数据页面的当前状态时,将所述至少一些重做日志记录识别为将不被应用。
[0160] 5.如条款1所述的系统,其中向所述多个存储节点发送的所述多个重做日志记录中的至少一些构成系统事务,其中所述数据库系统头节点进一步被配置来:
[0161] 确定所述系统事务是未完成的;
[0162] 在产生由所述多个重做日志记录中的所述至少一些改变的数据页面的当前状态时,将所述至少一些重做日志记录识别为将不被应用;并且
[0163] 向所述多个存储节点中的一个或多个发送指示所识别的所述多个重做日志记录中将不被应用的至少一些的通知。
[0164] 6.一种方法,其包括:
[0165] 由实施数据库头节点的一个或多个计算装置执行以下各项:
[0166] 在从数据库头节点故障恢复之后:
[0167] 与实施存储用于数据库的数据的分布式存储系统的多个存储节点中的一个或多个存储节点建立连接,其中所述分布式存储系统被配置来实施用于所述数据库的日志结构化数据存储,其中先前已经在所述多个存储节点处接收多个重做日志记录,其中所述重做日志记录中的每一个描述对存储在其被接收处的相应存储节点处的用于所述数据库的数据的改变;以及
[0168] 在与所述多个存储节点中的所述一个或多个存储节点建立所述连接之后,使得所述数据库可供用于访问。
[0169] 7.如条款6所述的方法,其还包括:
[0170] 接收对所述数据库的访问请求;
[0171] 响应于接收所述访问请求,从所述一个或多个存储节点请求存储用于所述数据库的所述数据的一部分的一个或多个数据页面的当前状态;以及
[0172] 从所述一个或多个存储节点接收存储用于所述数据库的所述数据的所述部分的所述一个或多个数据页面的当前状态,以用于服务所述访问请求。
[0173] 8.如条款7所述的方法,其中由所述一个或多个存储节点中的一个产生所接收的存储用于所述数据库的所述数据的所述部分的所述一个或多个数据页面中的至少一个的所述当前状态,所述一个存储节点将所述多个重做日志记录中的一个或多个重播至先前存储版本的所述至少一个数据页面。
[0174] 9.如条款8所述的方法,其中由所述一个或多个存储节点中的一个发送与所接收的存储用于所述数据库的所述数据的所述部分的所述一个或多个数据页面中的所述至少一个不同的一个的所述当前状态,而无需将所述多个重做日志记录中的一个或多个重播至先前存储版本的所述数据页面。
[0175] 10.如条款7所述的方法,其中所述数据库头节点维持多个撤销日志记录,用于撤销作为重做日志记录发送至所述多个存储的改变,其中所述方法还包括:
[0176] 确定从所述一个或多个存储节点接收的所述一个或多个数据页面中的一个受未完成用户事务影响,其中所述用户事务将改变指向存储在所述一个或多个存储节点处的所述数据、包括所述一个数据页面;以及
[0177] 将一个或多个撤销日志记录应用至所述数据页面,以撤销由所述用户事务指向所述数据页面的改变。
[0178] 11.如条款10所述的方法,其中所述数据库头节点维持指示包括所述用户事务的多个未完成用户事务的事务表,其中所述方法还包括:
[0179] 至少部分地基于所述事务表,确定受所述多个未完成用户交易中的至少一个影响的一个或多个另外数据页面;
[0180] 从所述一个或多个存储节点请求一个或多个另外数据页面的当前状态;
[0181] 响应于接收所述一个或多个另外数据页面,将另外一个或多个撤销日志记录应用至所述一个或多个另外数据页面,以撤销由所述至少一个未完成用户事务指向所述一个或多个另外数据页面的改变。
[0182] 12.如条款11所述的方法,其中所述确定所述一个或多个另外数据页面、所述请求所述一个或多个另外数据页面以及所述将所述另外一个或多个撤销日志记录应用至所述一个或多个另外数据页面作为后台进程的一部分在所述数据库头节点处执行,并且其中所述接收所述访问请求、所述请求所述一个或多个数据页面的所述当前状态以及所述接收所述一个或多个数据页面的当前状态作为前台进程的一部分执行。
[0183] 13.如条款6所述的方法,其还包括:
[0184] 在从所述数据库头节点故障恢复之后:
[0185] 在使得所述数据库可供用于访问之前,向所述多个存储节点发送对将存储在所述多个存储节点处的用于所述数据库的所述数据复原至对应于先前记录的快照的状态,其中所述复原包括将所述多个重做日志记录中的一个或多个应用至先前版本的所述数据。
[0186] 14.如条款6所述的方法,其中使得所述数据库可供用于访问,而无需重播所述多个重做日志记录。
[0187] 15.一种存储程序指令的非暂时性计算机可读存储介质,所述存储程序当由一个或多个计算装置执行时实施数据库系统的数据库头节点,所述数据库头节点实施以下各项:
[0188] 在从数据库头节点故障恢复之后:
[0189] 与实施存储用于数据库的数据的分布式存储系统的多个存储节点中的一个或多个存储节点建立连接,其中所述分布式存储系统被配置来实施用于所述数据库的日志结构化数据存储,其中先前已经在所述多个存储节点处接收多个重做日志记录,其中所述重做日志记录中的每一个描述对存储在其被接收处的相应存储节点处的用于所述数据库的数据的改变;以及
[0190] 在与所述多个存储节点中的所述一个或多个存储节点建立所述连接之后,针对一个或多个访问请求对所述数据库提供访问。
[0191] 16.如条款15所述的非暂时性计算机可读存储介质,其中从与所述数据库头节点不同的数据库头结点接收先前在所述多个存储节点处接收的所述多个重做日志记录。
[0192] 17.如条款15所述的非暂时性计算机可读存储介质,其中对所述数据库提供访问,而无需重播所述多个重做日志记录。
[0193] 18.如条款15所述的非暂时性计算机可读存储介质,其中所述数据库系统头节点进一步实施以下各项:
[0194] 接收对所述数据库的访问请求;
[0195] 响应于接收所述访问请求,从所述一个或多个存储节点请求存储用于所述数据库的所述数据的一部分的一个或多个数据页面的当前状态;以及
[0196] 接收存储用于所述数据库的所述数据的所述部分的所述一个或多个数据页面的当前状态以用于服务所述访问请求,其中由所述一个或多个存储节点中的一个产生所述一个或多个所接收的数据页面中的所述至少一个的所述当前状态,所述一个存储节点将所述多个重做日志记录中的一个或多个重播至先前存储版本的所述至少一个数据页面。
[0197] 19.如条款18所述的非暂时性计算机可读存储介质,其中所接收的访问请求是读取请求或写入请求。
[0198] 20.如条款18所述的非暂时性计算机可读存储介质,其中所述数据库头节点维持多个撤销日志记录,用于撤销作为重做日志记录发送至所述多个存储节点的改变,并且其中所述数据库头节点进一步实施以下各项:
[0199] 确定从所述一个或多个存储节点接收的所述一个或多个数据页面中的一个受未完成用户事务影响,其中所述用户事务将改变指向存储在所述一个或多个存储节点处的所述数据、包括所述一个数据页面;以及
[0200] 将一个或多个撤销日志记录应用至所述数据页面,以撤销由所述用户事务指向所述数据页面的改变。
[0201] 21.如条款20所述的非暂时性计算机可读存储介质,其中所述数据库头节点维持指示包括所述用户事务的多个未完成用户事务的事务表,并且其中所述数据库系统头节点进一步实施以下各项:
[0202] 作为后台进程执行以下各项:
[0203] 至少部分地基于所述事务表,确定受所述多个未完成用户交易中的至少一个影响的一个或多个另外数据页面;
[0204] 从所述一个或多个存储节点请求一个或多个另外数据页面的当前状态;
[0205] 响应于接收所述一个或多个另外数据页面,将另外一个或多个撤销日志记录应用至所述一个或多个另外数据页面,以撤销由所述至少一个未完成用户事务指向所述一个或多个另外数据页面的改变。
[0206] 如在图中所示和本文所描述的各种方法表示方法的示例性实施方案。所述方法可在软件中、在硬件中、或在其组合中手动实施。任何方法的顺序可以改变,并且各个元素可以被添加、重新排序、组合、省略、修改等。
[0207] 尽管已相当详细地描述了以上实施方案,但一旦完全了解以上公开内容,各种变化和修改对所属领域的技术人员将变为显而易见。旨在以下权利要求被解释成包含所有这些修改和变化,并且相应地,以上描述应视为具有说明性而非限制性意义。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈