使用一致的数据库快照在分布式数据库中进行备份和还原的制作方法

文档序号:13986925阅读:288来源:国知局

相关申请案的交叉引用

本申请要求于2015年4月16日提交的美国申请号14/688,396的优先权,并且该美国申请的全部内容以引用的方式并入本文。

发明领域

本公开一般来说涉及数据库系统,并且更特定来说涉及数据库系统中的备份和还原操作。

背景

数据库管理员采用最佳做法定期备份数据库,以实现合规性、数据安全性、数据重建和分析目的。数据库管理员通常基于备份过程的频率、磁盘空间和服务器工作负载来确定要使用哪些备份方案。例如,所谓的“完全备份”是数据库的完整映像,这可能需要大量的磁盘空间,并且也可能花费很长时间来完成。由于完全备份具有这些缺点,因此数据库管理员通常选择按照调度执行这种类型的备份过程,以使每个过程交错或以其它方式将每个过程分开一些可观的时间量,通常以天或周计量。在实践中,完全备份过程之间的时间段可以包括按照常规调度执行多个增量备份或差异备份,以确保备份和还原数据完整性的目的。在任何这种情况下,在将数据复制到备份位置之前,可以选择、提取和操纵该数据以优化备份过程。一些这样的优化包括用于处理打开文件和实况数据源的参数以及数据压缩、加密和消重的参数。

附图简述

图1描绘了根据本公开的实施方案的包括被配置为捕获并保持一致的数据库快照于耐久存储中的互连节点的示例性分布式数据库系统。

图2a描绘了根据本公开的实施方案的图1的分布式数据库系统内的示例性事务引擎(te)的架构。

图2b描绘了根据本公开的实施方案的图1的分布式数据库系统内的示例性存储管理器(sm)的架构。

图2c示出了根据本公开的实施方案的图1的分布式数据库系统内的示例性快照存储管理器(ssm)的架构。

图3a描绘了根据本公开的实施方案的示出在由给定te节点提交每个事务之后由ssm接收和布置为全序的多个事务的框图。

图3b示出了根据本公开的实施方案的由给定te提交的一个示例性事务。

图4描绘了根据本公开的实施方案的示出原子的无覆写结构的框图。

图5描绘了根据本公开的实施方案的表示图1的分布式数据库系统的另一示例性实施方案的框图,所述分布式数据库系统被配置为透明地提供对当前和过去的数据库状态的客户端级访问。

图6描绘了根据本公开的实施方案的示出了原子类型的框图,所述原子类型可以被冻结并存储在ssm的耐久存储内,以使得能够进行过去数据库状态的时间点查询。

图7a示出了根据本公开的实施方案的用于实现跨越图1的分布式数据库系统的持久层内的多个数据库节点进行对称原子更新的一个示例性方法。

图7b示出了根据本公开的实施方案的图7a的对称原子更新方法的一个示例性数据流。

图7c示出了根据本公开的实施方案的在破坏性复制过程期间图7a的对称原子更新方法的一个示例性数据流。

图8a示出了根据本公开的实施方案的用于在图1的分布式数据库系统内由te执行时间点查询的一个示例性方法。

图8b示出了根据本公开的实施方案的可以由图1的分布式数据库系统服务的一个示例性时间点查询。

图8c示出了根据本公开的实施方案的可以由te执行以确定在时间点查询中识别的快照在分布式数据库系统内是否可用的一个示例性查询。

图8d示出了根据本公开的实施方案的示出了实施图8a的示例性时间点方法的多个te的示例性数据流。

图9示出了根据本公开的实施方案配置的计算系统。

通过阅读以下结合本文所描述的附图的详细描述,将更好地理解本实施方案的这些和其它特征。附图并不是按比例绘制的。在附图中,各图中所示出的每个相同或几乎相同的部件由相同的数字表示。为了清楚起见,并未在每个附图中标注了每个部件。

详述

公开了利用一致的数据库快照在分布式数据库系统中进行备份和还原的技术。根据示例性实施方案配置的分布式数据库系统包括多个互连的数据库节点(也称为节点),所述节点共同地形成不具有单点故障并且可以作为单个逻辑数据库使用结构化查询语言(sql)查询来访问的数据库。这样的分布式数据库系统是符合acid的,因为它表现了原子性、一致性、隔离性和耐久性(acid)的理想属性,并且因此使得客户端能够以一致的方式对数据库执行并发更新事务。这种事务的示例包括例如写入、插入和删除操作。在执行这种事务的过程中,如根据本公开配置的分布式数据库系统使得客户端能够声明致使分布式数据库系统在事务完成时逻辑地冻结数据库状态的一致和完整副本的“快照”。这样的快照使得客户端能够稍后对那些过去的状态执行“时间点”查询,以返回一个可以被理解为“截至”特定时间点的数据库重建版本的结果集。因此,本文中公开的某些实施方案提供了高分辨率归档和还原功能,其允许快照完全捕获并记录分布式数据库随时间进行的改变,而不会显著影响正在进行的数据库操作(例如插入、读取和更新操作)的性能。

许多优点与所公开的实施方案的某些方面相关联。例如,本文公开的用于声明快照的技术使得能够按照常规或自动调度执行备份,而不会不利地影响正在进行的数据库操作。这种功能还使数据库管理员能够解决最近过去的问题,包括“手指摸索(fumble-finger)”错误和其它数据库破坏事件,这往往可能很难或否则不可能仅使用sql查询来反转。此外,在不使用本文公开的快照和时间点查询的情况下,从误删表格重建数据可能是困难和繁琐的。

在一些实施方案中,分布式数据库系统被配置为提供对快照的客户端级访问,由此使得客户端能够复原丢失的数据或以其它方式撤销错误的数据库操作。在这样的实施方案中,客户端可以执行从特定时间点返回重建结果集的查询,并且使用该重建数据将数据库还原或以其它方式“回滚”到前一状态。可以对并发执行正常写入和读取操作的数据库执行这样的查询。此外,在一些实施方案中,数据库管理员可以选择特定快照并执行备份例程,所述备份例程基于选定的快照将数据库的一致副本保存到耐久存储。因此,在发生灾难性故障的情况下,分布式数据库系统可以从这种脱机备份还原并被带回到正常操作。

架构与操作

图1示出了根据本公开的实施方案的示例性分布式数据库系统100,所述分布式数据库系统包括被配置为捕获和保持一致数据库快照于耐久存储中的互连节点。如示例性实施方案中所示,分布式数据库系统100的架构包括指派到三个逻辑层的多个数据库节点:管理层105、事务层107和持久层109。包括分布式数据库系统100的节点是能够彼此直接和安全地通信以协调正在进行的数据库操作的同级节点。因此,只要至少一个数据库节点在事务层107和持久层109中的每一者内操作,则sql客户端102可以连接分布式数据库系统100并对分布式数据库系统100内托管的数据库执行事务。

更详细地,分布式数据库系统100是弹性可缩放数据库系统,其包括在任意数量的主机计算机(未示出)上执行的任意数量的数据库节点(例如,节点106a-106c、108和110)。例如,数据库节点可以随时随地添加和移除,其中分布式数据库系统100使用新添加的节点来“扩展”或以其它方式增加数据库性能和事务吞吐量。如依据本公开将理解,分布式数据库系统100脱离了将数据的盘上表示(例如,页)与存储器内结构紧密耦合的常规数据库方法。相反,本文公开的某些实施方案有利地提供以存储器为中心的数据库,其中每个同级节点均在易失性存储器(例如,随机存取存储器)中实施存储器高速缓存,其可以用于保持数据库的活动部分被高速缓存以供在正进行的事务期间进行有效更新。此外,持久层109的数据库节点可以实施可以将这些存储器中更新提交给物理存储设备的存储接口,以使这些更改耐久(例如,使得它们能够在重新启动、电力丢失、应用崩溃时保存下来)。分布式存储器高速缓存和耐久存储接口的这种组合在本文中通常称为耐久分布式高速缓存(ddc)。

在实施方案中,数据库节点可以请求驻留在同级节点的高速缓存存储器中的数据库的部分(如果可用),以避免进行磁盘读取以从耐久存储检索数据库的部分的费用。在这方面可使用的耐久存储的示例包括硬盘驱动器、网络附接存储设备(nas)、独立磁盘冗余阵列(raid)以及任何其它合适的存储设备。如依据本公开将理解,分布式数据库系统100使得sql客户端102能够查看什么似乎是没有单点故障的单个逻辑数据库,并且执行有利地保持处于高速缓存存储器(例如,易失性ram)中同时提供acid属性的数据库的使用中部分的事务。

sql客户端102可以被实施为例如被配置为建构和执行sql查询的任何应用或进程。例如,sql客户端102可以是实施各种数据库驱动器和/或适配器的用户应用,包括例如java数据库连接(jdbc)、开源数据库连接(odbc)、php数据对象(pdo)或被配置为传递和利用来自关系数据库中的数据的任何其它数据库驱动器。如上所述,sql客户端102可以将分布式数据库系统100视为单个逻辑数据库。为此,sql客户端102提及什么似乎是单个数据库主机(例如,利用单个主机名或互联网协议(ip)地址)),而不考虑多少个数据库节点构成分布式数据库系统100。

在事务层107内,示出了多个te节点106a-106c。事务层107可以依据应用而包括更多或更少的te,并且所示的数量不应被视为限制本公开。如下面进一步讨论的,每个te均可以接受来自sql客户端102的sql客户端连接,并且并发对分布式数据库系统100内的数据库执行事务。原则上,sql客户端102可以访问任何te以执行数据库查询和事务。然而,并且如下所述,sql客户端102可以有利地选择通过作为“连接代理商”运行的代理节点提供低延时连接的那些te,如在后面将要描述的。

在持久层109内,示出了sm108和ssm110。在实施方案中,sm108和ssm110中的每一个分别包括在耐久存储位置112和114内的数据库的完整归档。在实施方案中,耐久存储位置112和114可以在sm108和ssm110的本地(例如,在同一主机计算机内)。例如,耐久存储位置112和114可以被实施为物理存储设备,诸如旋转硬盘驱动器、固态硬盘驱动器或包括多个物理存储设备的raid阵列。在其它情况下,耐久存储位置112和114可以被实施为例如网络位置(例如,nas)或其它合适的远程存储设备和/或器具,如依据本公开将明了。

