数据库管理系统的制作方法

文档序号:6359933阅读:781来源:国知局
专利名称:数据库管理系统的制作方法
数据库管理系统技术领域
本发明总体上涉及数据库管理系统。更具体地,本发明涉及一种方法和设备,用于 实现多用户、弹性的、按需的分布式关系数据库管理系统,其特征在于原子性、性能和可扩 展性。
背景技术
在过去这些年中,用于存储和检索消息的数据库的使用已经在大量的商业应用中 显现为重要的工具。初始,许多数据库系统在具有多个用户的单个服务器装置上操作。然 而,在过去这些年中,各种因素已经产生,它们要求数据库架构的基本特性改变。作为第一 因素,数据库存储要求已经变得极大。其次,试图访问这样的数据库的用户的数量也已经变 大。第三,用于检索具有最小的更新的相对稳定的数据的数据库的使用已经被替换为事务 处理。
事务是必须整体完成的工作的单位。单个事务可以包括多个数据操纵。例如,单 个事务可以包括读取操作,随后是写入操作。近年来,大量的努力已经针对使得关系数据库 能够支持日益增长的事务处理的速率。
现在通过限定ACID属性的标准来判断数据库,该ACID属性即原子性、一致性、隔 离性和持久性。原子性确保以其整体来完成所有的事务任务。一致性保证仅有效的数据被 写入数据库。隔离性保证其他操作在事务期间不能访问或“观看”在中间状态中的数据。持 久性保证一旦已经成功地处理了事务,则它不能被复原。
一致性在多用户系统中特别重要,在多用户系统中,两个或更多的用户可能寻求 对于共享的易失性数据的同时访问。早期的多用户系统使用锁定操作来保证一致性。锁定 可以是排他的或写入的锁定或者是非排他的或读取的锁定,并且可以被应用到单独的记录 或被应用到页面。然而,当数据库在大小上已经增大时并且当事务速率已经提高时,用于管 理锁定的开销已经变得显著,并且在一些情况下已经变为禁止性的。
多版本并发控制(MVCC)是用于保证同时性的替代处理。对于复杂数据库,MVCC可 以比锁定更有效。MVCC使用时间戳或增加的事务标识(ID)来串行化记录的不同版本。每 一个版本允许事务读取在时间戳或ID前的对象的最近版本。利用该控制方法,其他用户将 看不到例如对于记录的任何改变,直到提交了该改变。MVCC也消除了具有其他附加的开销 的锁定,并且建立了其中读取操作不能阻挡写入操作的系统。
除了满足ACID测试之外,现在存在对于针对用户的连续可用性的要求。一些数 据库系统将一个计算机系统专用于事务处理,并且将另一个专用于决定支持和其他报告处 理。它们互连使得可以同时支持其他功能。随着数据库在大小和复杂度上增大,现有的数据 处理系统被替换为更强大的数据处理系统。用于适应于增长的另一种手段涉及复制系统, 其中,一个机器被指定为“头”机器,其使所有的复制机器保持同步。如果头机器故障,则处 理将那个功能分配给另一个复制机器。不同的复制机器可用于特定用户。该手段不是可扩 展的,因为所有的机器必须具有相同的能力。
作为另一种手段,可以将多个自治数据库系统整合为单个“联合”数据库,该单个 “联合”数据库具有计算机网络,该计算机网络互连各个独立的数据库。联合数据库要求“中 间件”来将构成的数据库保持同步。这个“中间件”可以变得很复杂。当数据库大小增大 时,操作中间件所需要的资源可能施加足以使得整体系统性能变差的大的开销。
“分区”是用于实现数据库的另一种手段,在该数据库中,逻辑数据库或其构成元 素被划分为不同的独立部分。在分布式数据库管理系统中,每一个分区可以在多个节点上 扩展。在给定节点的用户可以对于该分区执行局部事务。也可以通过形成较小的数据库或 通过分割仅一个表格的选择的元素来实现分区。
对于分区存在两种一般的手段。在也被称为“分片”的水平分区中,将不同的行置 于不同的表格和不同的服务器中。一般,它们具有特定的共性,诸如邮政编码的范围或按照 范围划分为不同表格的姓。例如,第一数据库可能包括用于在范围A至M中的姓的所有记 录;第二数据库针对在范围N至Z中。作为一种形式的水平分区的分片涉及将数据库的行 定位在分离的服务器上。分片不计算在每一个表格中的行的数量,并且提高搜索性能。然 而,分片在应用级使用散列码,这使得其太难以实现。它也包含两阶段递交。分片的复杂性 使得其适合于特定应用,因为用于限定分片的基础被良好地限定。
垂直分区包含创建具有较少的列并且在表格上分割列的表格。象联合数据库那 样,垂直分区需要中间件来确定如何将对于特定字段的任何请求路由到适当的分区。另外, 这些系统使用实现起来复杂的两阶段提交序列。
在被称为“无共享”架构的又一种手段中,每一个节点是独立的和自给的。无共享 架构对于web发展是普及的,因为它可以简单通过以便宜的计算机的形式添加节点而向上 扩展。该手段在数据仓库应用中是普及的,在数据仓库应用中,更新趋向于比事务处理出现 得不频繁。然而,结合的处理在来自不同分区或机器的大数据集上很复杂。
一些数据库系统被称为“分布式”系统。分布式系统的一种实现方式包含“簇”和 两个通信路径。高速因特网路径在簇之间承载数据。诸如锁定管理的各种控制功能需要高 速专用通信路径。虽然该手段解决了数据库的冗余和可用性问题,但是锁定管理如前所述 可能限制系统性能。
在“全共享”系统中,超高速的通信使系统保持同步。然而,锁定管理可能要求大 量的带宽资源。为了避免这一点,这样的系统包含点到点的通信信道和很复杂的盘控制器。
共同地,那些现有技术系统满足对于数据库系统的已知要求的一些而不是全部。 所需的是一种数据库架构,其是可扩展的、满足ACID属性原子性、一致性、隔离性和持久 性。也需要的是一种数据库系统,该数据库系统在因特网上操作而不需要专用高速通信路 径,该数据库系统提供事务处理并且在大的地理区域上可操作。发明内容
因此,本发明的一个目的是提供一种弹性的、可扩展的、按需的、分布式的数据处理系统。
本发明的另一个目的是提供一种弹性的、可扩展的、按需的、分布式的数据处理系 统,该数据处理系统是容错的。
本发明的又一个目的是提供一种弹性的、可扩展的、按需的、分布式的数据处理系统,该数据处理系统具有高度的可用性。
本发明的再一个目的是提供一种弹性的、可扩展的、按需的、分布式的数据处理系 统,该数据处理系统是独立于平台的。
本发明的又一个目的是提供一种弹性的、可扩展的、按需的、分布式的数据处理系 统,该数据处理系统是原子的、一致的、隔离的和持久的。
本发明的又一个目的是提供一种弹性的、可扩展的、按需的、分布式的数据处理系 统,该数据处理系统在因特网上操作而不需要专用的高速通信路径。
本发明的再一个目的是提供一种弹性的、可扩展的、按需的、分布式的数据处理系 统,该数据处理系统提供事务处理,并且适于在大的地理区域上实现。
根据本发明的一个方面,一种使得用户能够与由数据和元数据构成的数据库交互 的数据库管理系统,包括其间具有通信路径的多个节点和永久存储器。每一个节点包括在 用户级处的高级输入和输出命令和在系统级处的输入和输出命令之间的接口,在系统级处 的输入和输出命令控制用于与所述数据库交互的操作序列,其中,响应于特定的系统级命 令,原子对象生成原子,每一个原子包含数据或元数据的指定片断,据此,原子的所有实例 集集体地限定在所述数据库中的所有所述元数据和数据。每一个节点另外包括用于在所 述系统中与每一个节点建立通信路径的通信控制;响应于来自所述接口的系统命令而从选 择的节点请求与查询相关但是不在那个节点中存在的原子的副本的方法;响应于来自另一 个节点的对于原子的请求而复制请求的原子以传送到所述请求节点的方法,据此,仅完成 查询所需的原子需要在任何给定的时间位于任何事务节点中;以及,响应于在那个节点处 的原子中的改变而复制那个原子以传送到在那个原子所驻留的系统中的每一个其他节点 的方法。所述永久存储器包含集体地包含在所述数据库中的所有所述数据和元数据的原子 的集合。
根据本发明的另一个方面,一种使得用户能够与由数据和元数据构成的数据库交 互的数据库管理系统,所述系统包括向用户提供对于所述数据库的访问的至少一个事务节 点和维持所述整个数据库的档案的至少一个档案节点。每一个事务节点包括数据库请求引 擎,所述数据库请求引擎提供在用户级处的高级输入和输出查询命令和在系统级处的输入 和输出命令之间的接口,在系统级处的输入和输出命令控制用于与所述数据库交互的操作 序列,响应于特定的系统级命令,原子对象生成原子。每一个原子包含数据或元数据的指定 片断,据此,原子的所有实例集集体地限定在所述数据库中的所有所述元数据和数据。数据 库系统网络互连所有的所述节点。在所述节点的每一个中的通信控制在所述系统中与每一 个节点建立通信路径。在每一个事务节点中的方法响应于来自所述数据库请求引擎的系统 命令而请求与查询建立相关但是不存在于那个节点中的原子的副本。在每一个节点中的另 一种方法响应于来自另一个节点的对于原子的请求而复制请求的原子以传送到所述请求 节点,据此,仅完成查询命令所需的原子需要在任何给定的时间位于任何事务节点中。在每 一个事务节点中的另一种方法响应于在那个节点处的原子中的改变而将那个改变复制到 在包含那个节点的副本的系统中的每一个其他节点。
根据本发明的又一个方面,一种用于逻辑数据库的数据库管理系统,所述逻辑数 据库由数据记录构成,所述数据记录被组织为要从多个事务节点访问的表格,所述多个事 务节点处理与所述逻辑数据库相关的事务,其中,所述数据库被解析为片断,其中,每一个片断存储与所述逻辑数据库相关的所述元数据和/或数据的一部分,以在所述数据库管理 系统中作为串行消息传送,并且存储为非串行的消息。所述系统包括至少一个档案节点,所 述档案节点在永久存储器中以非串行的形式存储所有的所述片断,由此构成用于所述整个 数据库的单个储藏库。每一个事务节点通过建立用于识别与所述查询相关的片断的低级命 令的序列来响应于来自用户的查询,并且通过获得与在其被处理的所述查询相关的现有片 断的那些副本来响应于所述低级命令,据此,给定的片断可能位于某个其他节点处或仅位 于档案节点处。每一个事务节点向所述至少一个档案节点和任何改变的片断的副本所驻留 的每一个事务节点复制那个片断,据此,在对等的基础上对于在其他节点中的片断进行改 变,并且据此,任何事务节点仅包含与通过那个事务节点访问所述数据库的用户作出的查 询相关的那些片断。