在实施方案中,分布式数据库系统100的每个数据库节点(te106a-106c、sm108和ssm110)均可以包括计算机程序产品,包括从c、c++、java、python或其它合适的编程语言编译的机器可读指令。这些指令可以存储在非暂时性计算机可读介质上,诸如存储在给定主机计算机的存储器中,并且当被执行时,使给定数据库节点实例被实例化和执行。如下所述,代理节点可以通过使处理器执行对应于给定数据库节点的指令来引起数据库节点的这种实例化和执行。下文关于图9讨论能够实例化和执行分布式数据库系统100的数据库节点的一个这样的计算系统1100。

在实施方案中,管理层105、事务层107和持久层109中的每一个的数据库节点通过一个或多个通信网络101通信地耦合。在实施方案中,这样的通信网络101可以被实施为例如物理或无线通信网络,其使得能够利用一个或多个数据传输协议在两点(例如,在主机计算机上运行的节点)之间进行数据交换(例如,数据包)。一些这样的示例协议包括传输控制协议(tcp)、用户数据报协议(udp)、共享存储器、管道或依据本公开将明了的任何其它合适的通信手段。在一些情况下,sql客户端102通过面向ip地址的广域网(wan)访问分布式数据库系统100的各种数据库节点。另外,由于分布式数据库系统100内的每个数据库节点都可以位于存在网络连接的几乎任何地方,因此可以在数据库节点之间建立加密的点对点连接(例如,虚拟专用网络(vpn))或其它合适的安全连接类型。

管理域

如所示,管理层105包括代理节点104,所述代理节点被配置为管理数据库配置并且在将托管数据库资源的计算机系统上执行。因此,并且根据实施方案,代理节点的执行是供应步骤,该步骤既使主机计算机可用于运行数据库节点,又使主机计算机对分布式数据库系统100可见。这些供应的主机计算机的集合在本文通常被称为管理域。每个管理域是一个逻辑边界,其定义可用于运行数据库的资源池,并含有用户管理或以其它方式访问那些数据库资源的许可。例如,并且如图1中所示,分布式数据库系统100包括一个这样的管理域111,其囊括分布式数据库系统100的数据库节点以及执行那些数据库节点的一个或多个相应的主机计算机(未示出)。

对于给定的管理域,主机计算机中的每一个上运行的代理节点负责启动和停止数据库,监控那些节点和主机计算机的资源,以及执行其它主机-本地任务。此外,每个代理节点使得新的数据库节点能够被执行以例如增加事务吞吐量和/或增加在分布式数据库系统100内可用的存储位置的数量。这使得分布式数据库系统100能够具有弹性,因为可以按需的方式添加新的主机计算机和/或数据库节点以满足不断变化的数据库需求。例如,可以在数据库正运行时(例如,在正进行的数据库操作期间)在运行过程中添加数据库节点,并且那些数据库节点可以与其同级节点一起自动认证,以便在管理域111内执行安全的点对点通信。

在实施方案中,代理104中的一个或多个可以被进一步配置成作为连接代理商进行操作。连接代理商角色可以对管理域中的所有代理以及因此其中所有节点、数据库和事件(例如,诊断、错误相关、信息)进行全局考虑。另外,连接代理商角色实现sql客户端102与te106a-106c之间的负载均衡。例如,sql客户端102可以连接到配置为连接代理商的特定代理节点,以便接收te的识别符(例如,ip地址、主机名、别名或逻辑识别符),所述te可以服务于连接并以与其它te相比相对低的延时执行事务。在实施方案中,负载均衡策略是可配置的,并且可以用于基于诸如资源利用率和/或位置(例如,偏好在地理上最接近于sql客户端的那些te或那些具有最快响应时间的te)等因数来优化连接性。

事务引擎架构

图2a描绘了根据本公开的实施方案的分布式数据库系统100内的te(例如,te106a-106c)的架构200的一个示例。如上所述,te是面向客户端的数据库节点,其接受来自sql客户端102的连接,并且实现跨管理域111内的多个数据库节点的数据库的单个逻辑视图。因此,并且如所示,te架构200包括sql客户端协议模块202。在实施方案中,sql客户端协议模块202可以被配置为托管远程连接(例如,通过udp/tcp)并且从sql客户端102接收数据包(或通过共享存储器/管道的数据结构)以执行sql事务。sql解析器模块204被配置为从远程连接接收sql事务,并解析那些查询以执行各种功能,包括例如验证语法和语义验证,确定是否存在适当许可来执行语句,以及分配存储器和专用于查询的其它资源。在一些情况下,事务可以包括单个操作,例如“select”、“update”、“insert”和“delete”,仅举几例。在其它情况下,每个事务可以包括影响数据库内的多个对象的多个这样的操作。在这些情况下,并且如下面将进一步讨论,分布式数据库系统100实现了协调的方法,其确保这些事务是一致的并且不会导致错误或其它损坏,否则该等错误或其它损坏可能由更新数据库的相同部分的并发事务引起(例如,在同一记录或其它数据库对象上同时执行写入)。

在实施方案中,优化器206可被配置为确定执行给定查询的优选方式。为此,优化器206可以利用索引、集群和表格关系来避免昂贵的全表格扫描,并且在可能时利用高速缓存存储器内的数据库的部分。

如所示,示例性te架构200包括原子到sql映射模块208。原子到sql映射模块208可以用于定位对应于数据库的与正执行的特定事务相关或以其它方式受特定事务影响的部分的原子。如本文中通常所指的,术语“原子”是指灵活的数据对象或结构,其含有特定类型的数据库对象(例如,方案、表格、行、数据、blob和索引)的当前版本和多个历史版本。在te节点内,原子通常存在于非持久存储器中,例如在原子高速缓存模块中,并且可以被适当地串行化和解串行化,以促进数据库节点之间的通信。如下文将关于图2b进一步讨论,可以由sm和ssm将原子更新提交给耐久存储。因此,sm和ssm可以利用耐久存储来对原子进行编组或解封装,以服务于te对那些原子的请求。

在实施方案中,每个te负责将sql内容映射到对应的原子。如本文中通常所指,sql内容包括数据库对象,例如可以在原子内表示的表格、索引和记录。在该实施方案中,可以使用目录来定位在分布式数据库系统100内执行给定事务所需的原子。同样地,优化器206还可以利用这种映射来确定原子高速缓存210中可能立即可用的原子。

虽然te在本文被描述为包括sql特定模块202-208,但是这样的模块本质上是可以用具有不同方言或编程语言的其它非sql模块替代的即插即用转换层。如依据本公开将理解,acid属性在原子级实施,这使得分布式数据库系统能够在仍然提供acid属性的同时执行其它非sql类型的并发数据操纵。

继续图2a,te架构200包括原子高速缓存210。如上面关于图1所讨论的,原子高速缓存210是在分布式数据库系统100内实施的ddc的一部分。为此,并且根据本公开的实施方案,原子高速缓存210托管可由给定te访问的ram中的专用存储器空间。原子高速缓存的大小可以是用户可配置的,或者根据所需的配置来调整大小以利用主机计算机上的所有可用存储器空间。当te首次执行时,原子高速缓存210被填充一个或多个表示主目录的原子。在实施方案中,te利用该主目录来满足执行的事务,并且特别来说识别和请求其它同级节点(包括同级te、sm和ssm)的原子高速缓存210内的原子。如果原子在任何原子高速缓存中不可用,则可以向分布数据库系统100内的sm或ssm发送请求以从耐久存储中检索原子,并且因此使请求的原子在sm或ssm的原子高速缓存内可用。因此,根据本公开应当理解,原子高速缓存210是按需高速缓存,其中可以根据需要将原子从一个原子高速缓存复制到另一原子高速缓存。还应当理解,原子高速缓存210的按需性质能够实现各种性能增强,因为给定的te可以快速且有效地在线进行,而不需要检索大量的原子。此外,给定的te可以根据需要从原子高速缓存210中移除原子,并因此减少下面关于图7a-7c所述的复制过程的参与。

仍然继续图2a,te架构200包括操作执行模块212。操作执行模块212可以用于基于给定的事务对原子高速缓存210内的原子执行存储器中的更新(例如,数据操纵)。一旦操作执行模块212已经对原子执行了各种存储器中的更新,则事务执行模块214确保以提供acid属性的方式执行在给定事务的背景内发生的改变。如上所述,并发执行的事务可能在执行期间潜在地改变数据库的相同部分。通过说明的方式,考虑在数据库中由表格和数据表示的银行帐户之间移动货币时发生的事件顺序。在一个这样的示例性事务期间,减法操作从数据库中的一个记录中减去货币,并且然后将减去的量添加到另一个记录。此示例性事务然后由提交操作完成,这使得那些记录变化为“耐久的”或否则永久存在(例如,在硬盘驱动器或其它非易失性存储区域中)。现在考虑是否并发执行两个这样的事务,所述事务在数据库的相同部分中操纵数据。在没有仔细考虑这种情形的情况下,每个事务在完全完成之前可能会失败,或否则会导致数据库中的不一致(例如,货币从一个帐户中减去但不记入另一个帐户,借记或添加到帐户的量错误以及其它意外和不期望的结果)。这是因为一个事务可以改变或以其它方式操纵数据,从而导致另一事务“看到”该数据的无效或中间状态。为了避免面对并发事务的这种隔离和一致性违反,并且根据本公开的实施方案,分布式数据库系统100应用acid属性。这些属性可以不应用于表格或行级,而应用于原子级。为此,在分布式数据库系统100不具有原子含有sql结构的特定知识的情况下,以通用方式解决并发性。现在将依次讨论acid属性在分布式数据库系统100的背景中的应用。

原子性是指事务以所谓的“全或无”方式完成,使得如果事务失败,则数据库状态保持不变。因此,事务是不可分割的(“原子的”)并且完全完成,或完全失败,但不能部分执行。这在分布式数据库100的背景中是重要的,其中事务不仅影响处理事务的给定te的原子高速缓存内的原子,而且所有数据库节点也具有那些原子的副本。如下面将要讨论,原子的改变可以异步方式传达到每个数据库进程,其中只有在te的事务执行模块214处理事务之后,那些对其相应原子副本完成更新的节点才能向所有的感兴趣的数据库节点广播提交消息。这也提供了一致性,因为在最后提交原子更新时,只有有效的数据被提交给数据库。此外,由于并发执行的事务不会“看到”不完整的或处于中间变化状态的数据版本,因此实现隔离。如下面进一步讨论的,sm和ssm数据库节点提供耐久性,sm和ssm数据库节点也在由te进行事务处理期间接收原子更新,并在确认提交之前完成那些耐久存储的更新(例如通过将原子串行化到物理存储位置)。根据实施方案,sm或ssm可以在确认提交之前有效地进行日志改变,并且然后周期性地分批将原子串行化到耐久存储(例如,利用缓写)。

为了遵守acid属性,并且为了减轻由于在写入操作期间的锁定而导致的不希望的延迟,事务执行模块214可被配置为利用多版本并发控制(mvcc)。在实施方案中,事务执行模块214通过允许多个数据版本同时存在于给定的数据库中来实施mvcc。因此,原子高速缓存(和耐久存储)可以容纳数据库数据和元数据的多个版本,以用于为不同数据版本同时可见的进行中查询提供服务。特别地,并且参考图4所示的示例性原子结构,原子是可以包含规范(当前)版本以及可以由当前事务使用的预定义数量的搁置中的或其它历史版本的对象。为此,原子版本化是针对原子内的数据版本而不是原子本身实现的。请注意,在对应的事务成功提交之前,一个版本被视为搁置中的。因此,原子的结构和功能使得能够将单独的版本保持在高速缓存中,使得不会在现场发生更改(例如,在耐久存储中);相反,可以所谓的“乐观”方式来传达更新,因为可以通过从原子高速缓存中删掉搁置中的更新来执行回滚。在实施方案中,可以异步(例如,经由通信网络)传达在其相应原子高速缓存(或耐久存储)中具有相同原子的副本的所有感兴趣的数据库节点的更新,并且因此允许在假设事务将成功提交的情况下进行事务。

继续图2a,示例性te架构200包括语言中立同级通信模块216。在实施方案中,语言中立同级通信模块216被配置为在分布式数据库系统100内的同级节点之间发送和接收低级消息。这些消息除其它外,负责请求原子、广播复制消息、提交事务和其它与数据库相关的消息。如本文中通常所指,语言中立表示可以在不一定是sql的数据库节点之间使用的通用文本或基于二进制的协议。为此,当sql客户端协议模块202被配置为经由通信网络101接收基于sql的消息时,使用通信网络101在代理、te、sm和ssm之间使用的协议可以是不同的协议和格式,如依据本公开将明了。

存储管理器架构

图2b描绘了根据本公开的实施方案的分布式数据库系统100内的sm(例如,sm108)的架构201的一个示例。每个sm被配置为在分布式数据库系统100内寻址其自己的完整数据库归档。如上所述,分布式数据库系统100内的每个数据库基本上作为多个原子对象(例如,与页或其它存储器对准结构)持久保存。因此,为遵守acid属性,一旦事务提交,sm可以将原子更新存储到物理存储。acid要求数据的耐久性,使得一旦事务已经被提交,则该数据将永久保存在存储中,直到以其它方式被肯定地移除。为此,sm接收来自执行事务的te节点(例如,te106a-106c)的原子更新,并以利用例如上述关于图2a所讨论的mvcc的方式提交那些事务。因此,根据本公开将明了,sm与te类似地起作用,因为它们可以执行其各自的本地原子高速缓存内的原子的存储器中更新;然而,sm最终将这样的经修改的原子写入到耐久存储。此外,每个sm可以被配置为从分布式数据库系统100内的同级数据库节点接收和服务于原子请求消息。

在一些情况下,可以通过从sm的原子高速缓存返回所请求的原子来服务于原子请求。然而,并且根据实施方案,所请求的原子在给定的sm的原子高速缓存中可能不可用。这种情况由于存在轻微的性能损失而在本文中通常被称为“漏掉(miss)”,因为sm必须访问耐久存储以检索那些原子,将它们加载到本地原子高速缓存中,并将那些原子提供给请求那些原子的数据库节点。例如,当te、sm或ssm尝试访问其相应的高速缓存中的原子并且该原子不存在时,te、sm或ssm可能会经历漏掉。在该示例中,te通过从另一个同级节点(例如,te、sm或ssm)请求漏掉的原子来响应于漏掉。相比之下,sm通过从另一个同级节点(例如,te、sm或ssm)请求该漏掉的原子,或者如果没有同级节点使原子高速缓存在其相应的原子高速缓存中,则通过从耐久存储加载该漏掉的原子,来响应于漏掉。为此,一个节点针对一个漏掉造成一些性能损失。请注意,在一些情况下可能会有两个漏掉。例如,te可能会漏掉并从sm请求原子,并且反过来,sm可能会漏掉(例如,请求的原子不在sm的原子高速缓存中)并从磁盘加载所请求的原子。

如所示,示例性sm架构201包括与上述关于图2a的示例性te架构200所描述的模块(例如,语言中立同级通信模块216和原子高速缓存210)类似的模块。应当理解,这些共享模块可适应于节点所属的特定逻辑层的需要和要求,并且因此可以由事务(例如,te)和持久性相关的数据库节点(例如,sm和ssm)以通用或所谓的“即插即用”的方式来使用。然而,并且根据所示实施方案,示例性sm架构还包括附加的以持久性为中心的模块,包括事务管理器模块220、日志模块222和存储装置接口224。现在将依次讨论这些以持久性为中心的模块中的每一者。

如上所述,sm节点负责解决分布式数据库系统100内的一个或多个数据库的完整归档。为此,sm在发生于一个或多个te(例如,te106a-106c)上的事务期间接收原子更新,并且任务是,假设事务成功完成,则在确认提交到te之前确保提交中的更新是耐久的。在示例性sm架构201的背景中,这通过事务管理器模块220在提交的事务上执行偏序来实现,其中它们是按照它们在每个te节点处提交的次序被耐久化。由于所有数据库相关数据都由原子表示,所以根据实施方案,分布式数据库系统100内的事务也是如此。为此,事务管理器模块220可以将事务原子存储在耐久存储内。如将理解的,这使得sm能够逻辑地存储数据相关原子(例如,记录原子、数据原子、blob原子)的多个版本,并且执行所谓的“可见性”例程以确定特定原子内可见的当前数据版本,以及因此对te执行的事务可见的总体当前数据库状态。此外,并且根据实施方案,日志模块222使得能够以日志方式记录原子更新以执行sm的耐久性。日志模块222可以被实施为只追加(append-only)的一组差异,其使得能够有效地将改变写入到日志。

如所示,示例性sm架构201还包括存储接口模块224。存储接口模块224使得sm能够从本地或远程于sm的物理(耐久)存储写入和读取。虽然存储的确切类型(例如本地硬盘驱动器、raid、nas存储、云存储)与本公开不是特别相关,但是应当理解,分布式数据库系统100内的每个sm可以利用不同的存储服务。例如,第一sm可以利用例如远程亚马逊弹性块(ebs)卷,而第二sm可以利用例如亚马逊s3服务。因此,这种混合模式存储可以提供两个或更多个具有一个优于耐久性的有利性能的存储位置,且反之亦然。为此,并且根据实施方案,te、sm和ssm可以运行成本函数来跟踪其同级节点的响应性。在该实施方案中,当节点需要来自耐久存储的原子(例如,由于“漏掉”)时,与耐久存储访问相关的延时可以是确定哪个sm要用于服务请求时的因素之一。

快照存储管理器架构

图2c描绘了根据本公开的实施方案的分布式数据库系统100内的ssm(例如,ssm110)的架构203的一个示例。如依据本公开将会理解,示例性ssm架构203类似于示例性sm架构201的示例,因为每个节点都参与同级间通信(例如,利用语言中立同级通信),并且接收来自te的事务相关消息。例如,且如所示,ssm可以包括语言中立同级通信模块216、事务模块220、原子高速缓存210、日志模块222和存储接口模块224,其使得每个ssm能够接收事务、更新原子并且将更新提交给与sm的耐久存储类似的耐久存储(例如,以实施acid属性和mvcc功能),如上所述。然而,如依据本公开将会理解,除了当前数据库状态之外,ssm在持久层109中的作用包括保存和寻址过去的数据库状态,而并非如sm那样仅仅包括当前数据库状态。当分布式数据库系统100可以遵守acid属性时,这些过去的状态是在事务提交的特定时间点的数据库的一致的时间点快照或“视图”。请注意,快照不一定在事务完成的绝对时间点创建;相反,“时间点”通常是指相对于随后提交和操纵数据库数据的其它事务,由快照表示的数据库的状态。为此,在快照被声明或以其它方式创建的时间点不需要例如在目标事务完成的精确时刻。在一些实施方案中,例如,创建快照的时间点可以是在完成目标事务之后并且在任何其它后续事务进一步改变该快照的数据之前的任何时间。如下面关于图8b所讨论的,这些过去的数据库状态可以只读方式由例如执行具有很大程度上符合标准sql语法的语法但是具有识别执行查询针对的快照的附加关键字的sql语句的te来查询。

可以通过说明的方式更好地理解快照的一些方面。现在参考图3a,框图示出了根据本公开的实施方案,在由给定te过程提交每个事务之后,由ssm接收并布置为全序300的多个事务(t1-t24)。如下面关于图2c所进一步讨论的,可以将事务组织成专辑以启用簿记任务。注意,如果分布式数据库系统100包括两个或更多个ssm,则ssm可以协调以确保事务在所有ssm上相同地排序,本文中通常被称为ssm商定的全序。另外请注意,所示出的全序与由te提交事务的顺序一致,但它可能不一定与其相应的顺序指派的事务识别符(t1-t24)相匹配。这是因为事务可以跨越多个te并发发生。为了使每个ssm的提交次序与每个te一致,由te按某一次序提交的事务序列应在每个ssm处以该相同次序显示。为了使提交次序与记录版本可见性一致,由于每个事务都有自己一致的数据库视图,所以每个ssm上的事务的全序也与应用于原子的记录版本更新一致。为此,每个ssm就满足这些排序限制的次序达成一致,从而产生ssm商定的全序。