所附的权利要求特别指出和清楚地要求保护本发明的主题。通过结合附图阅读下 面的详细说明,本发明的各个目的、优点和新颖特征将更充分清楚,在附图中,相似的附图 标号指示相似的部分,并且在附图中
图1是弹性的、可扩展的、按需的、分布式的数据处理系统的一个实施例的示意形 式的图,该数据处理系统包含具有互连的事务和档案节点的本发明;
图2描述了事务节点的组织;
图3描述了档案节点的组织;
图4A和4B描述了由在图2和3中所示的原子类生成的“原子”对象的逻辑组织, 所述“原子”对象对实现本发明有用,并且它们可能在任何给定时间出现在事务节点中;5描述了在主目录原子中的信息;6描述了在事务管理器原子中的信息;7描述了在数据库原子中的信息;8描述了在图式原子中的信息;9描述了在表格原子中的信息;10描述了在表格目录原子中的信息;11描述了在索引原子中的信息;12描述了在记录状态原子中的信息;13描述了在数据原子中的信息;14描述了在大二进制对象(Blob)状态原子中的信息;15描述了在大二进制对象原子中的信息;16描述了在图1的数据库系统的事务和档案节点之间传送的示例性异步消息











图 的句法;
图17描述了通过其在图1的数据库系统的事务和档案节点之间传送信息的各种 消息类型;
图18是对理解通过其节点加入在图1中的数据库系统的方法有用的流程图19描述了在节点对象中的信息;
图20是根据本发明的、对理解通过其节点创建原子的方法有用的流程图21是对理解通过其在图20的方法期间分配唯一的原子标识的方法有用的流程 图22是对理解通过其一个节点从另一个节点获得原子的副本的方法有用的流程 图;以及
图23是对理解通过其本发明提交事务的方法有用的流程图。
具体实施方式
图1描述了弹性的、可扩展的、按需的、分布式的数据库系统30的一个实施例,该 系统具有包含本发明的多个数据处理节点。节点NI至N6是“事务节点”,它们向数据库提 供用户应用访问;节点Al和A2是“档案节点”,它们用于在每一个档案节点处维持整个数据 库的盘档案。虽然档案节点通常存储整个数据库,但是单个事务节点仅包含确定支持在那 时在那个节点执行的事务所需的数据库的那个部分。
在图1中的每一个节点可以通过数据库系统网络31与在系统中的其他节点直接 地进行通信。例如,节点NI可以与节点N2至N6、Al和A2中的每一个建立通信路径。在 任何两个节点之间的通信是借助于序列化的消息。在一个优选实施例中,以异步的方式来 执行消息传送,以最大化由系统使用的带宽,由此以及时和迅速的方式来执行各种操作。通 常,数据库系统网络31将用高带宽的、低延迟路径(例如,以太网)和高带宽的、高延迟的路 径(例如,广域网)的组合来操作。每一个节点具有用于将低延迟的路径的使用限制到时间 关键的通信(例如,获取原子)的能力。高延迟路径可以用于不关键的通信(例如,请求更新 表格的信息)。而且且优选的是,本发明的数据处理网络包含诸如传输控制协议(TCP)的消 息传送协议,并且保证每一个节点以消息被其他节点发送到该每一个节点的相同顺序来处 理消息。
图2描述了代表性的事务节点32,该代表性的事务节点32链接到数据库系统网络 31和各个最终用户33。事务节点32包括中央处理系统(CP)34,CP 34通过网络接口 35与 数据库系统网络31进行通信,并且通过用户网络接口 37与各个用户进行通信。中央处理 系统34也与RAM存储器38交互,RAM存储器38包含实现本发明的优选实施例的数据流管 理程序的副本。该程序用于提供远程接口 40、数据库请求引擎41和类和对象的集42。
数据库请求引擎41仅位于事务节点上,并且是在用户级的高级输入和输出命令 和在系统级的系统级输入和输出命令之间的接口。一般而言,其数据库请求引擎将诸如SQL 查询的用户查询解析、编译和优化为被在集42中的各个类或对象解译的命令。
为了解释本发明的目的,所设定的类/对象集42被划分为“原子类”的子集43、 “消息类”的子集44和“助手类”的子集45。下面描述这些类的另外的细节。
如将变得显然且根据本发明,在任何给定的时间,事务节点仅包含与活动的用户 应用相关的总的数据库的那些部分。而且,本发明的各个特征使得在使用中的数据库的所 有部分能够驻留在随机存取存储器38中。不必在这个系统的操作期间在事务节点处提供 补充的存储器,诸如盘存储器。
参见图3,诸如在图1中的档案节点Al或A2的每一个档案节点50也连接到数据 库系统网络31。然而,取代与在图2中的事务节点32相关联的最终用户33,档案节点仅连 接到永久存储器51,该永久存储器51通常是基于盘的存储系统或键值储藏库。档案节点50包括中央处理系统54,中央处理系统54通过I/O信道52与永久存储器51进行通信,并 且通过网络接口 55与数据库系统网络31进行通信。中央处理系统54也与RAM存储器57 交互,RAM存储器57包含类或对象的集62。与在图2中的事务节点32类似地,在图3中的 类/对象集62包括“原子类”的集63、“消息类”的集64和“助手类”的集65。
本发明的一个优选实施例使用面向对象的编程(OOP),其中,如本领域中已知,例 如在图2和3中所示的类和子类限定了方法、数据结构和进程,通过它们,可以生成那个类 或子类的“实例”或对象。可以使用“继承”和/或“多态变形”来生成“实例”。对于本领 域内的技术人员将变得显然,在具体公开的实施例中不使用面向对象的编程或变化形式的 实现方式是可能的。
现在将以几个阶段来描述本发明。“原子”部分限定了分别由在图2和3中的原子 类43和63产生的对象的等级和功能。“消息”部分描述了消息集,该消息集在可能分别被 在图2和3中的消息类44和64产生的事务和档案节点之间提供通信。“方法”部分描述了 相对于数据库管理的基本操作。“示例”部分描述了原子、消息和方法的交互,由此响应于对 于数据库请求引擎41的特定数据库查询而实现本发明的目标。
原子
如前所述,在图2中的原子类43和在图3中的63的每一个产生“原子”。更具体 地,原子类限定了一个或多个“原子类型”或“原子对象”。每个“原子类型”或“原子对象” 产生其本身,也就是“原子”的“实例”。如在更详细地理解每个特定原子对象的目的的情 况下将变得清楚的,每一个“原子”包含数据库信息的特定片断。一些原子包含数据库元数 据的一部分;其他包含数据记录;其他用作创建和跟踪其他原子类型的目录。一些“原子类 型”可以仅例示复制到所有节点的一个原子。其他“原子类型”可以例示在按需的基础上被 复制到其他节点的多个原子。
原子具有特定的特性。在事务节点中,原子仅存在于非永久存储器中,并且具有非 串行消息的形式,该非串行消息已经填充了特定的原子类型以提供用于该原子的有效存储 器驻留格式。每一个原子具有用于将其内容编码为串行消息的装置和用于将串行消息解码 以检索原子的内容的装置。结合如后面将描述的多个操作,使用这样的串行消息。
从用于复制原子的节点发送的每一个串行消息包括具有附加的节点标识的那个 原子的内容和用于那个节点的最近的事务提交序列号。当档案节点接收到那个串行消息 时,它在将消息(即,原子)的剩余内容置于永久存储器中之前将该消息去串行化,去除节点 列表和提交序列号。
多个规则适用于根据本发明的原子。那些规则的原因和暗示将变得更清楚。首先, 每一个原子必须具有唯一标识,以在图1中的数据库处理网络30中的任何位置提供那个原 子的可靠标识。其次,任何原子必须同时存在于两个节点中以维持冗余,除了单个原子在创 建单个原子后并且在档案节点已经请求副本之前可以存在。第三,事务节点将仅按需来安 装原子。第四,每次对于在一个节点中的原子进行改变时,那个节点必须在“对等”的基础 上复制那个改变的原子;即,向所有的档案节点和仅包含那同一原子的那些事务节点复制 那个改变的原子。
可以在档案和事务节点上出现下面更详细地描述的“垃圾收集”处理。该处理从事 务和档案节点去除不活动的原子,结果,事务节点可以在那个节点处的随机存取存储器中存储当前与用户应用相关的那些原子。因此,数据库请求引擎41将整个数据库“看作”局 部的,并且不知道它在多节点环境中操作,并且没有在其节点处的数据库的完整副本。档案 节点具有在原子已经被串行化到盘后清除原子的内容的选项,由此减小存储所需的存储器 的大小。如果档案节点从这样的原子接收复制消息,则档案节点必须从盘存储器获取内容, 然后应用被复制的来自原子的信息。
在该一般背景下,现在将在“逻辑”或功能级上描述每一个原子类型。该信息与本 发明的操作的进一步的讨论相结合地将使得本领域内的普通技术人员能够以多种实现方 式的任何一种来制造和使用本发明,所述实现方式包括基于面向对象的编程的实现方式。
图4A和4B描述了数据库引擎41和在任何给定时间可以驻留在事务节点32中的 典型的原子集。在该示例中,事务节点托管主目录原子70、事务管理器原子71、数据库原子 72、图式原子73、表格原子74和表格目录原子75。每一个数据库仅有一个主目录原子70、 一个事务管理器原子71和一个数据库原子72。当数据库请求引擎41创建新的数据库时, 创建事务管理器原子71、数据库原子72和图式原子73。
参见图4A,主目录原子70跟踪在图1的数据库系统30中的事务和档案节点的状 态。它也可以被看作活动索引,该活动索引创建和监视事务管理器原子71、数据库原子72、 每一个图式原子73、每一个对应的集的表格原子74和表格目录原子75与序列ID管理器 82。
表格目录原子75充当活动索引,并且创建和监视与单个表格相关联的索引原子 76、记录状态原子77、数据原子78、大二进制对象状态原子80和大二进制对象原子81。也 就是,每一个表格有一个表格目录原子75。
图4B对理解不同的原子类型的交互和管理有用。在该上下文中,主目录原子70 和表格目录原子75都不执行任何管理功能。相对于剩余的原子,主目录原子70管理每一 个图式原子73。每一个图式原子73管理每一个相关的表格原子74和序列ID管理器82。 每一个表格原子74管理其对应的表格目录原子75、索引原子76、记录状态原子77、数据原 子78、大二进制对象状态原子80和大二进制对象原子81。
仍然参见图4B,数据库请求引擎41与主目录原子70、事务管理器原子71、数据库 原子72、每一个图式原子73、每一个表格原子74和序列ID管理器82进行通信。数据库请 求引擎41充当用于诸如SQL的高级语言的编译器。作为编译器,它解析、编译和优化查询, 并且从原子获得元数据和数据以形成数据库信息的各个片断。
每一个原子具有特定的公共元素和对于其类型特定的其他元素。参见图5,主目录 原子70包括公共元素70A至701。元素70A是原子的唯一标识。因为仅存在向所有节点复 制的主目录原子的一个实例,所以主目录原子ID 70A被给出固定编号,通常为“I”。作为一 般规则,指针70B和70C分别识别主目录原子和创建目录原子。对于主目录原子,两个指针 识别主目录原子本身。
每个原子必须具有主席。主席执行如下所述的功能。元素70D是指向其中那个原 子的主席所驻留的那个节点的指针。
每次在任何事务节点改变原子的副本时,它接收新的改变编号。元素70E记录那 个改变编号。
每当一个节点从另一个节点请求原子时,存在间隔,在该时间间隔期间,请求的节点将不被其他事务节点知道。元素70F是所有节点的列表,对于该所有节点,供应节点必须向请求的节点中继来自包含那个原子的所有其他节点的消息,直到完成了请求。
数据库系统的操作也被划分为循环。循环参考元素70G提供对原子的最后访问的循环数。元素70H是包含该原子的所有活动节点的列表。元素701包括几个状态指示符。
仍然参见图5,全局节点IDS条目70J包含ID管理器,用于对于在系统中的每一个活动节点分配唯一的标识符。如所知,这样的标识符是长的字符串。局部节点IDS条目 70K包括多达可以附到系统的节点的总数的数的范围。这些条目一起提供了在两种类型的标识之间的对应性。局部节点IDS的使用提高了效率。
当事务节点加入在图1中的数据库系统30时,连接管理器70L实行那个处理。下面描述用于使得事务节点能够加入数据库系统的特定实现方式。加入节点使用待决节点状态条目70M来指示它没有用于响应节点的全局地址,直到它从那个响应节点接收到进一步的通信。数据库冊1条目70Ν包含数据库的通用唯一标识。
在70Ρ处的条目是重要的,因为它们链接所有的原子,对于该所有的原子,主目录原子70充当活动索引。如前所述,这些包括数据库原子72与图式原子73、表格原子74和表格目录原子75中的每一个。
密码条目70Q表示用于认证向数据库内的连接的装置。实际和软件版本 条目70R 和70S允许系统当安装软件的较新版本时以反向兼容来操作。实际软件条目70R识别当时在使用中的软件版本;软件版本条目70S,与最近安装的版本相对应的数。这允许各个节点被更新到较新的版本,而不需要更新其他节点,并且不关闭由所有节点访问的数据库。
仍然参见图5,主目录原子70也包括指向事务管理器原子71的指针70Τ、指向配置对象的指针70U、指向垃圾收集线程的指针70V和指向ping线程的指针701 ping线程定期地并且独立于在节点处的其他操作进行操作。它“ping”每一个节点,以提供可以在对应的路径的通信效率的确定中使用的信息。例如,如果在图1中的节点NI具有与节点N2 或N5进行通信的选项,则节点NI可以在用于那个通信的到节点N2和N5的通信路径的最有效的选择中使用Ping信息。也可以替代或添加其他选择处理。
参见图6,对于每一个数据库存在一个事务管理器原子71,并且在创建主目录原子70的同一处理期间创建它。事务管理器原子71响应于来自数据库请求引擎41的数据库命令来创建、跟踪和结束数据库事务。事务管理器原子71包括与在主目录原子中的相似元素对应的元素71A-71I。然而,元素71A是事务管理器原子71的标识。元素71B和71C 都指向主目录原子70。
ID管理器71J提供了唯一的事务序列标识,并且维持活动事务列表71K、提交的事务列表71L和失败的事务列表71M。元素71N存储提交序列信息。ID管理器71J在每一个事务的开始处分配事务ID。每一个事务ID是唯一的,但是不必要的依序的。局部事务管理器原子当事务提交时向元素71N分配提交序列号。序列号是依序的,并且每一个特定于请求事务的节点。事务过渡事件计数器71P识别在每一个事务期间出现的离散事件,诸如事务的开始和事务的成功提交。这样的计数器当涉及同一信息的多个事务重叠时是有用的。
参见图7,在创建主目录原子70和事务管理器原子71的同时创建数据库原子72。 数据库原子72识别图式原子73中的每一个。数据库原子72可以涉及当新的用户试图加入数据库时的认证处理。它也可以包括关于授权级的其他数据。
一般,数据库原子72包括与在图5中的类似元素相对应的元素72A-72I。元素72A 是数据库原子标识。指针72B和72C中的每个识别主目录原子70。图式名称-图式ID注 册表72J将图式名称与图式原子标识相关。
参见图8,图式原子73创建和跟踪用于那个图式的表格原子。数据库原子72可以 管理多个图式原子,并且每一个图式原子可以与多个表格原子交互。图式原子73包括与在 图5中的元素70A-70I相对应的元素73A-73I。元素73A是唯一图式原子标识73A,并且元 素73B和73C是指向主目录原子70的指针。表格在图式中具有唯一名称。表格名称-表 格原子ID注册表73J提供了在每一个表格名称和对应的表格原子之间的对应性。每一个 图式序列具有名称。序列名称-序列ID管理器注册表73K提供了在那些名称和诸如在图 4A和4B中的序列ID管理器82的、与每一个图式原子相关联的对应的序列ID管理器之间 的关系。
图9提供了包含与字段、格式、索引和类型相关的元数据并且管理那个表格的索 引原子76、记录状态原子77和大二进制对象状态原子80中的每一个的表格原子74的逻辑 视图。它也创建和跟踪在表格内的数据。表格原子74包括与在图5中的元素70A-70I相 对应的元素74A-74I。元素74A包括唯一表格原子标识、元素74B和74C两者指向主目录原 子。指针74J识别对应的表格目录原子。元素74K包含表格的所有字段的列表。
每一个表格原子具有几个ID管理器。指针74L指向ID管理器,该管理器向每个字 段提供了唯一的标识。指针74M、74N、74P和74Q识别用于分别向索引原子、数据原子、大二 进制对象原子和子类型分配标识的独立的ID管理器。元素74R是现有子类型的列表。阵 列74S和74T分别提供了记录状态原子和大二进制对象状态的位置。
现在参见图10,对于每一个表格原子有一个表格目录原子。当创建表格原子时创 建每一个表格目录原子75。继而,表格目录原子创建和跟踪特定于包括索引、记录状态、数 据、大二进制对象状态和大二进制对象原子的一个表格的原子。每一个表格目录原子75包 括与在图6中的元素70A-70I对应的元素75A-75I。元素75A是如由主目录原子分配的唯 一表格目录原子标识。两个元素75B和75C指向主目录原子70。ID管理器75J提供用于索 引、记录状态、数据、大二进制对象状态和大二进制对象原子中的每一个的唯一原子标识。 列表75K识别与对应的表格原子相关联的所有原子。在元素75L中的指针识别与对应的表 格原子相关联的局部节点处的每一个原子的位置。一系列列表75M对于每一个原子识别具 有那个原子的复制的节点的列表。位图75N提供了用于当原子在档案节点中时识别其他对 象和目录的方便手段。
参见图11,在表格中的每一个索引有一个索引原子76,并且每个表格可以有多个 索引原子。每一个索引原子包括分别与在图5中的元素70A-70I对应的元素76A-76I。元 素76A是如由对应的表格目录原子分配的唯一索引原子标识。指针76B和76C分别识别主 目录原子和表格目录原子。元素76J包含索引节点的二进制树,以提供传统的索引化功能。 元素76K包含索引级。这样的索引结构和操作是本领域内的技术人员已知的。
返回图12,记录状态原子77管理用于在单个表格内的固定范围的记录编号的记 录版本和状态。因此,给定的表格原子可以管理多个记录状态原子。每一个记录状态原子 包括与在图5中的元素70A-70I对应的元素77A-77I。元素77A包括创建表格目录原子分 配的记录状态原子ID。指针77B和77C分别识别主目录和表格目录原子。元素77J是用于定位由记录状态原子77管理的所有数据原子的阵列。元素77K包含用于“基本记录”的记录编号。也就是,每一个数据原子存储多个记录。元素77是指向对应的表格原子的指针。
在本发明针对的数据库应用中,多个用户可以产生同一记录的多个版本。本发明的优选实施例使用多版本并发控制(MVCC)以通过下述方式来保证事务从不必须等待数据库允许记录或其他对象的几个版本同时存在于数据库中。结果,每一个记录状态原子77 包括关于每一个记录版本的元数据。条目77M是用于识别在垃圾收集中有用的每一个有版本的记录的位置的位图。
记录状态原子77对于记录的每一个版本77N包括事务ID 77P,以识别生成版本的事务。格式版本条目77Q识别当插入记录时存在的表格子类型的版本编号。这个格式识别记录的物理顺序,并且识别在创建记录版本时在使用中的数据库程序的、记录所属的子类型。元素77R包括记录版本序列号;元素77S,记录的下一个更旧的或前一个版本的位置。 对于数据原子阵列77J的索引77T和基本记录标识77K—起提供了在具有记录版本的数据原子中的实际时隙77U的地址。
图13描述了具有与在图5中的元素70A-70I对应的元素78A-78I的数据原子78。 在数据原子78中,元素78A是由表格目录原子分配的数据原子标识78A。元素78B和78C 分别是指向主目录原子和指向对应的表格目录原子的指针。ID管理器78J对于在数据原子 78中的每一个记录分配记录时隙标识。元素78K对于在数据原子78中的每一个记录识别那个记录的地址和长度。元素78C表示数据记录和其版本。
现在,参见图14,数据库也存储“大二进制对象记录”。“大二进制对象记录”通常是在数据库中作为单个实体存储的二进制数据的集合。大二进制对象记录在版本中不存在。 大二进制对象状态原子包括与在图5中的元素70A-70I对应的元素80A-80I。元素80A具有大二进制对象状态原子唯一原子标识。元素80B和80C分别是指向主目录和表格目录原子的指针。列表80J识别由单个大二进制对象状态原子80管理的所有大二进制对象原子。 条目80K提供了基本大_■进制对象记录的标识。兀素80L指向对应的表格原子。对于每一个大二进制对象记录,大二进制对象状态原子包括对于大二进制对象原子的索引80M。元素 80N识别在用于大二进制对象记录的大二进制对象原子中的时隙。
图15描述了具有分别与在图5中的元素70A-70I对应的元素81A-81I的大二进制对象原子81。元素81A是由表格目录原子分配的原子标识。元素81B和81C分别是指向主目录原子和对应的表格目录原子的指针。ID管理器81J向在大二进制对象原子81中的每一个大二进制对象分配大二进制对象时隙标识。元素81K对于在大二进制对象原子78 中的每一个大二进制对象识别其地址和长度。元素81L表示向大二进制对象原子分配的所有大二进制对象记录。
总之,每一个原子具有仅与数据库的片断的关系。例如,数据库原子72包含识别用于数据库的图式的元数据。每一个图式原子73包含识别与那个图式相关联的所有表格的元数据。对于每一个表格,表格原子74和对应的表格目录原子75提供了关于包含诸如字段和它们的属性的标识的信息的表格的元数据。记录状态原子包括关于一组记录的元数据。数据原子包括关于每一个数据记录的信息,该每一个数据记录具有指向包含这些记录和各个版本的时隙的指针。大二进制对象状态和大二进制对象原子包含关于大二进制对象记录的类似的信息。
消息
如前所述,在任何两个节点之间的通信是借助于串行化的消息,该串行化的消息是使用TCP或具有用于维持消息传送序列的控制的另一个协议来异步地发送的。图16描述了包括可变长度报头91和可变长度主体92的典型消息90的基本句法。报头91包括指定消息和其功能的消息标识符代码93。因为本发明设想不同的节点可以使用不同的软件版本来操作的情况,所以报头91也包括创建该消息的软件版本的标识94。在报头中剩余的元素包括发送者的局部标识95 (即,来自在图5中的主目录原子)和消息的目的地,S卩,目录原子的信息96 (例如,在图10中的表格目录ID 75A)和原子标识97 (例如,在图12中的记录状态ID 77A)。从这个信息,接收方节点可以去串行化、解码和处理该消息。
图17描述了用于本发明的特定实施例的具有图16的句法的消息集。每一个执行现在将描述的特定功能。
如前简述,当要发送消息时,存在到不同节点的不同通信路径。例如,如果作为请求节点的一个节点需要获得原子,则那个原子的复制可以位于多个其他节点中。在这个实施例中,“pinging”提供了对选择最佳路径对应节点有用的选择信息。如已知,pinging包括确定“ping”命令到达其目的地和接收到确认消息的时间。在本发明的这个实施例中,每一个节点定期地使用助手类来向它连接到的其他节点的每一个发送ping消息110。每个接收节点使用助手类来返回包含ping时间的ping确认消息111。每个节点在相对于图8下述的节点对象中累积关于发送和接收这些消息的时间的这个信息。当一个节点准备向多个节点之一发送消息时,发送节点分析包括但是不限于所累积的Ping数据的因素,以将节点之一选择为用于那个消息的接收节点。
下一个消息集涉及将新的节点连接到在图1中的数据库系统30内或将先前的不活动节点连接回在图1中的数据库系统30内。当例如事务节点N2的这样的节点希望连接到数据库系统30时,它启动下面相对于图19详细描述的连接处理。参见图17,一旦那个处理识 别了用于接收消息的活动节点,则加入节点向所选择的节点发送连接消息112。所选择的节点向在数据库系统30中的所有其他连接的节点返回欢迎消息113和新节点消息114。 其他连接的节点中的每一个向加入节点发送其本身的欢迎消息113。当这个消息序列完成时,加入的节点然后可以进行进一步的步骤以获得各种原子。
档案节点可以当它们与另一个节点同步时在活动模式或同步模式中操作。在档案节点中的助手类发送节点状态消息115,以向所有其他节点警告在那个档案节点中的任何状态改变。
当作为请求节点的节点从另一个节点检索原子的副本时,涉及下一个消息集。例如,在节点加入在图1中的数据库系统30后,它一般请求主目录原子的副本。结合图20和 21的解释更详细地描述了该处理。
仍然参见图17,请求节点向选择的节点发出对象请求消息116,该选择的节点通常返回具有请求的原子的对象消息117。所选择的节点还向具有该原子的所有其他节点发送对象可用消息118。从所选择的节点接收对象可用消息118的每一个节点向所选择的节点返回对象确认消息119。在所选择的节点接收到所有的对象确认消息119后,所选择的节点向请求节点发送对象完成消息120。
在一些情况下,所选择的节点发送对象不可用消息121以声明所选择的节点已经丢弃了所请求的原子。来自所选择的节点的弹回对象消息指示在主目录原子或表格目录原 子之一中未找到所请求的原子。这可能出现在当更新事务在进行中并且所选择的节点不响 应于对象请求消息116时,因为垃圾收集处理已经在接收到对象请求消息前收集了那个原 子。作为响应,请求的事务节点可以在具有该原子的数据库系统中选择另一个节点。
在图1和图4A和4B中的数据库请求引擎41可以定期地生成注册对象消息123 或解除注册对象消息124。这些消息针对包括注册表的原子,诸如数据库和图式原子。当在 节点处的用户发出删除诸如表格的某个项目的命令时,从那个节点发送对象删除消息125。
每当更新或修改局部节点时,其改变编号递增。每一个复制消息包含那个原子的 本地改变编号。每一个原子跟踪每一个节点的最新的改变编号。当档案节点接收到修改的 原子的副本时,它复制原子的改变编号,清除改变编号,然后将原子串行化到盘。如果已经 进行了改变,则改变编号将不是零。档案节点发送具有向每一个节点写入的改变编号的对 象写入消息126。每一个接收节点将其自己的改变编号与该消息中的改变编号进行比较。 然后,该节点可以更新原子的状态以注意原子已经被归档并且是垃圾收集的潜在候选者。
如前所示,每一个原子必须具有唯一的身份。当创建特定原子类型的第一原子(例 如,新的表格原子)时,将创建事务节点指定为那个表格原子的主席。下面说明用于控制“主 席身份”的规则。每当事务节点需要创建新的原子类型时,如果它没有可用的标识,则它向 主席发送ID请求消息127。主席通常返回ID委托消息128,该消息包括来自其自由标识值 的分配的至少一个唯一标识的块。将相对于图20的处理来更详细地描述这个处理。
参见图4A和4B,表格原子74可以发送多个消息的任何一个。如果数据库请求引 擎41启动用于添加新的字段的处理,则在那个对应的事务节点的表格原子生成新的结构, 并且发送表格字段添加消息129,该表格字段添加消息129向包括那个表格原子的所有其 他节点复制该改变。如果事务节点更新了改变表格格式的字段、子类型或字段特性,则那个 节点发出表格格式消息130。每当节点需要创建新的记录状态或大二进制对象状态原子时, 生成表格请求记录消息131。仅主席可以创建这个原子;并且,当这种情况出现时,主席广 播表格记录对象消息132。
每次事务节点在表格中插入新的记录时,它产生表格记录消息133。每当变得需要 创建新的索引时,如当向表格添加有索引的字段时那样,创建表格原子复制新的表格原子。 此时,将索引设置为仅写入索引。在已经完成了所涉及的所有相关处理后,节点发送表格索 引添加消息134。
在表格原子创建用于大二进制对象的大二进制对象状态原子的任何时间,表格原 子生成表格大二进制对象对象消息135。表格大二进制对象消息136指示已经创建了新的 大二进制对象。
在利用类型和子类型的数据库中,在图1中的数据库请求引擎41将生成用于使得 表格原子分配新的表格类型标识的命令。当这种情况出现时,向具有相似的表格原子的所 有节点复制表格类型消息137。
表格记录擦除消息138提供了关于特定记录状态原子的记录编号。当确定在那个 表格内的记录包含反向版本或其他准则的异常地长的链时,表格原子的主席生成表格垃圾 收集消息139。结果是“未使用的”原子被“清空”数据。
在图4A和4B中的记录状态原子77也产生了几个特殊的消息。如果变得需要更新特定记录,则本发明的数据库管理系统创建那个记录的新版本。向回参见图17,对应的记 录状态原子生成记录更新请求消息140,记录更新请求消息140被引导到那个原子的主席, 以寻求更新那个特定记录的许可。主席通过生成记录更新响应消息141来响应,记录更新 响应消息141准许或拒绝对于更新那个记录的许可。如果主席准许许可,则请求记录状态 原子执行更新,并且向具有那个原子的副本的每一个节点发送具有该原子的新版本的记录 更新消息142。
数据原子存储多达某个最大数量的记录和其版本。对应的记录状态原子监视它管 理的数据原子的大小。如果记录状态原子确定被管理的数据原子已经超过那个大小,则它 生成新的数据原子,并且借助于记录数据对象消息143来复制该新的数据原子。
记录状态原子生成记录记录消息144,用于复制任何新的记录版本。定期地,表格 原子主席启动下述处理,通过该处理,记录状态原子识别比最旧的活动事务更旧的记录版 本。当这种情况出现时,主席的记录状态原子发送记录删除消息145,记录删除消息145使 得能够在随后的垃圾收集处理期间删除那些更旧的记录版本。如果出现其中变得需要恢复 事务的情况,则记录状态原子生成更新撤消记录的撤消记录消息146。
也存在索引特定的消息集。如所知,索引具有最佳的最大大小;并且,如果索引超 过那个大小,则索引应当被分割。根据本发明,仅主席可以分割索引原子。主席可以单方面 地或响应于来自那个原子的另一个副本的索引分割请求消息147而如此进行。当主席引起 该分割时,主席生成包含分割索引的索引分割消息148。在该分割后,主席发送索引删除消 息149,以在分割后删截原始索引原子。每次向索引添加索引节点时,它生成包含索引键、记 录标识和新的索引的其他信息的索引节点添加消息。当已经完全填充索引并且因此索引准 备好在检索操作期间使用时,生成表格索引就绪消息151。如前所示,添加表格索引生成索 引原子,它是仅写入索引并且是不可读的。表格索引就绪消息151使得这样的仅写入索引 是可读的。
大二进制对象状态原子通过生成大二进制对象大二进制对象消息152来在大二 进制对象原子中识别时隙。
数据记录消息153包含时隙编号和记录长度。它也包括数据记录。
当事务的状态改变时,用于给定的事务节点的事务管理器原子71生成事务状态 消息154。这些指示事务的当前状态是在活动状态、提交前状态、提交状态还是恢复状态中。 在特定的情况下,有可能与一个事务相关的请求将被在另一个节点上的另一个事务阻挡。 在那种情况下,事务管理器原子接收事务阻挡消息155。如果事务被僵持并且必须被恢复, 则与引起僵持的节点相关联的事务管理器原子生成事务僵持消息156,该消息使得事务恢 复。
在档案节点上的主目录或任何表格目录原子可以请求最后写入原子的时间。这出 现在当请求节点发送请求写入时间消息158时。然后,那个消息的接收方在写入时间消息 159中返回那些请求的时间。
前述的消息构成一个集,通过该集,可以正确地处理用于维持包含本公开的数据 库管理系统所需的各种过程。如将显而易见的,每一个消息具有在报头中的最小开销。每 一个消息可以合理地短。当与TCP或其他消息传送协议一起使用时,必须依序发送所述消 息,并且在任何给定的节点,在接收到时,必须以其中它们甚至被不同的节点发送的相同顺序来处理它们。
方法
其将对进一步理解描述与本发明的操作的各个方面相关的一些基本方法的本发 明有用。相对于每一个的变化对于本领域内的普通技术人员将是显而易见的。
图18是当节点加入网络时在图1的数据库系统30中的不同节点中出现的操作的 流程图。为了本说明的目的,假定在图1中的节点5要加入数据库系统;它被指定为加入的 事务节点170。作为第一处理,加入的事务节点170使用步骤171来与选择的节点建立TPC 连接。基本上,加入的事务节点170向识别数据库的固定位置发送消息。未示出但是在本 领域中已知的连接代理通过拒绝或许可对于数据库系统的访问来响应于这个请求。如果连 接代理许可访问,则它选择诸如事务节点NI的节点来作为选择的节点172。然后,连接代理 向具有选择的节点172的、作为端口编号的指定的加入的事务节点170发送消息。图18也 将在数据库系统中的所有其他活动事务和档案节点表示为组173。
一旦在步骤171中建立了连接,则加入的事务节点170使用步骤174来向所选择 的节点172发送连接消息。所选择的节点172通过下述方式来在步骤175响应于连接消 息使用其连接管理器来更新其主目录原子,向加入的事务节点170分配局部节点ID,并且 向在其节点对象中的局部节点的阵列增加那个节点,在图19中示出一个示例。
图19描述了诸如结合图18的步骤175描述的节点对象。它包含指向用于节点的 套接字的指针400A和指向在该节点处的主目录原子的指针400B和指向在主目录原子中的 连接管理器的指针400C。指针400D识别用于收听进入的消息的线程,并且指针400E识别 用于接收消息的套接字缓冲器。该消息收听者等待消息,确定消息类型,然后处理该消息至 完成。
节点对象400如所有的原子那样包括这个节点在收听的节点的全局节点ID 400F 和局部节点ID 400G。元素400H是指向等待要从节点发送的消息的队列的指针。元素4001 和400J包含局部端口和远程端口的标识。元素400K包含用于在远程节点处操作的软件的 版本编号。节点类型元素400L指示远程节点是事务节点、进行同步处理的档案节点还是在 线的档案节点。
元素400M包含局部节点的名称;元素400N包含远程节点的名称。元素400P是指 向被处理的当前消息的指针。元素400Q和400R识别最后ping操作的时间和ping时间。 如前所示,每一个节点响应于用于在那个节点处启动的事务的每一个提交操作来生成依序 提交序列号。元素400S包含这个编号。元素400T指示这个节点对象是否是用于这个节点 的节点对象。
向回参见图18,在步骤176处,所选择的节点172向包含全局节点ID的加入的事 务节点170发送欢迎消息。然后,所选择的节点在步骤177中向所有其他事务和档案节点 的组173广播新的节点消息。
在组173中的每一个节点在步骤180通过下述方式来响应于新的节点消息记录 全局ID,并且分配加入的档案节点的局部ID,并且更新在它们相应的主目录原子中的所有 连接的节点的局部列表。每一个然后使用步骤181来向加入的事务节点170发送欢迎消息。 在完成这个处理时,加入的事务节点170具有包括所选择的节点172和在组173中的所有 节点的所有活动节点的完全列表。
当加入的事务节点170在步骤182从所选择的节点接收欢迎消息时,它向所选择 的节点172发送对象请求消息(步骤183),以请求主目录原子的副本。在所选择的节点172 已经更新了在其主目录原子中的各个信息项后,所选择的节点实现步骤184,以串行化在被 发送到加入的事务节点170的对象消息中的其主目录原子,并且向在系统中的所有其他节 点广播对象可用消息。因此,更新和同步在每一个节点中的主目录原子。
不用等待对象消息的接收,加入的事务节点也可以开始步骤185的处理,用于从 所选择的节点172检索数据库原子和事务管理器原子的副本。
接收对象可用消息的每一个其他节点在步骤186中通过向所选择的节点发回对 象确认消息来响应。
在加入节点中的数据库请求引擎启动这个序列。因此,当已经完成图18的方法 时,加入的事务节点170连接到数据库系统,并且如图4A和4B中所示,包括主目录原子70、 事务管理器原子71和数据库原子72的副本。加入的事务节点170其后将在按需的基础上 创建或获得其他原子的副本。
在一些操作期间,事务节点可能创建新的表格,使得新的表格原子的创建成为必 要。图20公开了处理190,其中,节点A是请求节点,原子X是请求并且将管理新的原子Y 的原子。为了创建新的表格原子Y,原子X将是图式原子,并且局部目录Z将是主目录原子。 步骤191表示用于获得原子Y的实例的请求的准备功能。每次改变原子时,它被分配改变 编号;初始值通常是“O”。
在步骤192,局部目录Z创建没有内容的原子Y的实例,并且将局部节点指定为原 子Y的主席。然后,处理193允许本地目录Z向新的原子Y分配对象ID。相对于图21示出 和描述了这样的处理的细节。
接下来,局部目录Z设置排他锁定,以允许对于它的改变出现,而没有来自外部自 动化的任何影响。当该锁定在位时,局部目录Z将新原子Y的状态设置为“肮脏”状态和“非 开放”状态。“肮脏”状态指示新的原子Y还没有被复制到档案。“非开放”状态指示新原子 Y对于其他节点还不可用。在步骤195处,局部目录Z更新其本身,然后释放该排他锁定。 在步骤196处,目录Z向在事务和档案节点中的目录Z的所有其他实例广播用于识别原子 Y的对象可用消息。
在步骤197,作为用于新的原子Y的管理原子的原子X填充原子Y的实例,并且将 原子Y的状态设置为“开放”,用于指示可以复制该新的原子。其后的某个时间,档案节点将 向永久存储器存储该新原子的副本。也就是,档案节点将通过下述方式来响应于对象可用 消息的接收请求原子Y的副本,由此提供冗余。当此完成时,来自档案节点的对象确认消 息的接收将使得“肮脏”状态改变,并且这个改变然后被反映到具有原子Y的副本的所有其 他节点。
在用于分配对象ID的本发明的操作的各个阶段中使用在图20中的分配处理193 和相似的分配处理。图21更详细地描述了这个分配处理。具体地说,当目录原子想要分配 对象ID时,在步骤200确定它是否具有对于它可用的局部ID。如果它具有,则控制转到步 骤201,该步骤响应于请求而分配可用ID。如果局部ID不可用,则控制转到步骤202,以确 定在这个节点处的目录原子是否具有“主席”状态。如果是,则主席具有用于直接地识别可 用ID的授权,并且控制转到步骤201。
如将想起的,当对于特定原子存在至少一个其他节点时,每一个原子包含包括正 被请求的原子的副本的节点的列表。如果这是在已经根据图20的处理而创建了原子后对 于那个原子的第一请求,则在列表上的第一节点中的对应的目录是主席。步骤203表示选 择节点和识别主席的处理。对于该选择处理,优选的是,首先与事务节点建立通信。步骤 204表示ID请求消息向主席的发送。
当主席在步骤205接收到ID请求消息时,它获得可用ID编号的块(步骤206)。主 席将作出该请求的事务节点识别为可用ID编号的这个块的地点(步骤207)。然后,主席在 步骤210向请求的节点发送ID委托消息。当请求的节点在步骤211从主席接收到ID委托 消息时,它在步骤212存储ID编号的块,然后在步骤201中选择用于分配的第一可用ID。 向回参见图20,在该情况下,处理193从步骤200至步骤202直接地转到步骤201,因为在 图20的步骤192中指定了主席。
每当在图4A和4B中的数据库引擎41作出对于原子的请求时,处理在图22中的 响应220。例如,假定在请求节点221中的数据库请求引擎41从具有其他节点223的数据 库中的选择的节点222请求原子Y (例如,表格原子)的副本。当数据库请求引擎41作出那 个要求时,步骤224确定是否在请求节点221中存在原子Y。如果是,则步骤225结束该处 理,因为存在被请求的原子。如果否,则控制转到步骤226,据此,局部目录Z创建原子Y的 空实例,并且将原子Y声明为“未填充”。如果数据库引擎41正请求表格原子74,则主目录 原子70将执行这个步骤。步骤230然后使用前述的选择处理来识别选择的节点222。偏好 是在将最具响应性的档案节点选择为选择的节点222之前选择事务节点中的任何一个。
在步骤231中,请求节点221向所选择的节点222发送用于原子Y的对象请求消 息。作为响应,所选择的节点222使用步骤232来以具有节点和序列号的其串行化形式来 发送具有被请求的原子Y的对象消息。
同时,所选择的节点222向所有其他节点223广播对象可用消息。它也对于具有 原子Y的副本的所有其他节点创建中继器列表。在处理中的该点处,其他节点不与在请求 节点中的原子Y直接地进行通信,因为它们不知道它们应当向请求节点发送用于那个原子 的复制消息。因此,当其他节点中的任何一个复制其原子Y时,所选择的节点222将向请求 节点221中继该消息。
当请求节点221从所选择的节点222接收到对象消息时,它在步骤233进行消息 的可访问性分析。如果消息包含当前的原子,则原子Y在步骤236处理该消息,并且在步骤 237向所选择的节点发送对象确认消息。
所有其他节点223使用步骤240来通过向所选择的节点222发送对象确认消息而 响应于对象可用消息。所选择的节点222使用步骤241来监视该对象确认消息。具体地说, 它响应于每一个对象确认消息而从其中继器列表去除其他节点中的每一个,并且停止向那 个节点的中继。当已经从列表去除了所有其他接收223时,所选择的节点停止所有的中继, 并且广播对象完成消息。
另一个节点有可能在图22中的步骤226和236之间的时间期间发送到达请求节 点221的复制消息。这可以中断消息处理。结果,当在未填充原子Y的同时在请求节点处 接收到在上面的实例中的用于原子Y的复制消息时,它被置于作为每一个原子的一部分的 待决消息列表中,虽然在图5至13的任何一个中未不出。
如前所示,本发明特别适于与事务处理技术对接的数据库。就此而论,应当包含用于“提交”消息的适当手段。图23描述了保证在这样的环境中的数据的一致性的一种手段。 具体地说,图23描述了四个节点,S卩事务节点A 250、事务节点B 251、事务节点C 252和档案节点253。假定事务节点B251在步骤254发送具有由在那个节点的事务管理器原子供应的事务ID的提交前消息。该消息在步骤255被路由到档案节点。当已经完成用于提交那个事务的所有条件时,档案节点255在步骤256发出提交事务消息,并且在步骤257,广播那个提交消息。事务节点的每一个在步骤258作为响应来更新其对应的事务编号。
如先前相对于在图21中的用于请求原子的副本的处理所描述的,请求的节点在步骤233对于任何接收到的消息执行访问性分析。这个测试提供了任何事务节点总是用有效的信息来操作的保证,并且涉及事务ID编号和提交序列号的分析。通过进一步理解事务 ID和提交序列号,通过分析事务的相对顺序以及通过理解“原子偏斜”,将便利这个分析和本发明的其他特征的理解。
相对于事务ID和提交序列号,并且如前所述,每一个事务标识符在图1的整个数据库系统上是唯一的。事务ID的目的是唯一的、永久的、系统范围的标记,用于指示哪个事务创建了特定的记录版本。每一个事务ID被事务管理器原子71的局部副本分配,并且一个这样的事务管理器原子将是主席,该主席向在数据库系统中的每一个事务节点上的事务管理器原子分配标识符编号的块。在给定的事务节点处的事务管理器原子按顺序向那个接收开始的每一个事务分配在分配的块中的未使用的编号。结果,在给定节点处开始的较新的事务的事务ID可以比向在那同一节点上开始的更旧的事务分配的事务ID更高。然而, 在系统范围的基础上,事务ID不暗示关于不同事务的相对开始时间的任何内容。
结果,必须提供某种方法来保证只有在读取事务开始之前已经提交了创建记录版本的事务时,事务才可以读取该记录版本。在本发明中,用于确定要读取哪个记录版本的这样的方法是用于创建记录版本的事务的事务提交时间,而不是开 始时间。事务ID不包含其提交时间,因此在每一个节点上的事务管理器原子基于实际提交操作来向每一个事务分配提交序列号。每一个事务节点以增大的序列来生成其提交序列号。如果来自给定节点的事务具有提交序列号467,则来自具有较低的提交序列号的节点的所有事务确信已经被提交。所有节点生成相同的提交序列号,因此解译该编号需要对应的节点的编号和标识。
当事务提交时,其事务管理器原子向包括对应的事务ID和提交序列号的所有节点发送提交消息。当原子串行化其本身时,它包括它已经从拥有那个原子的副本的每一个节点看到的最高的提交序列号。例如,假定节点A、B和C包含原子Z的副本并且那个节点 A生成用于原子Z的对象消息。那个消息的串行化形式将包括节点A已经从其本身看到的最闻提交序列号和它已经从节点B和C看到的最闻的提交序列号。来自节点A的串行化的消息描述了当节点A看到共享原子Y的副本的所有节点时在该所有节点上的事务的状态。 有可能节点B或节点C可以实际上已经发出了用于节点A还没有接收或处理的事务的较高的提交序列号。
在每一个节点上的事务管理器在数据库系统中维持每一个节点的事务对象。每一个事务对象反映在所有节点上的事务的状态,并且向每一个对象分配局部的和连续的增大的两个或更多的编号。当事务管理器原子开始事务或接收到指示另一个节点已经开始事务的事务过渡消息时,事务管理器原子创建具有新的事务ID的局部事务对象,并且向其分配开始编号。当局部事务提交时或当事务管理器原子接收到指示已经提交了在另一个节点上 的事务的事务过渡消息时,与提交序列号一起向事务对象分配事务结束编号。开始和结束 编号来自同一序列。作为示例,如果事务123具有比事务453的结束编号高的开始编号,则 事务123可以从执行事务453的任何节点读取由事务453创建的记录版本。
事务开始和结束编号是局部的;也就是,它们反映如在局部节点上看到的事务的 状态。不同的节点分配不同的值,并且看到在其他节点上的事务的不同排序。如将显而易 见的,可以在接收中和在处理事务状态消息中存在延迟。每一个事务仅在其局部的事务节 点上运行。这个数据库系统防止一个事务节点“看到”如在事务在其局部事务节点上提交 之前提交的事务。例如,如果节点A在从用于事务453的事务节点B接收和处理提交消息 之后开始事务123,则事务123可以从事务453读取改变,即使接收到事务的事务节点C以 另一个顺序提交和开始消息并且将两个事务看作同时期的。
当没有事务在事务节点C上运行时,信息不与事务节点C相关。然而,在每一个单 独事务节点的数据库系统的视图之间的差在特定情况下可能引起问题。
相对于“原子偏斜”,根据本发明的一个方面,每一个节点必须以另一个节点发送 消息的顺序来处理来自该另一个节点的消息。然而,所有节点独立地操作。因此,在任何给 定的时间,一些节点将已经接收和处理了其他节点还没有处理的消息。原子的一些副本将 包括其他副本没有的改变。那些差别不影响具有副本的任何节点,因为原子的每一个副本 处于那个节点的一致状态中。如前所述,每当事务节点改变原子时,该节点向包含那个原子 的副本的所有其他节点复制改变的原子。如果事务节点B和C每一个包含那个原子的副本 并且事务节点B改变那个原子,则事务节点B向事务节点C发送复制消息。在事务节点B 正处理事务的同时,它向事务节点C发送事务状态消息,并且复制事务节点B改变的任何原 子。当事务节点B通过在图23中所示的处理来提交事务时,事务节点C应当已经接收到用 于指示已经提交了事务的事务状态消息。事务节点C将处理与事务相关的所有消息,然后 它因为下述情况而接收提交消息所有的消息将以它们被发送的顺序被处理。在不同的事 务节点上的原子的副本可以不同,但是由在任何事务节点上的事务进行的所有改变将在每 一个其他节点上,然后该其他节点将该事务看作被提交。
当观看来自系统级的事务时,不同的事务节点不同步地行动。单个消息正被不同 节点处理的时间可以因为在通信路径的效率和每一个事务节点需要处理的消息的数量上 的差别而变化。必须考虑在不同节点处的处理时间上的差别。考虑三个事务节点节点A、 节点B和节点C。假定节点B执行改变原子X的事务768并且节点C具有原子X的副本。 假定在节点B处的原子X向节点C发送改变消息,并且在节点C处理那些改变之前有一些 时间过去。也假定节点B已经向事务768分配了提交序列号47。在节点B上的事务管理器 原子向在数据库系统中的所有节点发送事务状态消息。也假定节点A在从节点B接收到提 交消息之后但是在节点C完成处理事务之前从节点C请求原子X的副本。节点A从节点B 接收和处理事务状态消息。从节点A的视角看,事务768被提交,并且用于节点B的最高提 交序列号是47。然而,对于这个定时,从节点C返回的原子不反映由节点B处的事务作出的 改变。
根据本发明,当在节点C上的原子X串行化其本身以发送到节点A时,它包括来自 具有原子X的副本的每一个节点的最高提交序列号。在该情况下,假定消息将包括用于节点C的提交序列号97和用于节点B的提交序列号46。
参见图22,作为请求节点的节点A创建了原子X的空实例,然后向节点C请求其内 容。在图22中的访问性分析获得如节点A看到的每一个节点的当前最高提交序列号。它 也用原子X来扩展串行化的消息,以获得如节点B看到的每一个节点的当前最高提交序列 号。在这个比较中,访问性分析将确定在消息中的串行化的提交序列号是46,而用于B的 其局部最高提交序列号是47。因此,节点B不能使用在其当前状态中的原子X的串行化版 本,并且必须等待在节点C上的原子X以向其发送对象完成消息。如果提交序列号是相同 或更大的,则节点A可以继续处理原子。
如前所述,当节点C向节点A发送原子X的串行化副本时,它发送针对原子X的其 他副本的对象可用消息,在该情况下是针对节点B上的副本的对象可用消息。在节点B上 的原子X向在节点C上的原子X发送对象确认消息,并且向其本身的副本列表添加在节点A 上的副本。其后,在节点B上的原子X将发送针对两个节点A和C上的其副本的改变消息。 同时,在节点C上的原子X处理来自节点B的消息,将它们中继到节点A。在节点A上的原 子X处理消息,使得其本身越来越最新。当在节点C上的原子X处理来自在节点B上的原 子X和在其他节点上的原子X的所有其他副本的对象确认消息时,它发送针对在节点A上 的原子X的对象完成消息。
根据本发明,每一个事务节点应当操作而不必向盘或其他永久存储器传送任何原 子。这要求以迅速的方式从每一个事务节点去除不活动的原子。未了实现这个目标,在每一 个节点中的助手类定期地提供由循环管理器调用的垃圾收集功能,以独立于其他操作而启 动新的垃圾收集循环。更具体地,循环管理器执行老化循环,据此,在前一个循环中参考的 任何原子被移动到在用于那个节点的主目录原子中的最近最少使用(LRU)列表上的前面。 循环管理器获得排他锁定,以保证没有其他的线程相对于前一个循环是活动的。
循环管理器然后开始用于对于记录垃圾收集标记的表格原子的记录垃圾收集线 程。如果在节点处的存储器的当前量超过由在图5处的指针70U识别的配置对象限定的指 定量,则垃圾收集线程处理通过主目录LRU从最近最少使用到最近最多使用的原子进行循 环。如果那个原子(I)不活动,(2)已经在当前的老化循环中被参考,(3)不是“对象不完 成”原子,(4)已经被局部改变并且还没有被写入档案节点,并且(5)是没有存储器驻留原 子的目录,则它将原子分类为垃圾收集候选者的候选者。在档案节点中的原子另外必须还 没有被串行化到盘。
如果垃圾收集处理确定已经满足了所有前述的条件,则存在两个选项。如果节点 是档案节点并且存在在其他节点处的原子的其他实例,则原子的内容被“清除”。否则,请求 原子丢弃其本身,它通过首先查看其创建的目录原子以进行最后测试来如此进行。如果通 过那个测试,则目录原子清除指向向包含候选原子的实例的其他节点广播对象不可用消息 的候选原子的其指针,然后删除其本身。这个循环逐个原子地继续,直到工作存储器在可接 受的限度内。
两种机制涉及这个处理。当请求目录原子找到用于分类的原子时,目录原子将其 循环参考条目设置为当前循环编号。另外,事务管理器、数据库、图式、序列和表格原子在当 前循环上获得共享锁定,使得在那些原子中的方法可以持有原子指针,而不必递增原子使 用计数,以防止对象或原子被垃圾收集。
图19和20描述了 “主席身份”。如图20中所示,当创建原子时,将创建的节点指 定为原子主席,并且建立用于该原子的节点的有序列表。当节点创建原子时,它是在有序列 表中的仅有的条目。在列表中的第一节点是主席。
当另一个节点后来请求那个原子的副本时,所选择的节点将请求节点的标识布置 在该有序列表中刚好在其本身之后,而不论它是否是主席。结果,如果被指定为用于任何原 子的主席的节点因为任何原因而变得不活动,则那个原子的每一个其他副本具有节点的有 序列表。通过该有序列表,下一个主席是在列表上的第一剩余事务节点。如果在列表上没 有事务节点,则指定第一非同步档案节点。
讨论简单的数据库查询现在可能对于帮助理解在不同节点和节点内的原子之间 的交互是有用的。假定在事务节点处的数据库请求引擎接收到数据库查询以选择在具有邮 政编码“01944”的表格“成员”中的所有记录。假定事务管理器原子和表格原子位于局部 节点处,已经完成了所有的查询处理,并且对于在“成员”表格中的“邮政编码”字段存在索 引原子。
初始,在图2中的数据库请求引擎41向事务管理器发出命令以开始新的事务,此 时,事务管理器原子分配事务ID。接下来,数据库请求引擎利用用于“成员”表格的表格原 子来确定是否对于“邮政编码”字段存在索引原子。如果这两个原子在局部节点处,则它们 被处理。如果它们不在局部节点处,则从其他节点获得这些原子的副本,然后处理继续。
用于“成员”表格的表格原子利用来自对应的表格目录原子的信息来扫描索引。这 产生了位图,该位图识别在具有指定的邮政编码的“成员”表格中的每一个“记录”。如将显 而易见的,这个位图可以限于特定字段或可以是来自多个字段的索引的逻辑组合的结果。
接下来,基于所得到的位图来建立循环。对于该循环的每一次迭代,数据库请求引 擎向表格原子发出调用,以处理用在记录中的事务ID指定的获取记录方法。表格原子通过 下述方式选择与记录原子相关的适当的记录状态原子将记录编号除以与记录状态原子管 理的记录ID的最大数对应的固定数。接下来,表格原子使用事务ID和识别的记录编号来 在所选择的记录状态原子中使用获取方法。对于多版本记录,记录状态原子循环通过任何 记录版本,以找到正确的版本和指向对应的数据原子的适当指针。记录状态原子用指向记 录的数据原子编号来调用那个数据原子,并且允许其检索。当完成这个处理时,数据库请求 引擎向用户提供列出了具有指定的邮政编码的所有记录的记录集。
总之,对于本领域内的普通技术人员将显而易见的是,根据本发明构造的数据库 管理系统提供了弹性的、可扩展的按需分布的数据处理系统。该系统是容错的,并且具有高 度的可用性。它是独立于平台的,并且操作成提供弹性的、一致的、隔离和耐久的数据库。而 且,它可以在因特网上操作,而不需要高速通信路径,并且适于可以在宽的地理区域上实现 的事务处理。
本发明通过实现下面的特征的一个或多个来实现所有这些目的。本发明将数据库 划分为在对等基础上复制的分布式对象。每一个事务和档案节点确定哪些原子要在局部的 基础上驻留在存储器上。目录原子跟踪到各个原子的局部和远程副本的位置,并且识别它 们是其成员的目录。而且,每一个节点可以确定多个节点的最佳者,从该最佳者请求启用地 理上分散的系统的原子的副本。
已经以特定的实施例公开了本发明。将显而易见的是,在不偏离本发明的情况下可以对于所公开的设备进行许多修改。因此,所附的权利要求的意愿是覆盖在本发明的真 实精神和范围内的所有这样的变化和修改。
权利要求
1.一种使得用户能够与由数据和元数据构成的数据库交互的数据库管理系统,所述系统包括A)多个节点,每一个节点包括i)在用户级处的高级输入和输出命令和在系统级处的输入和输出命令之间的接口,在系统级处的输入和输出命令控制用于与所述数据库交互的操作序列,其中,响应于特定的系统级命令,原子对象生成原子,每一个原子包含数据或元数据的指定片断,据此,原子的所有实例集集体地限定在所述数据库中的所有所述元数据和数据;ii)用于在所述系统中与每一个其他节点建立通信路径的通信控制;iii )响应于来自所述接口的系统命令而从选择的节点请求与查询相关但是在该节点中不存在的原子的副本的方法;iv)响应于来自另一个节点的对于原子的请求而复制所请求的原子以传送到该请求节点的方法,据此,仅完成查询所需的原子需要在任何给定的时间位于任何事务节点中;以及V)响应于在该节点处的原子中的改变而复制该原子以传送到在该原子所驻留的系统中的每一个其他节点的方法,B)连接到所述多个节点以在所有所述节点之间提供通信路径的装置,以及C)连接到所述通信装置以对于在原子中的信息提供永久存储器的装置,据此,在永久存储器中的原子的集合集体地包含在所述数据库中的所有所述数据和元数据。
2.根据权利要求1所述的数据库管理系统,其中,所述原子对象的特定原子对象产生目录原子,所述目录原子跟踪在该节点处驻留的所有原子和具有所述驻留原子的每一个的副本的每一个节点的位置。
3.根据权利要求2所述的数据库管理系统,其中,所述目录原子中的一个是在连接到所述系统的每一个节点中复制的主目录原子,其中,所述原子中的另一个是用于所述数据库的单个事务管理器原子,用于跟踪由所述接口启动的事务的进展,并且其中,所述主目录识别所述事务管理器原子的位置。
4.根据权利要求3所述的数据库管理系统,其中,在所述用户级处的数据库包括具有记录和字段的命名的表格,并且根据至少一个命名的图式来操作,并且所述原子对象的其他原子对象产生i)用于包含字段的列表的每一个表格的表格原子,ii)图式原子,所述图式原子在图式和与该图式相关的命名的表格之间建立对应性,以及iii)数据库原子,所述数据库原子在所述数据库和所述命名的图式之间建立对应性。
5.根据权利要求4所述的数据库管理系统,其中,在所述用户级处的所述数据库表格包括识别的记录,所述识别的记录包含字段和数据,其中,其他原子对象产生数据原子和记录状态原子,所述数据原子包含预定数量的数据记录,所述记录状态原子管理记录版本,并且其中,所述记录状态原子包括识别向该记录状态原子分配的所管理的数据原子的阵列、每一个记录版本的标识、以及对于每一个记录版本而言关于该版本和包含该版本的数据原子的位置的信息。
6.根据权利要求5所述的数据库管理系统,其中,每一个数据原子另外包括在所述数据原子内的每一个记录的地址和长度以及所述数据记录。
7.根据权利要求4所述的数据库管理系统,其中,在所述用户级处的数据库表格包括识别的大二进制对象,其中,其他原子对象产生包含大二进制对象的大二进制对象原子和大二进制对象记录状态原子,所述大二进制对象记录状态原子包括所有相关联的大二进制对象原子的列表和在所述大二进制对象原子中的大二进制对象的位置。
8.根据权利要求7中所述的数据流管理系统,其中,每一个大二进制对象原子包括每一个大二进制对象的地址和长度以及所述大二进制对象。
9.根据权利要求1所述的数据库管理系统,其中,每一个节点另外包括i)消息传送装置,用于响应于系统级命令而生成和接收预定义的消息,以及i i )用于选择所述通信路径中的一个来发送所述消息的装置。
10.根据权利要求9所述的数据库管理系统,其中,每一个节点包括用于异步地测试每一个通信路径的效率的装置。
11.根据权利要求10所述的数据库管理系统,其中,所述测试装置包括用于生成Ping消息并且接收ping确认消息以确定每一个通信路径的ping时间的装置。
12.根据权利要求9所述的数据库管理系统,其中,所述消息传送装置包括用于将原子串行化为消息并且将消息去串行化为原子的装置,并且其中,在所选择的通信路径上异步地发送每一个消息。
13.根据权利要求12所述的数据库管理系统,其中,在具有维持消息序列的控制的协议下发送消息。
14.根据权利要求1所述的数据库管理系统,其中,单独的节点可以是活动的并且连接到所述系统,并且可以从所述系统断开,并且所述原子中的一个是主目录原子,所述主目录原子识别在所述系统中的每一个活动节点,并且在连接到所述系统的每一个节点中被复制,所述系统包括用于使得节点能够加入所述系统的装置,所述系统包括i )用于在加入的节点和所述活动的节点中的所选择的一个活动节点之间建立连接的装置,ii)在所述加入节点中的用于向所选择的节点请求连接的装置,iii)在所选择的节点中的用于更新其主目录原子以将所述加入的节点指示为活动的节点的装置,iv)在所选择的节点中的用于向所述加入的节点传送包括所选择的节点的标识的消息以及用于向在所述系统中的所有其他节点和永久存储器广播指示所述加入的节点的可用性的消息的装置,V)在所述加入节点中的用于通过从所选择的节点请求所述主目录原子的副本来响应于所述消息的装置,以及vi)在所选择的节点中的用于向所述加入的节点传送其更新的主目录原子的装置。
15.根据权利要求14所述的数据库管理系统,其中,所述加入的节点包括用于响应于接收到所更新的主目录原子而响应于来自所述接口的请求来请求另外的原子的副本的装置。
16.根据权利要求14所述的数据库管理系统,其中,所选择的节点向所有其他节点和向永久存储器广播所更新的主目录的可用性,并且每一个其他节点和永久存储器包括用于向所选择的节点确认其接收到所更新的主目录的装置。
17.根据权利要求1所述的数据库管理系统,其中,在所述节点中的一个中的接口作出请求,所述请求要求新原子的产生,其中,所述原子对象的特定原子对象产生目录原子,所述目录原子跟踪在该节点处驻留的原子,所述节点中的所述一个另外包括i )在所述目录原子中,将响应于所述接口请求而跟踪所述新的原子,以使得所述目录原子创建没有内容的该新的原子并且将所述新的原子指定为用于该原子的主席的装置,ii)在所述目录原子中的向所述新的原子分配对象标识的装置,iii)在所述目录原子中的用于建立所述新的原子的状态的装置,所述状态指示没有所述新的原子的冗余的副本,并且所述新的原子不可用于其他节点,iv)在所述目录原子中的用于向在所述系统中的所有其他对应的目录原子广播所述新的原子的存在的装置,V)用于填充所述新的原子并且用于使得所述新的原子在所述系统上可用的装置。
18.根据权利要求17所述的数据库管理系统,其中,永久存储器包括响应于所述新的原子的存储而向节点发送消息的装置,所述新的原子更新其状态以指示冗余副本的存在。
19.根据权利要求1所述的数据库管理系统,其中,在所述节点中的一个中的接口对于仅在其他节点中存在的原子作出请求,并且其中,所述原子对象中的特定原子对象产生目录原子,所述目录原子跟踪在该节点和其他节点处驻留的原子,所述系统包括i)在所述请求目录原子中的响应于将响应于创建空的原子的接口请求而跟踪所请求的原子的接口请求的装置,ii)在所述请求目录原子中的用于建立选择最具响应性的节点并且从所述最具响应性的节点请求所述原子的副本的装置,iii)在所选择的节点中,用于向所述请求节点发送在对象消息中的所请求的原子的副本、以及用于向所述原子所在的其他节点广播所述原子的可用性的装置,iv)用于评估所接收到的对象消息的有效性、用于填充所述空原子以及用于向所选择的节点转发对象确认消息的装置。
20.根据权利要求19所述的数据库管理系统,其中,所述选择的节点生成所有节点的中继器列表,所述中继器列表包含所请求的原子,所选择的节点将向所请求的原子转发从与该原子相关的其他节点到所述请求节点的消息。
21.根据权利要求20所述的数据库管理系统,其中,接收所广播的对象可用消息的所述其他节点中的每一个包括用于向所选择的节点发送对象确认消息的装置,所述选择的节点包括用于响应于从另一个节点接收到每一个对象确认消息而更新所述中继器列表,以结束向所述请求节点的任何随后消息的中继。
22.根据权利要求1所述的数据库管理系统,适于用以保证所述数据库的一致性的事务处理,其中,所述系统包括包含要提交的原子的第一节点、包括该原子的副本的至少一个其他节点和在永久存储器中包括的该原子的副本,所述系统包括i)在所述第一节点中的用于生成具有事务标识的提交前消息以传送到永久存储器的装置,ii)与永久存储器相关联的、用于响应于所述提交前消息而提交所述事务以及其后向所有的所述节点广播具有所述事务标识的提交消息的装置,iii)在所述第一和至少一个其他节点中的用于响应于接收到所述提交消息而更新所标识的事务的装置。
23.一种使得用户能够与由数据和元数据构成的数据库交互的数据库管理系统,所述系统包括A)向用户提供对于所述数据库的访问的至少一个事务节点和维持所述整个数据库的档案的至少一个档案节点,每一个事务节点包括数据库请求引擎,所述数据库请求引擎提供在用户级处的高级输入和输出查询命令和在系统级处的输入和输出命令之间的接口,在系统级处的输入和输出命令控制用于与所述数据库交互的操作序列,其中,响应于特定的系统级命令,原子对象生成原子,每一个原子包含数据或元数据的指定片断,据此,原子的所有实例集集体地限定在所述数据库中的所有所述元数据和数据,B)互连所有的所述节点的数据库系统网络;C)在所述节点的每一个中用于与所述系统中的每一个节点建立通信路径的通信控制,D)在每一个事务节点中的用于响应于来自所述数据库请求引擎的系统命令而请求与该查询命令相关但是在该节点中不存在的原子的副本的方法,E)在每一个节点中的用于响应于对于来自另一个节点的原子的请求而复制所请求的原子以传送到所述请求节点的方法,据此,仅完成查询命令所需的原子需要在任何给定的时间位于任何事务节点中,以及F)在每一个事务节点中,响应于在该节点处的原子中的改变而将该改变复制到在包含该节点的副本的系统中的每一个其他节点的方法。
24.根据权利要求23所述的数据库管理系统,其中,所述原子对象中的特定原子对象产生目录原子,所述目录原子跟踪在该节点处驻留的所有原子和具有所述驻留原子的每一个的副本的每一个节点的位置。
25.根据权利要求24所述的数据库管理系统,其中,所述目录原子中的一个是在连接到所述系统的每一个节点中复制的主目录原子,其中,所述原子中的另一个是用于所述数据库的单个事务管理器原子,用于跟踪由所述接口启动的事务的进展,并且其中,所述主目录识别所述事务管理器原子的位置。
26.根据权利要求25所述的数据库管理系统,其中,在所述用户级处的所述数据库包括具有记录和字段的命名的表格,并且根据至少一个命名的图式来操作,并且所述原子对象中的其他原子对象产生i)用于包含字段的列表的每一个表格的表格原子,ii)图式原子,所述图式原子在图式和与该图式相关的命名的表格之间建立对应性,以及iii)数据库原子,所述数据库原子在所述数据库和所述命名的图式之间建立对应性。
27.根据权利要求26所述的数据库管理系统,其中,在所述用户级处的所述数据库表格包括识别的记录,所述识别的记录包含字段和数据,其中,其他原子对象产生数据原子和记录状态原子,所述数据原子包含预定数量的数据记录,所述记录状态原子管理记录版本,并且其中,所述记录状态原子包括识别向该记录状态原子分配的所管理的数据原子的阵列、每一个记录版本的标识、以及对于每一个记录版本而言关于该版本和包含该版本的所述数据原子的位置的信息。
28.根据权利要求27所述的数据库管理系统,其中,每一个数据原子另外包括在所述数据原子内的每一个记录的地址和长度以及所述数据记录。
29.根据权利要求26所述的数据库管理系统,其中,在所述用户级处的数据库表格包括识别的大二进制对象,其中,其他原子对象产生包含大二进制对象的大二进制对象原子和大二进制对象记录状态原子,所述大二进制对象记录状态原子包括所有相关联的大二进制对象原子的列表和在所述大二进制对象原子中的大二进制对象的位置。
30.根据权利要求29中所述的数据库管理系统,其中,每一个大二进制对象原子包括每一个大二进制对象的地址和长度以及所述大二进制对象。
31.根据权利要求23所述的数据库管理系统,其中,每一个节点另外包括i)消息传送装置,用于响应于系统级命令而生成和接收预定义的消息,以及i i )用于选择所述通信路径中的一个来发送所述消息的装置。
32.根据权利要求31所述的数据库管理系统,其中,每一个节点包括用于异步地测试每一个通信路径的效率的装置。
33.根据权利要求32所述的数据库管理系统,其中,所述测试装置包括用于生成ping消息并且接收ping确认消息以确定每一个通信路径的ping时间的装置。
34.根据权利要求31所述的数据库管理系统,其中,所述消息传送装置包括用于将原子串行化为消息并且将消息去串行化为原子的装置,并且其中,在所选择的通信路径上异步地发送每一个消息。
35.根据权利要求34所述的数据库管理系统,其中,在具有维持消息序列的控制的协议下发送消息。
36.根据权利要求23所述的数据库管理系统,其中,单独的节点可以是活动的并且连接到所述系统,并且可以从所述系统断开,并且所述原子中的一个是主目录原子,所述主目录原子识别在所述系统中的每一个活动节点,并且在连接到所述系统的每一个节点中被复制,所述系统包括用于使得节点能够加入所述系统的装置,所述系统包括i )用于在加入的事务节点和所述活动的节点中的选择的一个活动的节点之间建立连接的装置,ii)在所述加入的事务节点中的用于向所选择的节点请求到所述系统的连接的装置,iii)在所选择的节点中的用于更新其主目录原子以将所述加入的事务节点指示为活动的节点的装置,iv)在所选择的节点中的用于向所述加入的事务节点传送包括所选择的节点的标识的消息以及用于向在所述系统中的所有其他节点广播指示所述加入的事务节点的可用性的消息的装置,V)在所述加入的事务节点中的用于通过从所选择的节点请求所述主目录原子的副本来响应于所述消息的装置,以及vi)在所选择的节点中的用于向所述加入的事务节点传送其更新的主目录原子的装置。
37.根据权利要求36所述的数据库管理系统,其中,所述加入的事务节点包括用于响应于接收到所更新的主目录原子而响应于来自其数据库请求引擎的系统命令来请求另外的原子的副本的装置。
38.根据权利要求36所述的数据库管理系统,其中,所选择的节点向所有其他节点广播所更新的主目录的可用性,并且每一个其他节点包括用于向所选择的节点确认其接收到所更新的主目录的装置。
39.根据权利要求23所述的数据库管理系统,其中,在所述事务节点中的一个中的所述数据库请求引擎作出请求,所述请求要求新原子的产生,并且其中,所述原子对象中的特定原子对象产生目录原子,所述目录原子跟踪在该节点处驻留的原子,所述事务节点另外包括i)在所述目录原子中的、用于响应于所述数据库请求引擎请求而跟踪所述新的原子、用于使得所述目录原子创建没有内容的该新的原子、以及用于将所述新的原子指定为用于该原子的主席的装置,ii)在所述目录原子中的用于向所述新的原子分配对象标识的装置,iii)在所述目录原子中的用于建立所述新的原子的状态的装置,所述新的原子的状态指示没有所述新的原子的冗余的副本、并且所述新的原子不可用于其他节点,iv)在所述目录原子中的用于向在所述系统中的所有其他对应的目录原子广播所述新的原子的存在的装置,V)用于填充所述新的原子以及用于使得所述新的原子对于在所述系统中的其他节点可用的装置。
40.根据权利要求39中所述的数据库管理系统,另外包括在每一个档案节点中,响应于所述新的原子的存储而向所述新的原子发送消息的装置,所述新的原子更新其状态以指示冗余副本的存在。
41.根据权利要求23所述的数据库管理系统,其中,在一个事务节点中的数据库请求引擎请求仅在其他节点中存在的原子,并且其中,所述原子对象中的特定原子对象产生目录原子,所述目录原子跟踪在该节点和其他节点处驻留的原子,所述系统包括i)响应于在所述请求目录原子中的将跟踪所请求的原子以创建该空的原子的所述请求的装置,ii)在所述请求目录原子中的用于建立选择最具响应性的节点、以及从所述最具响应性的节点请求所述原子的副本的装置,iii)在所选择的节点中的用于向所述请求节点发送在对象消息中的所请求的原子的副本、以及用于向所述原子所驻留的其他节点广播所述原子的可用性的装置,iv)用于评估所接收到的对象消息的有效性、用于填充所述空原子以及用于向所选择的节点转发对象确认消息的装置。
42.根据权利要求41所述的数据库管理系统,其中,所述选择的节点生成所有节点的中继器列表,所述中继器列表包含所请求的原子,所选择的节点将向所请求的原子转发从与该原子相关的其他节点到所述请求节点的消息。
43.根据权利要求42所述的数据库管理系统,其中,接收所广播的对象可用消息的所述其他节点中的每一个包括用于向所选择的节点发送对象确认消息的装置,所述选择的节点包括用于响应于从另一个节点接收到每一个对象确认消息而更新所述中继器列表,以结束向所述请求节点的任何随后消息的中继。
44.根据权利要求23所述的数据库管理系统,适于在事务处理期间保证所述数据库的一致性,其中,所述系统包括包含要提交的事务的第一节点,并且包括档案节点的至少一个其他节点包括该原子的副本,所述系统包括i)在所述第一节点中的用于生成具有用于传送到档案节点的事务标识的提交前消息的装置,ii)与档案节点相关联的的用于响应于所述提交前消息而提交所述事务、以及其后向所有的所述节点广播具有所述事务标识的提交消息的装置,以及iii)在所述第一和至少一个其他节点中,用于响应于接收到所述提交消息而更新所标识的事务的装置。
45.一种用于逻辑数据库的数据库管理系统,所述逻辑数据库由数据记录构成,所述数据记录被组织为要从多个事务节点访问的表格,所述多个事务节点处理与所述逻辑数据库相关的事务,所述系统包括A)用于将所述数据库解析为片断的装置,其中,每一个片断存储与所述逻辑数据库相关的元数据和/或数据的一部分,以在所述数据库管理系统中作为串行消息传送,并且存储为非串行的消息,B)至少一个档案节点,所述至少一个档案节点在永久存储器中以非串行的形式存储所有的所述片断,由此构成用于所述整个数据库的单个储藏库,其中,每一个事务节点包括i)用于通过建立用于识别与来自用户的查询相关的片断的低级命令的序列来响应于所述查询的装置,ii)用于通过仅获得与在其被处理的所述查询相关的现有片断的那些副本来响应于所述低级命令的装置,据此,给定的片断可存在于某个其他节点处或仅位于档案节点处,以及iii)用于向所述至少一个档案节点和任何改变的片断的副本所驻留的每一个事务节点复制该片断的装置,据此,在对等的基础上对于在其他节点中的片断作出改变,并且据此,任何事务节点仅包含与通过该事务节点访问所述数据库的用户所作出的查询相关的那些片断。
全文摘要
一种多用户、弹性的、按需的、分布式关系数据库管理系统。该数据库被划分为被称为原子的分布式对象。对于在一个位置处的原子的副本的任何改变被复制到包含那个原子的副本的所有其他位置。事务管理器操作成满足原子性、一致性、隔离性和持久性的属性。
文档编号G06F17/30GK103026355SQ201180014604
公开日2013年4月3日 申请日期2011年3月18日 优先权日2010年3月18日
发明者詹姆斯·A·斯塔基 申请人:诺宝公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1