在实施方案中,快照管理器模块226可以被配置为在每个事务提交之后自动声明快照。快照存储管理器还被任选地配置为在事务本身中明确地做出这样的声明的情况下声明快照。例如,由于快照是事务实体,因此可以将快照与其它数据操纵语言(dml)一起作为事务的一部分被声明和提交,例如插入、删除和更新。通常,只有一个快照被声明为事务的一部分,因为快照在事务上是一致的,并且不会暴露作为部分应用的事务效应或更新的结果的不一致的状态。如果在事务期间声明快照,则快照将作为事务的一部分在逻辑上以原子方式应用,并包括事务的影响(例如,插入、更新、删除等)。事务的dml任选地被结构化,使得快照被声明为提交语句本身的一部分。由于快照是事务状态的一部分,因此它们是耐久的。在一些情况下,快照将作为条目存储在写入头日志文件中,或将快照与相应的事务相关联的其它位置中。图3b中描绘了一个这样的示例性事务301的语法。如所示,dml304在被提交时以版本更新的形式更新多个数据原子。例如,表格“簿记”与一个或多个表格原子和索引原子相关联,仅举几个示例。为此,在簿记表格中对记录(具有列“房间”等于“237”且字段“fname”等于“杰克(jack)”的行)的更新导致更新那些相关原子中的每一个。因此,这些原子级更新导致上述这些原子类型中的每一者被修改为包括新版本,而不覆写以前的版本。这确保共同发生的其它事务不会查看原子内的中间或其它不完整的数据状态(例如,符合acid属性和mvcc功能);相反,他们看到基于其中维护的先前版本状态的原子的一致视图。在图3a的示例性实施方案的背景中,这意味着针对时间点快照302执行的查询仅“看到”由其左侧的事务产生的那些数据库状态。相反,由右侧的事务产生的数据库的那些版本在附加的原子版本中被表现出来,并使其耐久化,但是对于对时间点快照302执行的查询而言是不可见的。因此,在一般意义上,时间点快照是一种查看整个数据库的方式,在它存在于提交特定事务的时间点处时。如依据本公开将会理解,当撤消最近的改变(例如,由于用户错误),执行数据库备份以及用于收集关于数据如何随时间变化的信息以凭经验推断趋势并检测异常时,快照特别有用。

参考一个特定示例,图4描绘了根据实施方案的示出原子的无覆写结构的框图。如根据本公开应明了,在每个原子内保持多个版本。当用户修改数据库数据(例如,插入、更新和删除所有创建的新版本,而不是修改或移除现有版本)时,将创建版本。在实施方案中,这些先前版本被淘汰以确保原子不会无限地生长,并且因此消耗原子高速缓存和耐久存储中的不必要的大量空间。例如,垃圾收集任务可以识别可以安全删除或以其它方式取消分配的旧版本。下面将进一步讨论在ssm背景下的这种空间回收过程。

回到图2c,快照管理器模块226可被配置为将事务关联到被称为专辑的逻辑分组中。专辑可以包括事务的集合,其对应于全序中的事务的逻辑分组,诸如图3a中所示的全序。在某些实施方案中,可以使用专辑来有效地执行与更新事务的有序列表相关的簿记任务(例如,垃圾收集)。在这样的实施方案中,快照优化和老化策略模块228掌控例如专辑在关闭之前保持打开的最大时间量、记录在专辑中的事务或快照的最大数量以及其它与专辑相关的策略参数。当重建数据库状态以满足时间点查询时,也可以使用专辑,如下文关于图8a所述。

为了服务查询而保留多个数据版本的数据库已经含有维护快照所需的一些信息。然而,允许原子大小无限制“增长”可能会对查询性能产生负面影响,导致数据库消耗无限空间量,并且使得难以执行数据保留策略。因此,在一个实施方案中,分布式数据库系统100经由垃圾收集任务周期性地从原子高速缓存中的原子移除数据版本,这发生在不再需要那些版本时。为了确保ssm仍然可以解决快照中的完整数据库状态,即使通过垃圾回收周期性地从原子中移除旧版本,ssm也会“冻结”原子,例如通过在移除不需要的版本之前制作原子版本的不可变副本。这种冻结可以使那些原子副本被唯一地识别,并存储在耐久存储中,以保留含有快照中使用的版本的原子。在没有冻结的情况下,这些版本在从当前数据库状态下的原子中移除后可能无法访问。如下面关于图7a-7c所述,这意味着给定的ssm可以保持每个原子的当前版本(类似于sm),除了延长可见的原子的一个或多个冻结副本或以其它方式可查询的版本之外。因此,可以通过te使用从ssm请求的过去状态原子执行时间点查询,并且那些时间点查询可以“看到”数据库的返回到ssm归档活动在分布式数据库系统100内开始的点,或者在耐久存储限制许可的范围内的完整只读版本。在操作中,这意味着快照将导致比仅保持数据库当前状态消耗更多的存储空间。在实施方案中,高容量物理存储位置可被存储接口模块224利用以补偿所需的额外空间。

现在参考图5,框图表示根据本公开的实施方案的图1的分布式数据库系统100的一个示例性实施方案100',所述分布式数据库系统被配置为透明地提供对当前和过去数据库状态的客户端级访问。应当理解,只是为了清楚和易于描述,图5所示的示例性实施方案100'是分布式数据库系统100的简略视图,并且为此,诸如sql客户端102、管理代理104和te106a-106c等节点已被排除。此外,应当理解,可以部署多个sm和ssm(例如,以扩展给定的数据库系统),并且本公开不限于仅所示的数量。

如所示,ddc502内的多个原子表示数据库的当前状态和过去状态两者。如上面关于图1和图2a-2c所讨论的,每个数据库节点拥有或以其它方式管理作为集合ddc的组成部分的原子高速缓存(在ram中)。上文提到,可以从耐久存储检索原子(例如,由于漏掉),并在执行事务期间在相应的原子高速缓存之间传达所述原子。因此,ddc502是使客户端(例如,sql客户端102)能够“看到”单个逻辑数据库的灵活高速缓存。如图5所示,表示当前状态的那些原子可以在sm节点108的耐久存储位置112内变得耐久。此外,表示当前状态和过去状态的那些原子可以在ssm节点110的耐久存储位置114内变得耐久。如依据本公开将理解,通过维护数据库的当前状态,ssm可以递增地保存数据库发生的变化并且根据需要“冻结”原子以确保过去状态的可用性。

如将在下面进一步讨论的,在分布式数据库系统100内存在至少一个ssm的情况下,客户端可以执行致使与数据库的过去状态相关的那些原子被加载到ddc502中的事务。在分布式数据库系统100的背景中,这意味着te的原子高速缓存可以用与时间点查询相关的那些原子来填充。然而,在一些情况下,这可能导致不期望的性能下降,因为te将执行在当前状态数据上的事务和在先前状态数据上的时间点事务两者。这种混合事务工作负载可能会由于原子高速缓存具有有限数量的可用易失性存储器而导致系统延时。特别地,从高速缓存移除到空闲存储器的原子可能稍后需要从另一个原子高速缓存或从耐久存储中重新获取。这种移除情况是所谓的“高速缓存污染”的结果,并且可能会降低关键事务(例如,那些寻求查询、插入、更新和删除当前状态数据的事务)的性能。根据实施方案,除了任选地提供专用于时间点工作负载的一个或多个te节点之外,还可以通过物理地分离运行sm和ssm节点的节点来消除或以其它方式缓解高速缓存污染。

现在参考图6,框图说明了可以冻结并存储在ssm的耐久存储内以实现过去数据库状态的时间点查询的原子类型。如所示,这包括记录原子602、表格原子603、数据原子604、索引原子606、blob原子608和专辑原子610。在实施方案中,表格原子603可以含有关于诸如其列的名称和类型的表格的元数据;记录原子602和数据原子604可以含有表格行数据和关于表格行可视性的元数据;索引原子606可以含有关于表格索引的元数据和数据;blob原子608可以含有二进制大对象数据并且与类似于记录原子和数据原子的表格原子相关联;以及专辑原子610可以含有关于ssm商定的全序中的事务的逻辑分组的元数据。应当理解,其它与数据库相关的原子可以被冻结,并且上述列表不是穷尽性的或者并非意图限制于本公开。

方法与操作

如上所述,事务层107和持久层109的每个数据库节点都可以包括启用ddc的模块。在实施方案中,此ddc使得原子更新能够在事务提交之前在整个分布式数据库系统100中传播。在操作中,这意味着当执行事务时,每个数据库节点(例如,te106a-106c、sm108和ssm110)都可以从te接收复制消息(例如,利用通信网络101)。在实施方案中,复制消息包括指定数据操纵的dml或其等效物,以及含有要操纵的数据的原子。例如,数据操纵可以是对数据库对象的插入和删除操作。

现在参考图7a,示出了一个示例性方法700,以用于实现跨越持久层109内的多个数据库节点(例如,sm和ssm)的对称原子更新。该方法可以例如由图1的分布式数据库系统100,且更特定地由sm108和ssm110来实施,但是依据本公开将明了许多实施方案。如所示,方法700包括以下动作:接收复制消息;确定受影响的原子是否在原子高速缓存中;如果受影响的原子不在原子高速缓存中,则从耐久存储中检索原子或创建新原子;更新存储器中的原子;以及将那些更新的原子提交到耐久存储。方法700以动作702开始。

在动作704中,给定的sm或ssm通过通信网络从执行事务的te接收复制消息。在实施方案中,指定数据操纵的dml或其等效物可以被转换为由te对原子进行的修改,并且那些修改可以被复制到缓存那些原子的其它te以及使用复制消息的所有sm和ssm。在实施方案中,复制消息识别原子以及要对其执行的至少一个数据操纵。例如,一些这样的数据操纵包括在记录原子中创建新的记录版本。

在动作706中,给定的sm或ssm确定复制消息是否影响当前未加载到原子高速缓存中的任何原子。上文提到,sm和ssm中的每一者都存储数据库的完整副本。最近从耐久存储(例如,耐久存储位置112和114)检索的那些原子可以在相应的原子高速缓存中。如果复制消息仅影响那些存储器中原子,则方法700继续动作710。如果复制消息影响当前未加载到原子高速缓存中的至少一个原子,则该方法继续动作708。

在动作708中,给定的sm或ssm从耐久存储中检索一个或多个原子。或者,或除了从耐久存储中检索一个或多个原子之外,sm或ssm可以创建当在te处执行的事务致使创建新数据数据库对象(例如,新的索引、表格、列、行和blob)时可以使用的新(空的)原子。在任何这种情况下,给定的sm或ssm可以创建和/或检索那些原子并将它们加载到它们相应的原子高速缓存中。

在动作710中,给定的sm或ssm对其中识别的那些原子执行包括在所接收的复制消息内的数据操纵。识别的原子还可以包括当前不存在(例如,基于插入物)但由te创建以满足事务的原子。在执行数据操纵之前,给定的sm或ssm可以从te请求这些新创建的原子。在其它情况下,所识别的原子可以在给定的sm或ssm的原子高速缓存210中,或者在从耐久存储中编组所识别的原子之后为在原子高速缓存210中可用。如上所述,这些数据操纵可以包括dml或其等效物,其致使以改变在那些原子内表示的数据库对象的方式更新原子。如上面关于图4所讨论的,这可以包括对每个受影响的原子追加或以其它方式添加附加的版本状态。在acid属性和mvcc功能的背景中,这使得每个事务能够操纵数据库数据,而不会导致并发事务看到中间数据库状态或其它无效的数据库状态。

在动作711中,给定的sm或ssm在事务已成功完成后从te接收提交消息。在动作712中,给定的sm或ssm将在存储器中更新的那些原子的突变提交到耐久存储。在实施方案中,提交消息可以包括识别事务和提交操作的复制消息或其它合适的消息。响应于提交消息,给定的sm或ssm执行一个或多个命令,使得每个受影响的原子均被保存到耐久存储中,例如耐久存储位置112和114。注意,这些原子突变可以首先被写入到日志(例如,利用日志模块222),其中那些改变被稍后写入到磁盘(例如,利用缓写方法)。方法700在动作714中结束。

现在参考图7b,示出了根据本公开的实施方案的对称原子更新方法700的一个示例性数据流。如所示,事务在te106a处在第一时间点开始。例如,图3b的示例性事务301可以从sql客户端102中的一者发送到te106a,其中使用语言中立同级通信模块216对事务进行解析。在执行给定事务的过程中,te106a可以更新表示要根据给定事务内指定的dml操纵的数据库数据的那些原子。如所示,这包括在易失性存储器中(例如,利用原子高速缓存)te106a执行存储器中更新。此外,并且根据实施方案,te106a可以从实施原子高速缓存模块210的任何其它同级数据库节点(特别是那些具有与te106a的低延时连接的节点)请求原子。

在实施方案中,te106a处的对特定原子的存储器中更新被复制到具有该原子副本的其它数据库节点。例如,并且如所示,复制消息被发送到sm108和ssm110,其识别一个或多个原子和对这些原子的改变。在实施方案中,发送到sm108和ssm110的复制消息可以是相同的或实质上类似的,使得sm108和ssm110两者能够以对称的方式处理相同的复制消息。应当理解,复制消息可以在te106a的操作期间的任何时间(包括并发地)发送,并且不一定按照图7b的示例性实施方案中所示的特定顺序发送。应当理解,并且根据实施方案,这种对称复制过程是特别有利的,因为相同的消息可以广播到分布式数据库系统100内的多个te、sm和ssm。

如上面关于图1所讨论的,为了在并发事务执行期间实现事务一致性,并且减少与锁定相关的延时(例如通过实施mvcc),原子的更新表现为多个原子版本。在图4的示例性实施方案中示出了包括多个版本的一个这样的示例性原子。因此,sm108和ssm110可以各自基于从te106a接收的复制消息,来更新给定原子的其自身的本地副本(例如,在其原子高速缓存内)。在ssm110的背景中,应当理解,复制消息不仅更新原子的当前状态,而且还是与快照相关联的事务的催化剂(如果被声明在事务中或以其它方式启用)。在一个实施中,接收给定复制消息的管理域111内的所有sm节点执行相同的操作,从而跨越分布式数据库系统100同步所有这样的更新。

上文提到,在事务完全提交之前,更新不会被提供给耐久存储。因此,如果事务失败,图7b中所示的这些对原子的存储器中的改变可以有效地“回滚”。在实施方案中,在事务结束时将提交消息发送到sm108和ssm110中的每一个,以完成存储器中的改变并使sm108和ssm110调度(例如,利用日志222)要写入到耐久存储的那些原子改变(例如,利用存储接口模块224)。

现在参考图7c,根据本公开的实施方案,示出了在破坏性复制消息的处理期间图7a的对称原子更新方法700的一个示例性数据流。如所示,在te106a处执行事务(例如,由sql客户端)。在执行事务期间,原子更新发生,并利用如上面关于图7a和图7b所讨论的复制消息在整个分布式数据库系统100中传播。上文提到,原子可以保留多个版本(包括当前版本),但是它们不能无限地增长。周期性地,可通过垃圾收集任务来移除数据版本。执行垃圾收集的节点(例如,te106a-106c)通过发送复制消息将数据版本的移除通知其它节点。由于这些复制消息涉及数据版本的破坏,因此可以将其准确描述为破坏性复制消息。此外,应当注意,在一些情况下,可由于例如表格被删掉、记录被删除、索引被删除以及其它破坏性事件而删除原子。有关这些事件的复制消息也可以被准确地描述为破坏性复制消息。这些破坏性动作可以懒惰方式执行,并且由例如对每个te(例如,te106a-106c)周期性执行的空间回收任务来掌控。

如所示,并且根据实施方案,te106a可以周期性地向sm108和ssm110发送一个或多个破坏性复制消息。应当理解,可以在te106a的操作期间的任何时间(包括在执行事务期间)发送破坏性复制消息。破坏性复制消息不一定按照图7c的示例性实施方案中所示的特定次序发送。在实施方案中,如上所述,破坏性复制消息类似于复制消息的内容,但含有识别要移除的一个或多个原子和/或其中的原子版本的指令。这与非破坏性复制消息形成对比,非破坏性复制消息仅致使创建原子或者将新的原子版本添加到现有原子中。

如所示,响应于sm108接收到破坏性复制消息,sm108移除在破坏性复制消息内识别的原子或其中的原子版本。在实施方案中,sm108然后标记或以其它方式致使发生垃圾收集,以回收由待移除的这些原子或原子部分消耗的空间。在该实施方案中,sm108可以将原子的新版本(例如,减去移除的版本)串行化到耐久存储,或者根据需要将原子从耐久存储中完全移除并更新目录。请注意,与上述复制过程不同,破坏性复制消息在使改变变得耐久之前不需要提交消息。还要注意,冻结原子可能仍然通过记录破坏性复制消息存储在耐久存储中。例如,在崩溃的事件中,可以通过将来自日志的破坏性复制消息应用到对应的当前状态原子来重新创建冻结原子,前提是在该原子的经缓存的当前状态版本之前写入高速缓存中的原子的冻结版本。应当理解,管理域111内的接收给定的破坏性复制消息的所有这样的sm节点都执行相同的操作,从而跨越分布式数据库系统100同步所有这些改变。然而,且特别要注意的是,接收到这种破坏性复制消息的ssm执行使原子或其中的版本被“冻结”并复制到耐久存储中的附加操作。此后,ssm还可以对sm执行类似的操作,使得其当前状态与分布式数据库系统100内的其它sm和ssm的当前状态保持同步。

例如,并且如图7c的特定示例性数据流中所示,由ssm110接收破坏性复制消息。因此,并且根据实施方案,ssm110复制这些原子或其部分(例如,历史版本),并且将这种数据的只读副本保存在一个或多个所谓的“冻结”原子中。冻结原子允许ssm110不仅寻址(例如,使得可查询)数据库的当前版本,而且寻址过去的状态。这些冻结原子可以通过ssm110从耐久存储检索,并以类似于其它非冻结原子的方式加载到原子高速缓存中,并且分布式数据库系统100不进行任何特定的特殊处理(除了遵循只读属性之外)。这使得te能够使用ssm110来执行时间点查询,并且查看每个快照时存在的数据库的一致版本。请注意,除了数据库的先前版本的快照之外,每个ssm还包含数据库的一致的当前版本。为此,并且根据实施方案,时间点查询可以由给定的te通过以下方式来提供服务:检索当前状态原子(例如,从te、sm和ssm)或从也缓存那些冻结原子的te或从ssm检索的冻结原子,或当前状态原子和冻结原子的组合,并将那些原子加载到te的原子高速缓存中。给定的时间点查询的全部或一部分可以由数据库的一个或多个同级节点以及由来自那些同级节点的冻结原子和当前状态原子两者提供服务(视具体情况而定)。

现在参考图8a,根据本公开的实施方案,示出了用于由te执行时间点查询的一个示例性方法800。时间点查询使得用户能够查询数据库的“截至”特定时间点”的过去状态。该方法可以例如由图1的分布式数据库系统100,且更特定地由te106a-106c来实施,但是依据本公开将明了许多实施方案。方法800以动作802开始。在动作804中,te(例如,te106a-106c)从诸如sql客户端102的客户端接收时间点查询。图8b中示出了一个这样的示例性时间点查询801。如所示,示例性时间点查询801包括用于查询的标准sql语法816,和目标数据库对象818。此外,并且如依据本公开将会理解,本公开的一些方面包括对sql本地语言的扩展以实现用于查询目的的快照识别。为此,并且根据本公开的实施方案,分布式数据库系统100可以包括被配置为解析附加sql语法的te。如所示,时间点查询801包括一些此类附加的sql关键字820,其包括快照识别符822。尽管在图8b中示出了特定关键字820(“截至”),但是应当理解,在其它实施方案中可以使用其它术语。

在一些情况下,快照识别符822可以是快照的符号名称(例如,全局唯一识别符(guid)或其它唯一识别符)、与快照相关联的日期和/或时间、别名、用户定义的标签、或为给定快照独有的任何其它识别符。在其它情况下,快照识别符822可以是所谓的“粗略”或其它不精确的用户指定时间戳,其用于基于任意时间点来查询数据库的过去状态。在任何这种情况下,客户端和/或te可以通过例如查询包括快照列表和与每个快照相关的细节的表格来确定快照可用性。

例如,如图8c所示,示例性查询803可以由te执行以确定或以其它方式验证查询中所识别的快照在分布式数据库系统100内可用。在其它示例中,并且如下所述,客户端可以执行查询以确定哪些快照可用于查询。在任何这种情况下,在一个示例性结果集824中示出了一个这样的示例性查询803的结果。如所示,结果集824包括每个相应快照的快照id和元数据826(例如,执行快照时的时间戳)。如上所述,快照识别符和相关联的元数据被设计为例如基于时间戳或某一其它唯一属性来唯一地识别每个快照。为此,示例性结果集824不应被视为限制本公开。此外,图8b中所示的示例不一定是te将在验证查询中所识别快照的存在时执行的sql查询。例如,te可以利用快照识别符822来更有效地查询在分布式数据库系统100内是否存在特定快照(例如,其中id=snapshot_identifier)。

应当理解,te可以利用sql解析器模块204、优化器模块206和其它解析器相关模块来确保时间点查询与标准sql语法相匹配并被有效地执行。为此,如上所述,确定所识别的快照是否可用的验证方面可以集成在te内,并用于验证时间点查询。应当理解,te可以执行附加的验证例程。例如,如果没有ssm可用于服务于时间点查询,则te可向客户端发送错误或异常,从而指示没有可用ssm是可用的。

在实施方案中,te可以被预配置为在查询内无显式引用的情况下静态地“指向”快照。例如,te可以被配置为总是基于特定的用户选择的快照执行查询,使得所有查询都使用隐式的“截至”声明来执行。为此,客户端不一定知道返回的结果集是来自数据库的过去状态。当例如数据库管理员想要对过去的状态执行分析查询而不必修改可能无法访问(例如,可以被硬编码或以其它方式编译成应用)的基本应用代码(例如,将“截至”语法添加到sql查询)时,这可能特别有利。因此,te可以被配置为在不需要客户端在查询中具有特定知识或特殊语法的情况下查看数据库的特殊过去状态。

返回到图8a,一旦已经接收时间点查询,则在动作805中,te定位受时间点查询影响的冻结原子和当前状态原子。应当理解,原子到sql映射模块208使得te能够基于查询中引用的数据库对象来确定哪些原子受到给定查询的影响。现在将讨论受影响的原子如何以冻结或当前状态形式定位以满足时间点查询的一个示例。

如上面关于图3a所讨论的,基于何时由ssm接收到事务,由ssm将事务布置到全序中。因此,专辑包括如以全序布置的事务集合。此外,事务可以与快照相关联。如下所述,原子和其中的版本可以随时被淘汰以回收空间。为了确保快照连续地指向正确的数据,原子可以通过制成其的副本并将副本标记为只读(最终将副本写入到ssm的耐久存储中)来“冻结”。因此,尽管最初每个事务都与当前状态原子相关联,但随着时间的推移,那些原子变为冻结的,因为例如在空间回收过程中原子中的数据版本可能会被移除。每个专辑可以引用一个或多个冻结原子,以便重建满足给定时间点查询的数据库版本。当原子被冻结时,该冻结原子被原子冻结时的最后关闭的专辑引用。因此,与快照关联的所有冻结原子都被保证为由快照所属专辑或某一稍后关闭的专辑引用。

考虑图3a的快照302是由在动作804中所接收的时间点查询所识别的快照。te可以基于例如将快照与对应专辑关联的映射来确定快照属于哪个专辑。如所示,快照302与专辑2相关联。因此,te可以执行查找,其检查专辑2是否具有受时间点查询影响的相关联冻结原子,并且如果是,则建构那些冻结原子的列表以及其中存储那些冻结原子的ssm节点的位置。te可以继续在专辑2之后关闭的每个附加专辑(在图3a中出现在专辑2右侧)上执行该查找,直至达到最新的专辑(例如,专辑3)。通过迭代每个专辑直到最新的专辑,te可以保证可以定位在时间点快照302被声明时存在的所有原子。请注意,受时间点查询影响的一些原子可能尚未在专辑2中冻结,但可能随后被冻结并与另一专辑相关联。因此,te遍历每个专辑以确保每个受影响的原子均可以冻结形式定位(如有必要),以满足时间点查询。还要考虑与快照相关联的一些原子可能尚未冻结。经由上述查找过程找不到的任何原子都不会被冻结,并且因此将从当前状态而非从专辑中检索。

在动作806中,te确定受动作805中所识别的时间点查询影响的当前状态和冻结原子是否在te的原子高速缓存内。如果所有受影响的原子都位于原子高速缓存内,则te将在动作808中向客户端返回结果集(专门从原子高速缓存中)。如依据本公开将会理解,这使得能够有效地对查询提供服务,而不会导致与磁盘访问(例如,“漏掉”)相关的延时或与请求来自同级节点的原子相关的往返。如果时间点查询影响不在原子高速缓存中的任何原子,则方法800继续动作810。如下面将要讨论的,每个时间点查询可以由当前状态原子和/或冻结原子来提供服务。

应当理解,来自时间点查询和标准查询的结果集不是原子本身;相反,它们是与由给定客户端预期的数据结构相匹配的形式。例如,sql客户端接收与sql兼容的结果集,而不考虑那些结果的基本原子结构。一些这样的sql兼容结果集包括由查询定位并且以与执行查询的sql客户端的给定配置相匹配的方式串行化或以其它方式格式化的记录的列、行和值。在实施方案中,这种从原子到sql兼容结果集的转换也可以由sql映射模块208执行。

在动作810中,从最易做出响应的或否则低延时的同级数据库节点请求在原子高速缓存中不可用的那些原子。这包括服务于时间点查询所需的当前状态原子和冻结原子。如下面关于图8d进一步讨论的,在一个实施中,te可以通过从具有最低ping或以其它方式被知道具有最快往返响应(例如,以毫秒为单位)的那些数据库节点请求原子来减轻延时。在实施方案中,可以从ssm请求在动作805中识别的冻结原子。请注意,时间点查询不一定限制于仅由ssm提供服务。例如,具有与时间点查询相关的一个或多个原子的同级te节点可以用于完全或部分地履行时间点查询。此外,在一些情况下,时间点查询可能与当前状态原子相关联(例如,如果原子自快照以来没有改变),并且那些当前状态的原子可以从te或sm请求,并且还可用于完全或部分地履行时间点查询。因此,可以通过利用分布式数据库系统100来定位相关原子并尽可能高效地满足给定的时间点查询来服务于时间点查询。此外,te可以通过检索当前状态原子和/或冻结原子来满足时间点查询,其中那些原子请求由一个或多个te、sm和ssm来服务。

在动作812中,te接收在动作810中请求的一个或多个原子。在实施方案中,te、sm和ssm中的至少一个将所请求的原子传达到te以便服务于时间点查询。在动作808中,te执行原子到sql映射以建构符合客户端要求的结果集(例如,sql兼容的结果集),并将建构的结果集传达给客户端。在动作814中,方法800结束。

现在参考图8d,根据本公开的实施方案,示出了示例性数据流,其示出实施图8a的示例性时间点方法800的多个te。如所示,te106a和106b中的每一个被配置为使得客户端(例如,sql客户端102)能够“查看”分布式数据库系统100内的单个逻辑数据库并且在其上执行查询。此外,如所示,te106a正在执行包括标准sql(例如“select...”)的查询,并且te106b正在执行包括附加sql关键字(“截至”)的第二查询,以执行时间点查询。注意,te106a和106b中的每一个均不限于执行除标准查询之外的时间点查询,且反之亦然。为此,可以将te106a和106b中的每一个配置为并发服务于标准查询和时间点查询两者。

在te106a执行的标准查询(“select...”)的示例背景中,一个或多个原子在te106a的原子高速缓存中不可用。在实施方案中,这种原子可用性确定可以类似于图8a的方法的动作806来执行。因此,te106a向sm108发送原子请求。作为响应,sm108从其原子高速缓存或其耐久存储中检索所请求的原子,并且然后将所请求的原子传送回到te106a。然而,应当理解,实际上事务层107和/或持久层109中的任何数据库节点都可以由te106a利用,因为原子可以从具有相应原子高速缓存或耐久存储中的所请求原子的任何同级节点请求,视情况而定。为此,并且根据实施方案,te106a可以从第一数据库节点接收一部分原子,并且从任何数量的附加数据库节点接收第二部分原子。在这种情况下,所检索的原子,以及已经存在于te106a的原子高速缓存中的那些原子可用于服务于查询并返回结果集,类似于上面关于图8a讨论的动作808。

在te106b执行的时间点查询(“selectasof...”)的示例背景中,一个或多个原子在te106b的原子高速缓存中不可用。上文提到,原子在移除原子或原子版本的破坏性复制程序之前被冻结。因此,给定的时间点查询可能仅返回冻结原子,或者可能返回一些冻结原子和一些当前状态原子。上文还提到,ssm存储和更新数据库的当前状态(例如,利用复制消息)。因此,如果原子例如不经常改变或否则长时间段内不经历空间回收程序,则原子可能不会被冻结。

在实施方案中,te106b部分地通过与ssm110通信以定位与时间点查询中所识别的快照相关的原子来确定从ssm110请求哪些原子。上文提到,ssm利用了如上面关于图2b所讨论的sm架构201的许多模块。然而,在某些实施方案中,ssm包括用于保存每个原子的多个版本而不仅仅是快照之间的当前状态(例如,所谓的“冻结”原子)的附加模块。当ssm接收到复制消息时,如上面关于图7a-7c所讨论的,那些修改导致在ssm耐久存储中保存过去的状态。快照管理器模块226和存储接口模块224将那些快照组织为原子的先前版本的序列,如上面关于图3a所讨论。为此,并且根据实施方案,按需要使用这些冻结原子和当前状态来重建快照的部分,视情况而定。

如将理解,快照使得能够“看到”数据库的各个版本,除使用如上面关于图2b所讨论的可见性例程的版本以外。这使得te106b能够确定哪些原子应用于重建数据库来服务于时间点查询。在这样的实施方案中,仅与查询有关的数据库对象相关的原子需要被加载到te106b的原子高速缓存中。例如,用于从“截至”特定时间点的特定表格进行选择的命令不需要加载该时间点处的每个表格。相反,只有那些用于在特定时间点处重建特定表格的原子被te106b加载。在实施方案中,te106b对重建快照所需的那些原子执行可见性例程,使得只有那些截至快照为“当前”的每个原子的版本变得可见。

继续图8d的示例性数据流,一旦te106b确定应使用哪些原子来服务于时间点查询,如上所述,则te106b从ssm110请求那些原子。在一些情况下,一个或多个所请求的原子是由ssm维护的原子的“冻结”副本。在其它情况下,一个或多个所请求的原子是当前状态的原子,它们不仅通过ssm而且通过sm而被耐久化。在任何这种情况下,并且如图8d所示,te106b可以通过向sm108或ssm110发送原子请求来请求服务于时间点查询所必需的原子。作为响应,sm108或ssm110可以确定所请求的原子是否在其相应的原子高速缓存中,并且如果不是,则通过从耐久存储(例如,耐久存储位置112或114)检索原子来加载那些原子。一旦在原子高速缓存中,则ssm110可以通过例如通信网络101将请求的原子发送到te106b。在实施方案中,te106b利用所接收的冻结和/或当前状态原子来执行查询并建构包含对可以返回给客户端的所请求快照有效的结果的结果集。

计算机系统

图9示出了根据本公开中提供的技术和方面的被配置为执行分布式数据库系统100的一个或多个节点的计算系统1100。可以看到,计算系统1100包括处理器1102、数据存储设备1104、存储器1105、网络接口电路1108、输入/输出接口1110和互连元件1112。为了执行本文提供的至少一些方面,处理器1102接收并执行导致执行例程和数据操纵的一系列指令。在一些情况下,处理器是至少两个处理器。在一些这种情况下,处理器可以是多个处理器或具有不同数量的处理核心的处理器。存储器1106可以是ram并且被配置为存储在计算系统1100的操作期间使用的指令序列和其它数据。为此,存储器1106可以是诸如动态随机存取存储器(dram)、静态ram(sram)或快闪存储器等的易失性和非易失性存储器的组合。网络接口电路1108可以是能够进行基于网络的通信的任何接口设备。这种网络接口的一些示例包括以太网、蓝牙、光纤信道、wi-fi和rs-232(串行)接口。数据存储设备1104包括任何计算机可读和可写的非暂时性存储介质。存储介质可以具有存储在其上的指令序列,其定义可由处理器1102执行的计算机程序。此外,存储介质通常可以将数据以连续和不连续的数据结构存储在存储设备1104的文件系统内。存储介质可以是光盘、快闪存储器、固态驱动器(ssd)等。在操作期间,计算系统1100可以致使存储设备1104中的数据被移动到存储器设备(诸如存储器1106),从而允许更快的访问。输入/输出接口1110可以包括能够进行数据输入和/或输出的任何数量的部件。这样的部件可以包括例如显示设备、触摸屏设备、鼠标、键盘、麦克风和扬声器。互连元件1112可以包括在计算系统1100的部件之间建立并且遵照标准总线技术(例如usb、ide、scsi、pci等)操作的任何通信信道或总线。

尽管在一个特定配置中示出了计算系统1100,但是可以通过具有其它配置的计算系统来执行各个方面和实施方案。因此,许多其它计算机配置在本公开的范围内。例如,计算系统1100可以是所谓的“刀片”服务器或其它机架式服务器。在其它示例中,计算系统1100可以实施操作系统或mac操作系统。可以使用许多其它操作系统,并且示例不限于任何特定的操作系统。

使用示例

在一个实施方案中,管理员可以致使发生备份过程以备份分布式数据库系统100内的一个或多个数据库。在该实施方案中,管理员可以访问用户界面(例如,由代理节点104托管)并且通过选择定义与要备份的数据相关联的时间点的快照来启动备份过程。在该实施方案中,可以利用类似于图8c的示例性查询803的查询来获取可用快照的列表。在一些情况下,可能需要数据库的最新版本或当前版本。在这些情况下,分布式数据库系统100可以被配置为自动声明快照,并且因此使数据库的最新版本可用于备份。在这种情况下,管理员可以指定要备份的快照和存储数据库的位置。一些这样的示例位置包括usb拇指驱动器、外部硬盘驱动器、raid阵列、相对路径或任何合适的存储位置,如依据本公开将明了。一旦完成,则管理员可能接收到提示、电子邮件或指示备份已完成的其它合适的通知。在实施方案中,备份过程是后台过程。在实施方案中,备份过程可以在稍后的时间点暂停和重新启动,而不会破坏备份。在另一个实施方案中,管理员可以备份自特定快照以来的事务序列(例如,利用预写日志)以及快照,以便执行细粒度增量备份副本。

在另一个实施方案中,管理员可以在灾难性耐久存储丢失或以其它方式丢失之后还原数据库或其一部分,以便执行数据迁移。在该实施方案中,分布式数据库系统100处于“离线”状态,从而不将事务提交到耐久存储。在本实施方案中,可以从外部硬盘驱动器或其它合适的位置检索备份,如依据本公开将明了。在实施方案中,管理员利用软件工具将备份复制到将由sm使用的物理存储上。在一些情况下,备份包括从快照复制的文件,以及自快照以来的一组改变(例如,增量改变),这可用于将数据库还原到所需时间点。在实施方案中,可以经由管理应用或控制台以正常方式配置和启动数据库。一旦开始,则一个或多个sm可以被引导到使用软件工具填充的物理存储位置。因此,sm从离线转换为在线,并且因此使得能够由一个或多个te提交后续事务。

在另一个实施方案中,在分布式数据库系统100内的数据库的实况操作期间,对数据库的错误用户改变可以被“回滚”。通过举例的方式可以更好地理解该回滚过程。考虑其中用户错误地删除名为“帐户”的表格的情况。在此示例中,数据库管理员可以搜索表格删除之前的最近快照。实施这种搜索的一个这样的示例性sql语句如下:

selectmax(id)fromsystem_snapshotswheretime<now();

一旦被执行,则管理员可以使用结果集来选择快照识别符(上述示例中的“id”),以在删除之前从表格中选择数据并重新创建表格。例如,如果“id”等于3:

selectfromaccountsintoaccountsasof3;

作为执行此示例性时间点查询的结果,创建新的账户表格并将其插入到数据库中,包括来自先前删除的账户表格的数据。因此,表示账户表格的数据将被重新引入到数据库的当前状态中。

依据本公开,也应明了利用本文以各种方式公开的技术的附加使用情况。例如,考虑其中检测到在检测之前6个月内发生的入侵的情况。在这种情况下,用户可以查询6个月前的快照,并生成关于哪些用户登录到系统中的报告。这样的报告可以表现为表格式结果集,或表现为格式化报告(例如,具有图形、标题、图片、图表等),这取决于配置。

在另一种情况下,可以执行长时间运行的查询,其生成一组特定行的历史摘要视图。例如,考虑标记为“装配线”的数据库表格,其具有与位于世界各地的多个工厂的每个装配线对应的行。每个装配线行可以包括称为“状态”的列,例如,具有红色,黄色或绿色的值,其实况或近乎实况指示装配线生产是否分别在目标效率以下、在目标效率或高于目标效率。为此,可以执行一个或多个时间点查询,其实现针对每个装配线的历史视图,使得特定时间框架上的效率趋势可以被可视化或以其它方式报告。例如,可以运行一个月的报告,其显示每个相应装配线的每天的效率视图,或每个工厂的总效率。

在另一个示例性情况下,由于合规性原因,分布式数据库系统100保留一年的每日快照。在此示例中,每天都可以执行移除所有较旧的快照以符合原地数据保留策略的命令或后台进程。这避免了由于必须执行影响数据库当前状态的大型查询(例如,删除操作)而导致的性能损失。另外,这避免了由于以下情况而导致的性能损失:要检查大量表格及其中的每一行,以确定上一次发生每行更新的时间(例如,使用时间戳列),以便识别保留策略之外的那些记录。

其它示例性实施方案

示例1是一种被配置为在耐久存储中存储数据库和多个数据库快照的系统,所述系统包括:网络接口电路,其被配置为通信地耦合到通信网络,所述通信网络包括形成分布式数据库的多个数据库节点;存储器,其用于存储多个数据库对象,每个具有当前版本和过去版本;以及快照管理器模块,其包括高分辨率归档模式,所述高分辨率归档模式被配置为经由通信网络接收数据库复制消息并且基于所接收的数据库复制消息来操纵存储器中的所识别的数据库对象,其中所述高分辨率归档模式被进一步配置为将已成为所识别的数据库对象的当前版本的版本归档为新的过去版本,并根据数据库复制消息来存储新的当前版本,其中新的当前版本和过去版本中的每一个与快照识别符相关联。

示例2包括示例1的主题,其中一个或多个复制消息被配置为对数据库事务进行同步,使得同一数据库或其部分存储在多个数据库节点中的每一个内的存储器中,并且其中每个复制消息包括数据操纵语言(dml)和用于所述dml的目标数据库对象。

示例3包括示例2的主题,其中dml包括符合结构化查询语言(sql)的语法。

示例4包括示例1-3的主题,其中每个数据库对象表示数据库表格、数据库记录、数据库blob和数据库索引中的至少一个。

示例5包括示例1-4的主题,其中高分辨率归档模式被进一步配置为接收识别用于从存储在存储器中的数据库对象移除的过去版本的破坏性复制消息;响应于接收破坏性复制消息,将数据库对象的所识别的过去版本复制到数据库对象的冻结只读副本中;并且将数据库对象的冻结只读副本存储到存储器中并将所识别的过去版本从存储器中的数据库对象移除。

示例6包括示例5的主题,其中破坏性复制消息被配置为对数据库对象的过去版本的移除进行同步,使得针对每个数据库对象的相同数量的数据库对象版本持久保存在每个数据库或其部分中,所述每个数据库或其部分存储在多个数据库节点中的每一个的存储器中。

示例7包括示例5的主题,其中耐久存储包括非易失性存储位置,其中高分辨率归档模式被配置为将数据库对象的冻结只读副本提交到非易失性存储位置中。

示例8包括示例7的主题,其中非易失性存储位置包括与系统相关联的本地硬盘驱动器、raid阵列和网络附接存储位置中的至少一个的相对路径或其它识别符。

示例9包括示例1的主题,其中高分辨率归档模式被进一步配置为从多个数据库节点中的数据库节点接收对存储在存储器中的一个或多个数据库对象的请求,其中请求的数据库对象与先前执行的事务相关联,并且共同地表示在先前执行的事务被提交时数据库或其部分的一致状态,并且经由通信网络将一个或多个所请求的数据库对象发送到数据库节点。

示例10包括示例9的主题,其中一个或多个数据库对象中的至少一个数据库对象包括数据库对象的冻结只读副本,其中在高分辨率归档模式接收到破坏性复制之后,数据库对象的冻结只读副本被创建并存储在存储器中。

示例11包括示例1-10的主题,其中分布式数据库向数据库客户端提供单个逻辑视图,使得影响数据库的写入操作同步到多个数据库节点。

示例12包括示例11的主题,其中分布式数据库系统实施原子性、一致性、隔离性和耐久性(acid)属性。

示例13是一种在上面编码有多个指令的非暂时性计算机可读介质,当由至少一个处理器执行时,所述指令将致使执行高分辨率归档过程,所述过程被配置为:经由通信网络接收数据库复制消息,所述通信网络包括形成分布式数据库的多个通信耦合的数据库节点;基于所接收的数据库复制消息来操纵存储器中的所识别的数据库对象;将已成为所识别的数据库对象的当前版本的版本归档为新的过去版本并根据数据库复制消息存储新的当前版本;以及将数据库对象的新的当前版本和过去版本存储在耐久存储位置中,其中新的当前版本和过去版本中的每一个与快照识别符相关联。

示例14包括示例13的主题,其中所述过程被进一步配置为:接收识别要从存储在存储器中的数据库对象移除的过去版本的破坏性复制消息;响应于接收到破坏性复制消息,将数据库对象的所识别的过去版本复制到数据库对象的冻结只读副本中;以及将数据库对象的冻结只读副本存储到存储器中,并从存储器中的数据库对象移除所识别的过去版本。

示例15包括示例13及14的主题,其中所述过程被进一步配置为从多个数据库节点中的数据库节点接收对存储在存储器中的一个或多个数据库对象的请求,其中所请求的数据库对象与先前执行的事务相关联,并且共同地表示在先前执行的事务被提交时数据库或其部分的一致状态,并且经由通信网络将一个或多个所请求的数据库对象发送到数据库节点。

示例16包括示例15的主题,其中一个或多个数据库对象中的至少一个数据库对象包括数据库对象的冻结只读副本,其中在从多个数据库节点中的节点接收了破坏性复制之后,数据库对象的冻结只读副本被创建并存储在存储器中。

示例17是一种用于使用数据库快照备份和还原数据库的计算机实施方法,所述方法包括:由处理器识别来自多个快照的快照,每个快照与先前提交的数据库事务相关联,并且逻辑地表示在提交了先前提交的数据库事务时数据库的一致状态;请求与所识别的快照相关联的多个数据库对象;以及在存储器中重建对应于所识别的快照的数据库的过去状态。

示例18包括示例17的主题,所述方法进一步包括将所重建的过去状态存储在期望的存储位置中,其中期望的存储位置是usb拇指驱动器、硬盘驱动器、raid阵列、外部硬盘驱动器和网络附接存储设备中的至少一个。

示例19包括示例17及18的主题,所述方法进一步包括使用所重建的过去状态来撤销实况数据库上的先前的数据库写入操作,其中写入操作是由update、insert、delete和dropsql语句中的至少一个引起的。

示例20包括示例17-19的主题,所述方法进一步包括将所重建的过去状态复制到数据库节点的耐久存储,其中数据库节点将过去状态实例化为实况数据库,使得可以执行读取和写入。

为了说明和描述的目的,已经呈现了前述描述。并非意图为穷举性的,或并非意图将本公开限制为所公开的精确形式。意图是本公开的范围不受此详细描述的限制,而是由所附权利要求书限制。

虽然本文已经描述和示出了各种发明性实施方案,但是本领域普通技术人员将容易地设想出用于执行功能和/或获得结果和/或本文所描述的一个或多个优点的多种其它手段和/或结构,并且这些变化和/或修改中的每一个均被认为在本文所描述的发明性实施方案的范围内。更一般地,本领域技术人员将容易地理解,本文所述的所有参数、尺寸、材料和配置意在为示例性的,并且实际参数、尺寸、材料和/或配置将取决于对其使用发明性教示的(一个或多个)特定应用。本领域技术人员将认识到或能够使用不超过常规实验来确定本文所述的特定发明性实施方案的许多等效物。因此,应当理解,前述实施方案仅通过示例的方式提供,并且在所附权利要求书及其等效物的范围内,可以除了特定描述和要求保护之外的方式实践发明性实施方案。本公开的发明性实施方案涉及本文所述的每个单独特征、系统、物品、材料、套件和/或方法。此外,如果这些特征、系统、物品、材料、套件和/或方法并非相互不相容,则两个或更多个这样的特征、系统、物品、材料、套件和/或方法的任何组合均包括在本公开的发明范围内。

上述实施方案可以许多方式中的任一种来实施。例如,可以使用硬件、软件或其组合来实施设计和形成本文所公开技术的实施方案。当以软件实施时,软件代码可以在任何合适的处理器或处理器集合上执行,无论是在单个计算机中提供还是分布在多台计算机之间。

此外,应当理解,计算机可以多种形式的任何形式体现,例如机架式计算机、台式计算机、膝上型计算机或平板计算机。此外,计算机可以嵌入到通常不被认为是计算机但具有合适的处理能力的设备中,包括个人数字助理(pda)、智能电话或任何其它合适的便携式或固定电子设备。

此外,计算机可以具有一个或多个输入和输出设备。除了别的以外,这些设备可以用于呈现用户界面。可用于提供用户界面的输出设备的示例包括用于视觉地呈现输出的打印机或显示器屏幕,或者用于可听见地呈现输出的扬声器或其它声音产生设备。可用于用户界面的输入设备的示例包括键盘和指示设备,例如鼠标、触摸板和数字化平板计算机。作为另一示例,计算机可以通过语音辨识或以其它可听见的格式接收输入信息。

这样的计算机可通过任何合适形式的一个或多个网络互连,包括局域网或广域网,诸如企业网络、和智能网(in)或互联网。这样的网络可以基于任何合适的技术,并且可以根据任何合适的协议来操作,并且可以包括无线网络、有线网络或光纤网络。

本文概述的(例如,设计和形成上文所公开技术的)各种方法或过程可以被编码为可在采用各种操作系统或平台中的任一种的一个或多个处理器上执行的软件。此外,这样的软件可以使用许多合适的编程语言和/或编程或脚本工具中的任何一种来编写,并且还可以被编译为在框架或虚拟机上执行的可执行机器语言代码或中间代码。

在这方面,各种发明性构思可以体现为编码有一个或多个程序的计算机可读存储介质(或多个计算机可读存储介质)(例如,计算机存储器、一个或多个软盘、压缩磁盘、光盘、磁带、快闪存储器、现场可编程门阵列或其它半导体设备中的电路配置、或其它非暂时性介质或有形计算机存储介质),当在一个或多个计算机或其它处理器上执行时,所述程序执行实施上述本发明各种实施方案的方法。一个或多个计算机可读介质可以是可传输的,使得一个或多个其上所存储的程序可以被加载到一个或多个不同的计算机或其它处理器上以实施如上所述的本发明各个方面。

术语“程序”或“软件”在本文中一般意义上用于指任何类型的计算机代码或计算机可执行指令集,所述计算机代码或计算机可执行指令集可用于对计算机或其它处理器进行编程以实施如上所述的实施方案的各个方面。另外,应当理解,根据一个方面,当被执行来执行本发明的方法时,一个或多个计算机程序无需驻留在单个计算机或处理器上,而是可以模块化方式分布在多个不同计算机或处理器之间来实施本发明的各个方面。

计算机可执行指令可以是由一个或多个计算机或其它设备执行的许多形式,例如程序模块。一般来说,程序模块包括执行特定任务或实施特定抽象数据类型的例程、程序、对象、部件、数据结构等等。典型地,程序模块的功能可以根据需要在各种实施方案中被组合或分布。

而且,数据结构可以任何合适的形式存储在计算机可读介质中。为了简化说明,数据结构可以被示出为具有通过数据结构中的位置相关的字段。这样的关系同样可以通过为具有传达字段之间的关系的计算机可读介质中的位置的字段指派存储来实现。然而,可以使用任何合适的机制来建立数据结构的字段中的信息之间的关系,包括通过使用指针、标签或建立数据元素之间的关系的其它机制。

而且,各种发明性构思可以体现为已提供了其示例的一种或多种方法。作为方法的一部分执行的动作可以任何合适的方式排序。因此,可以建构其中以不同于所示的顺序执行动作的实施方案,其可以包括同时执行某些动作,即使在说明性实施方案中示出为顺序动作。

本文中定义和使用的所有定义应被理解为涵盖字典定义、通过引用的方式并入的文献中的定义和/或所定义术语的普通含义。

如本文在本说明书和权利要求书中使用的不定冠词“a”和“an”除非明确指出相反,否则应理解为意指“至少一个”。

如本文在本说明书和权利要求书中使用的短语“和/或”应当理解为意指所联合的元素中的“任一个或两个”,即,在一些情况下结合存在而在其它情况下分离存在的元素。以“和/或”列出的多个元素应该以相同的方式来解释,即,所联合的元素中的“一个或多个”。除“和/或”子句特定识别的元素之外,可能任选地存在其它元素,无论与特定识别的那些元素相关还是不相关。因此,作为非限制性示例,当结合诸如“包括”的开放式语言使用时,对“a和/或b”的引用可以在一个实施方案中仅指a(任选地包括除了b之外的元素);在另一个实施方案中,仅指b(任选地包括除a之外的元素);在又一个实施方案中,指a和b两者(任选地包括其它元素);等等。

如本文在本说明书和权利要求书中所使用的,“或”应理解为具有与如上所定义的“和/或”相同的含义。例如,当分离列表中的项目时,“或”或“和/或”将被解释为包括在内,即,包括多个元素或元素列表中的至少一个,而且包括多于一个,和任选地附加的未列出的项目。只有明确指出相反的项目,例如“只有一个”或“恰好一个”,或当在权利要求书中使用时,“由...组成”将指的是包括多个元素或元素列表中的恰好一个元素。一般而言,如本文中使用的术语“或”仅在作为排他性条款之前时被解释为指示排他性替代物(即“一个或另一个而非两者”),例如“任一个”、“其中之一”、“只有一个”或“恰好一个”。“基本上由...组成”当在权利要求书中使用时应具有其在专利法领域中使用的普通含义。

如本文在本说明书和权利要求书中所使用的,有关一个或多个元素的列表的短语“至少一个”应当被理解为意指选自元素列表中的任何一个或多个元素的至少一个元素,但未必包括在元素列表内特定列出的每个元素中的至少一个,且不排除元素列表中的元素的任何组合。该定义还允许除了在短语“至少一个”所指的在元素列表内特定识别的元素之外,可以任选地存在元素,无论与特定识别的那些元素相关还是不相关。因此,作为非限制性示例,“a和b”中的至少一个(或等效地,“a或b”中的至少一个,或等效地,“a和/或b中的至少一个”)可以是指:在一个实施方案中,至少一个,任选地包括多于一个a,其中不存在b(且任选地包括除b之外的元素);在另一个实施方案中,至少一个,任选地包括多于一个b,其中不存在a(且任选地包括除a之外的元素);在又一个实施方案中,至少一个,任选地包括多于一个a和至少一个,任选地包括多于一个b(并且任选地包括其它元素);等等。

在权利要求书以及上述说明书中,所有过渡性短语如“包括”、“包括”、“携带”、“具有”、“含有”、“涉及”、“持有”、“由...构成”等应被理解为是开放式的,即意指包括但不限于。只有过渡性短语“由...组成”和“基本上由...组成”应分别为封闭式或半封闭式过渡短语,如美国专利局专利审查程序手册第2111.03节中所阐述。

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