在分布式数据库环境中的一致性读取.pdf

上传人:xia****o6 文档编号:648441 上传时间:2018-03-01 格式:PDF 页数:35 大小:1.56MB
返回 下载 相关 举报
摘要
申请专利号:

CN02810761.6

申请日:

2002.05.29

公开号:

CN1524239A

公开日:

2004.08.25

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效|||公开

IPC分类号:

G06F17/30

主分类号:

G06F17/30

申请人:

甲骨文国际公司;

发明人:

阿米特·加内什; 罗格·班福德

地址:

美国加利福尼亚州

优先权:

2001.06.01 US 60/295,104; 2002.04.09 US 10/119,672

专利代理机构:

北京康信知识产权代理有限责任公司

代理人:

余刚

PDF下载: PDF下载
内容摘要

本发明提供了确定将哪个数据项版本提供给查询的技术。根据该技术,确定是通过以下步骤实现的:将一新字段和每个数据项版本相关联,这个新字段指示了数据项版本当前的时间;将一新字段和每个查询相关联,指示了查询必须看到的由查询所归属的事务做出的最新改变;以及部分地根据这两个新字段的值的比较来确定用哪个数据项版本来回答查询。

权利要求书

1: 一种用于确定将哪个数据项版本提供给会话的方法,所述方法 包括以下计算机实现步骤: 维护与所述会话相关联的最后看到时间戳(LAST-TO -SEE-TIMESTAMP),所述最后看到时间戳指示在所述会话中 做出所述会话必须看到的最后改变的时间; 用数据项版本维护用来指示数据项版本是当前版本的时 间的克隆时间(CLONE-TIME);以及 至少部分地根据所述克隆时间(CLONE-TIME)和所述 最后看到的时间戳(LAST-TO-SEE-TIMESTAMP)之间的比 较来确定被提供给所述会话的数据项版本。
2: 根据权利要求1所述的方法,其中所述确定步骤包括:根据所 述克隆时间(CLONE-TIME)和所述最后看到的时间戳 (LAST-TO-SEE-TIMESTAMP)之间的比较,从多个符合被 提供给会话的条件的数据项版本中选择所述数据项版本。
3: 根据权利要求1所述的方法,其中: 在所述会话中执行包括查询的事务; 所述最后看到时间戳(LAST-TO-SEE-TIMESTAMP)与 所述查询关联,所述最后看到时间戳指示事务做出最后改变的 时间,所述最后改变是所述查询必须看到的;以及 通过确定将被用来回答查询的所述数据项版本,来执行 确定将被提供给所述会话的数据项版本的步骤。
4: 根据权利要求1所述的方法,还包括:当从当前版本克隆出所 述数据项版本时,根据全局时钟设置所述克隆时间(CLONE- TIME)的步骤。
5: 根据权利要求1所述的方法,还包括:当从所述非当前数据项 版本克隆出所述数据项版本时,根据非当前数据项版本的所述 克隆时间(CLONE-TIME)设置所述克隆时间(CLONE-TIME) 的步骤。
6: 根据权利要求1所述的方法,其中: 集群中的多个节点具有用于所述数据项数据项版本,以 及 所述方法还包括以下步骤: 为所述多个节点中的每个节点维持用于所述数据项的克 隆时间(CLONE-TIME)信息;以及 根据所述克隆时间(CLONE-TIME)信息选择发送用于 所述数据项的请求的节点。
7: 根据权利要求6所述的方法,其中所述维持克隆时间(CLONE- TIME)信息的步骤包括:为所述数据项维护矢量,所述矢量 使节点与所述克隆时间(CLONE-TIMES)相关联,其中在所 述矢量中与给定节点相关联的克隆时间(CLONE-TIMES)是 与驻留在所述给定节点中的数据项版本相关联的克隆时间 (CLONE-TIMES)。
8: 根据权利要求1所述的方法,其中所述确定步骤包括: 根据删除数据信息(removed-data information),确定必 须被看到的改变是否已经从所述数据项版本中删除;以及 根据所述克隆时间(CLONE-TIME),确定在创建所述数 据项版本之后是否可能对数据项的当前版本做出必须被看见 的信息。
9: 一种把数据项提供给必须看到数据库特定快照的查询的方法, 所述方法包括如下步骤: 为驻留在多个节点中的多个数据项版本,维持指示当前 数据项版本的时间的克隆时间(CLONE-TIME)信息; 至少部分地根据所述克隆时间(CLONE-TIME)信息, 确定所述多个数据项版本中包含所有改的变数据项版本,所述 所有改变必须被所述查询看到;以及 从那些包含必须被所述查询看到的所有改变的数据项版 本中选择数据项版本,提供给所述查询。
10: 根据权利要求9所述的方法,其中所述确定步骤包括: 根据与数据项版本相关联的克隆时间(CLONE-TIME), 确定在所述数据项版本创建之后,是否已经对所述数据项做出 必须被所述查询看到的改变;以及 根据与所述数据项版本相关联的最近包含时间(MOST- RECENT-INCLUSION-TIME),确定是否已经从所述数据项版 本中删除必须被所述查询看见的改变。
11: 根据权利要求10所述的方法,其中所述选择步骤包括:使用 所述克隆时间(CLONE-TIME)信息,来选择比其它候选项 要求更少的将被删除的改变的候选项。
12: 一种承载用于确定将哪个数据项版本提供给会话的指令的计 算机可读介质,所述指令包括用于执行以下步骤的指令: 维持与所述会话相关联的最后看到时间戳(LAST-TO- SEE-TIMESTAMP),所述最后看到时间戳指示在所述会话中 必须被所述会话看到的最后改变的时间; 维持数据项版本的克隆时间(CLONE-TIME),所述克隆 时间指示数据项版本是当前版本的时间;以及 至少部分地根据所述克隆时间(CLONE-TIME)和最后 看到时间戳(LAST-TO-SEE-TIMESTAMP)之间的比较,确 定将被提供给所述会话的数据项版本。
13: 根据权利要求12所述的计算机可读介质,其中所述确定步骤 包括:根据所述克隆时间(CLONE-TIME)和所述最后看到 时间戳(LAST-TO-SEE-TIMESTAMP)之间的比较,从符合 提供给会话的条件的多个数据项版本中选择所述数据项版本。
14: 根据权利要求12所述的计算机可读介质,其中 在所述会话中执行包含查询的事务; 所述最后看到时间戳(LAST-TO-SEE-TIMESTAMP)与 所述查询相关联,指示由所述查询必须看到的所述事务做出的 最后改变的时间;以及 确定将被提供给所述会话的数据项版本的步骤是通过确 定将被用来响应所述查询的数据项版本完成的。
15: 根据权利要求12所述的计算机可读介质,还包括指令,当从 当前版本克隆出所述数据项版本时,用于根据全局时钟,执行 设置所述克隆时间(CLONE-TIME)的步骤。
16: 根据权利要求12所述的计算机可读介质,还包括指令,用于 当从非当前版本克隆出所述数据项版本时,根据非当前数据项 版本的克隆时间(CLONE-TIME)执行设置所述克隆时间 (CLONE-TIME)的步骤。
17: 根据权利要求12所述的计算机可读介质,其中: 集群中的多个节点具有用于所述数据项的数据项版本; 以及 所述计算机可读介质还包含用于执行以下步骤的指令: 为所述多个节点中的每个节点维持用于所述数据项 的克隆时间(CLONE-TIME)信息;以及 根据所述克隆时间(CLONE-TIME)信息,选择发 送用于所述数据项的请求的节点。
18: 根据权利要求17所述的计算机可读介质,其中所述维护克隆 时间(CLONE-TIME)信息的步骤包括:为所述数据项维持 使节点与克隆时间(CLONE-TIMES)相关联的矢量,其中在 矢量中与给定节点相关联的所述克隆时间(CLONE-TIMES) 是与驻留在所述给定节点中的数据项版本相关联的克隆时间 (CLONE-TIMES)。
19: 根据权利要求12所述的计算机可读介质,其中所述确定步骤 包括: 根据删除数据信息(removed-data information)确定必须 被看到的改变是否已经从所述数据项版本中删除;以及 根据所述克隆时间(CLONE-TIME),确定在创建所述数 据项版本之后是否可能对数据项的当前版本做出必须被看见 的信息。
20: 一种承载用于提供数据项给必须看到数据库特定快照的查询 的指令的计算机可读介质,所述指令包括用于执行以下步骤的 指令: 为驻留在多个节点中的多个数据项版本维持表明数据项 当前版本的当前时间的克隆时间(CLONE-TIME)信息; 至少部分地根据所述克隆时间(CLONE-TIME)信息, 确定所述多个数据项版本中包含所有改变的数据项版本,所述 所有改变必须被所述查询看到;以及 从那些包含必须被所述查询看见的所有改变的数据项版 本中选择数据项版本,提供给所述查询。
21: 根据权利要求20所述的计算机可读介质,其中所述确定步骤 包括: 根据与数据项版本相关联的克隆时间(CLONE-TIME), 确定在所述数据项版本创建后,是否已经对所述数据做出必须 被所述查询看到的改变;以及 根据与所述数据项版本相关联的最近包含时间(MOST- RECENT-INCLUSION-TIME),确定查询必须看到的改变是否 已经从所述数据项版本中删除。
22: 根据权利要求21所述的计算机可读介质,其中所述选择步骤 包括:使用克隆时间(CLONE-TIME)信息,来选择比其它 候选项要求更少的将被删除的改变的候选项。

说明书


在分布式数据库环境中的一致性读取

    优先权声明和相关申请的交叉引用

    该申请涉及并且要求2001年6月1日提交的美国临时专利申请60/295,104号(律师卷号50277-1621)的优先权,其名称为:“在分布式数据库环境中的一致性读取(Consistent Read in a DistributedDatabase Environment)”,申请人是Amit Ganesh和Roger J.Bamford,其全部内容结合于此作为参考。

    【技术领域】

    该发明涉及在分布式数据库环境中对储存的数据的存取,尤其涉及用来确定将哪个数据项版本提供给请求该数据项的事务的方法和装置。

    背景技术

    在通常的数据库系统中,用户通过向数据库应用程序提交命令或者语句来储存、更新、获取、和选择信息。为了能够正确地进行,语句必须遵循数据库应用程序所支持的数据库语言。一种公知的通用数据库语言是结构化查询语言(SQL)。

    由一个或者多个数据库语言语句组成的基本逻辑单元被称之为事务(transaction)。数据库语言语句的例子有:插入(insert),用来在数据库中插入数据;查询(query),用来在数据库中选择数据。

    当多个用户共享一个数据库系统时,在一个时刻只允许一个事务被执行的情况是不切实际的。然而,当很多事务被允许同时执行时,就出现了一致性问题。事务型的数据库管理系统(transactionaldatabase management)提供了一种特殊的语句-“提交(commit)”,用户或者程序提交该语句,以描述构成一个事务的语句。在事务提交之前,该事务所做地所有改变都必须被认为是临时的,并且如果该事务提交失败,这些改变能够被删除。在事务提交时,事务所作的所有改变都是永久的,并且可以被其它事务看到。

    为了保证得到可预测并可重复产生的结果,已经开发出这些技术用来保护同时执行的事务不会以不可控制的方式互相影响。总体上来看,设计事务,以使数据库的改变以数据库从一个一致状态转移到另外的一致状态的方式进行。

    事务不仅仅必须是在完成时以一致状态离开数据库,而且也必须看到该数据库处在一致状态。这个条件是非常难以满足的,因为有可能同时存在几个正在执行事务,每个事务可以产生仅在该单一事务内可见的临时不一致性。结果,该事务不能看到由同时执行的其它事务所作的改变,直到那些事务提交为止。

    为了确保一个查询所归属的事务不能看到同时执行的事务所作的改变,一种方法是阻止那些事务读取已经被更新的数据项版本,直到更新该数据项版本的事务被提交为止。然而,该方法通过使那些希望读取数据项版本的事务(读取者)等待已经写入数据项版本的事务(写入者)提交,从而降低了系统的并发性。

    用来阻止查询看到同时执行的事务所作的改变的另一种方法是为该查询分配一个“快照时间(snapshot time)”,并且接下来(1)使这个查询看到在这个快照时间之前提交的事务所作的所有改变,并且(2)阻止该查询看到在快照时间之后提交的事务所作的所有改变。尤其是,当查询是事务的部分时,该查询必须看到:(1)所有在查询的快照时间或者在其之前提交给数据库的所有改变,以及(2)该查询所归属的事务所做的所有改变(即使该事务还没有提交)。

    有可能让同一个数据项的多个版本存在于数据库系统内的缓存中。这些版本包含(1)数据项当前版本(下文被称为当前版本),该数据项包含了直到当前时间点时已经对数据项做出的所有改变,并且(2)当前版本的克隆,该克隆可以是在不同的时间点产生的当前版本的副本,也可以是其它克隆的副本(下文简称为克隆)。包含当前版本及其克隆的集合将被称为该数据项的“数据项版本”。

    当查询指定获取数据项时,该数据库系统必须确定能够将该数据库项的多个版本中的哪个版本提供给该查询。对于一个给定的查询,数据项的每一个版本不外乎下面两类中的一类:(1)包含该查询必须看到的任何信息的版本(和包含该查询所需要的将来的改变,这些将来的改变可以被回滚(roll back),但是很难将更老的数据项版本及时向前移动),以及(2)该查询必须看到的正在丢失改变的版本。

    通常,在该查询不能看到的任何改变从该数据项版本中删除后,相对于特定查询的第一种类型的数据项版本能够被用来回答该特定查询。从数据项的一个版本中删除改变的过程称之为“回滚(rollback)”。相对于特定查询的第二种类型的数据项版本不能被用来回答该特定查询。

    一种用来向查询提供数据的方法总是开始于一个数据项的当前版本。通过定义,数据项的当前版本包含了所有已经针对该数据项所做的改变。因此,对所有的查询来说它永远属于第一种类型。使用数据项的当前版本通常需要(1)产生一份克隆,以及(2)从克隆中删除该查询不应该看到的所有改变。然而,如果查询的快照时间是旧的,那么可能会存在大量的不得不从克隆中删除的改变,这将导致消耗大量时间和系统资源的回滚操作。而且,从当前版本中经常回滚改变仅仅能在单节点系统中工作的很好,因为在多节点系统中,当当前版本从集群的一个节点移动到另一节点的时候,能够在追踪数据项的当前版本的情况下获得数据项请求。

    如果系统不经常用当前版本开始回滚操作,那么该系统必须能够相对于系统正在处理的查询来确定克隆是属于哪个类别的。对于一个给定的查询,如果它们属于类别一,那么它们可以被用来向该查询提供数据。为了方便对克隆的分类,“删除数据信息(removed-data information)”可以同每个数据项版本一起被存储。该删除数据信息通常指示对数据项版本所作的随后从该数据项的该版本中删除的改变。

    例如,假设一个数据项的当前版本被克隆,产生克隆X。最初,克隆X的删除数据信息将表明没有数据被删除。如果在克隆X上执行一个回滚操作,用来删除事务T1产生的改变,那么克隆X的删除数据信息将被修正,用以显示T1所产生的改变已经从克隆X中删除。如果查询不需要看到T1所作的改变,那么克隆X可以被用来向该查询提供数据(可能需要额外的回滚)。如果该查询需要看到T1做出的改变,那么克隆X不能用来向该查询提供数据。

    不幸地是,删除数据信息不总是正确地指示所有改变,这些改变(1)是已经对该数据项的改变,(2)不在该克隆中。尤其是,即使当删除数据信息表明没有数据从克隆中删除,但是依然能够保留该查询必须能够看到的并且该克隆正在丢失的改变的可能性。特别地,查询可能不得不看到对克隆创建之后对当前版本进行的改变。因此,这一删除数据信息不足以用来确定正在从数据项版本中消失的所有数据。换句话说,克隆可能是从来没有从该克隆中删除的正在消失的改变。

    接下来的一个例子是,克隆如何结束在该克隆的删除数据信息没有反映出来的正在丢失的数据。事务(TXB)正在对当前版本进行更新。当前版本被克隆,产生克隆Y。TXB继续对当前版本进行更新。在这个例子中,克隆Y现在正在丢失在它被克隆出来后对当前版本的更新,但是克隆Y的删除数据信息没有指示出任何改变在丢失。

    一种用来指示没有在删除数据信息中反映出的改变是否正在克隆中丢失的方法是:当该数据项的当前版本被更新时,将所有已经存在的克隆标记为“旧(old)”。标记克隆为“旧”的操作在下文中称为失效。然而,在克隆能够在多个节点扩散的多节点系统(下文称为集群)中,这是不切实际的,因为它需要向所有在集群中的节点为每个数据项的每个更新广播一条失效消息,该集群可能包含这些数据项的克隆。

    根据如上所述,需要一种用来确定将哪个数据项版本提供给查询的机制,这里,数据项的克隆可以存在集群的多个节点中。

    【发明内容】

    根据本发明的一个方面,提供了用来确定哪个数据项版本能够被用来满足查询的技术。这里描述的技术与另一种技术相比,可以使用在集群的环境中,而不发生非常明显的性能下降。另外,提供了一种用来确定哪个版本需要最小的工作量就能满足查询需求的技术。根据一个实施例,该技术包含:

    1)使第一新字段和每一克隆相关联,其中,第一新字段指示数据项版本是当前版本的时间,

    2)使第二新字段和每一查询相关联,其中,第二新字段指示该查询必须看到的事务所作的最后的改变,以及

    3)使用克隆的第一新字段的值和查询的第二新字段的值,来确定该克隆是否能够被提供给该查询。

    【附图说明】

    以下通过附图中的实例来说明本发明的实施例,并不是出于限定目的,在附图中,相同的标号是指相同的元素,其中:

    图1是数据项版本和已经更新过数据项版本的事务的框图;

    图2是克隆分支框图;

    图3是矢量框图;

    图4是根据本发明的实施例的数据库系统的框图;以及

    图5是能被用来实施本发明的实施例的计算机系统的框图。

    【具体实施方式】

    这里描述了一种方法和系统,用来提供来自数据库中的多个数据项版本,以回答查询。出于解释目的,在以下的描述中,为了彻底理解该发明,阐明了大量的细节说明。然而,对于本领域技术人员而言,显而易见地是,没有这些细节也可以实施本发明。在其它例子中,为了避免对本发明造成不必要的混淆,众所周知的结构和装置以框图的形式示出。

    功能概述

    本发明提供了用来为了查询,使驻留在集群中的多个节点中的一个的数据项版本定位的技术,该查询必须看到该数据库的一致性快照。正如上面提到的,这样的查询必须仅仅看到(1)由提交的事务的特定集合提交给数据库的改变,并且(2)该查询所归属的事务的先前语句所做的改变。

    根据一个实施例,该技术包括为每个克隆储存一个克隆时间(CLONE-TIME),并且为每个查询储存一个最后看到时间戳(LAST-TO-SEE-TIMESTAMP)。在以下章节中将描述这些附加信息数据项是如何被建立、维护、以及如何被用来确定特定克隆是否能够被提供给特定查询的。

    全局系统时间

    全局系统时间是由该数据库系统维护的计数器。通常,该计数器随着时间增加。为了跟踪数据库事件的顺序,事件被标记为从全局系统时间显示的时间开始已经在数据库中发生。例如,发生在全局系统时间10的事件被认为是在全局系统时间11发生的任何事件前已经发生的。下面会更详细描述到,全局系统时间被用来为克隆的克隆时间(CLONE-TIME)和查询的最后看到时间戳(LAST-TO-SEE-TIMESTAMP)创建时间戳。

    CLONE-TIME(克隆时间)

    正如上面提到的,将删除数据信息同每个克隆一同储存起来以指示什么改变(如果有的话)已经从克隆中删除。然而,删除数据信息并不指示克隆是否正在丢失对克隆被创建后的当前版本所作的改变。为了方便跟踪这种后来的丢失的改变,将每个克隆和“克隆时间(CLONE-TIME)”一起储存。

    通常,克隆的克隆时间是一个表示从当前数据项版本中克隆出克隆所归属的“克隆分支(clone-branch)”的时间值。特定克隆所归属的克隆分支包含(1)涉及产生特定克隆的克隆操作的所有克隆,以及(2)被用来生成特定克隆的所有克隆。

    以下所述更加详细地说明了克隆、克隆分支、克隆时间(CLONE-TIME)。数据项的每个非当前版本是从当前版本中克隆出来的,或者是从该数据项的另一个非当前版本中克隆出来的。因此,数据项的每个非当前版本是一个或者多个克隆操作序列的产物。例如,图2描述了当前版本200。在时间T=10,当前版本200的第一份克隆201从当前版本中创建出来。在克隆201从当前版本200克隆出来时,从全局系统时间中分配给它一个克隆时间(CLONE-TIME)。

    克隆202是克隆201的克隆。克隆202在T=12时从克隆201中克隆出来的。尽管克隆201是在T=12创建的,但是它属于在T=10从当前版本200克隆中克隆出来的克隆分支。结果,给克隆202分配的克隆时间(CLONE-TIME)也是T=10。

    在T=15从克隆202中克隆出来的克隆203被分配的克隆时间(CLONE-TIME)同样是T=10。在T=17从克隆203中克隆出来的克隆204被分配的克隆时间(CLONE-TIME)同样是T=10。因此,所有克隆(201、202、203、以及204)都属于相同的克隆分支,并且都拥有相同的克隆时间(CLONE-TIME)T=10,该克隆时间是最初分配给克隆201的克隆时间。

    因此,分配给一个从当前版本中创建出来的克隆的克隆时间(CLONE-TIME)是创建该克隆的全局系统时间。分配给从另一克隆创造出来的克隆的克隆时间(CLONE-TIME)就是从其它克隆中克隆出来的克隆时间(CLONE-TIME)。

    通过使用与克隆时间(CLONE-TIME)相关联的删除数据信息,使得知道发生在克隆时间(CLONE-TIME)以前的针对数据项的所有改变变为可能,这些改变(1)反映在该数据项版本中,或者(2)标识为由删除数据信息删除。

    最后看到时间戳(LAST-TO-SEE-TIMESTAMP)

    根据一个实施例,除了为每个克隆分配一个克隆时间(CLONE-TIME)外,还为必须看见数据库一致性图像的每个查询分配一个最后看到时间戳(LAST-TO-SEE-TIMESTAMP)。具体来说,被分配给作为事务的部分的查询的最后看到时间戳(LAST-TO-SEE-TIMESTAMP)是全局系统时间值,在这个时间,该事务做出了查询必须看到的最近的改变。

    例如,假设查询Q1是事务TX1的部分,而事务TX1已经在时刻T=1、T=2、T=3、T=4、和T=5分别对数据库作了五次改变。假设Q1必须看见TX1的前三次改变。在这种情况下,分配给Q1的最后看到时间戳(LAST-TO-SEE-TIMESTAMP)是T=3,即TX1作第三次改变的全局系统时间。

    比较克隆时间与最后看到时间戳(COMPARING CLONE-TIME TO LAST-TO-SEE-TIMESTAMP)

    通常,克隆的删除数据信息指示最近事务的提交时间,该事务的改变在这个克隆中反映出来。出于理解目的,这里这个值称为最近包含时间(MOST-RECENT-INCLUSION-TIME)。

    因此,如果克隆包括来自在时间10、12、和15提交的事务的数据,那么这个克隆的最近包含时间(MOST-RECENT-INCLUSION-TIME)将指示提交时间为14,即事务的提交时间(例如:15)减1。如果在时间15提交的事务产生的改变被从克隆中删除,那么该最近包含时间(MOST-RECENT-INCLUSION-TIME)将变为12。

    过去,如果一个克隆拥有比查询的快照时间还要早的最近包含时间(MOST-RECENT-INCLUSION-TIME),那么即使该克隆的删除数据信息表示没有从该克隆中移出任何改变,该克隆也不能被用来满足一个查询。例如,不可能使用最近包含时间(MOST-RECENT-INCLUSION-TIME)为14的克隆来满足快照时间为20的查询,即使该克隆的删除数据信息表明没有任何改变已经从该克隆中删除。该克隆不能被使用的原因是对于当前版本已经产生的改变可能(1)在克隆创建之后,而且(2)在查询的快照时间之前。此外,在过去,数据项版本的失效指的是本地失效,而且远程数据项版本不能被使用,因为全局无效的代价是很昂贵的。

    通过给查询维护一个最后看到时间戳(LAST-TO-SEE-TIMESTAMP),并且给克隆维护一个克隆时间(CLONE-TIME),使用通过集群的数据项版本而不作无效处理是可能的。特别地,如果一个克隆的克隆时间(CLONE-TIME)大于或者等于一个查询的最后看到时间戳(LAST-TO-SEE-TIMESTAMP),同时它的快照时间又比最近包含时间(MOST-RECENT-INCLUSION-TIME)小,那么该数据项版本就是可用的。

    根据一个具体实例,它的最后看到时间戳(LAST-TO-SEE-TIMESTAMP)被设置成全局系统时间值,用来表示该事务发生改变的时间,该改变与“最后改变序列号(SEQUENCE-NUMBER-OF-LAST-CHANGE)”的值有关。这个最后改变序列号(SEQUENCE-NUMBER-OF-LAST-CHANGE)指的是查询必须看得见的由查询所归属的事务产生的最高改变的序列号。

    为数据项版本维持的数据

    如前所述,有两种方式造成数据项版本可能丢失一个查询需要看见的改变:1)从数据项版本中移出(roll out)的改变;2)在数据项版本从数据项的当前版本中克隆出来以后针对数据项的当前版本的改变。这个从数据项版本中删除的改变被称为“删除数据(removed data)”,而跟踪这个数据的必要信息被叫做“删除数据信息(removed-data information)”。

    删除数据信息与每一个数据项版本相关联。该删除数据信息包括如下内容:

    1)最近包含时间(MOST-RECENT-INCLUSION-TIME):其改变还没有被从数据项版本中移出的最近的事务的提交时间。对于数据项的当前版本,其最近包含时间(MOST-RECENT-INCLUSION-TIME)总是无穷大。当改变被从数据项版本中移出时,该数据项版本的最近包含时间(MOST-RECENT-INCLUSION-TIME)被更新,用来反映最近事务的提交时间,以修改数据项版本中还没有移出改变的数据项版本。例如,如果事务TXA、TXB、和TXC分别在时间5、10、15向一个特定的数据项版本提交改变,然后从TXC移出改变,那么最近包含时间(MOST-RECENT-INCLUSION-TIME)将被设置为10。如果来自TXB的改变被移出,那么最近包含时间(MOST-RECENT-INCLUSION-TIME)将被设置成5。

    2)最近正在丢失的事务(LAST-MISSING-TRANSACTION):其改变正在从数据项版本中丢失的最近的事务的标识符。换句话说,最近正在丢失的事务(LAST-MISSING-TRANSACTION)指的是最后从数据项版本中移出的事务的事务标识。

    3)最近正在丢失的改变的序列号(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE):最近的并且是由最近正在丢失的事务(LATEST-MISSING-TRANSACTION)产生的正在丢失的改变的序列号。例如,假设最近正在丢失的事务(LATEST-MISSING-TRANSACTION)对于一个特定的数据项做了四次改变,而这四次改变分别与序列号11、25、32、和50相关联。如果这些改变中没有一个被从数据项版本中移出,那么最近正在丢失的改变的序列号(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)被清零。如果所有的改变都被删除,那么最近正在丢失的改变的序列号(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)被设置成11。

    4)其它移出事务指示符(OTHER-TRANSACTIONS-ROLLED-OUT-INDICATOR):如果由不同于最近正在丢失的事务(LATEST-MISSING-TRANSACTION)的事务产生的改变已经被从数据项版本中移出就设置该比特位。

    图1是根据本发明的实施例示出数据项版本100、更新数据项版本100的事务和为数据项版本100维护的删除数据信息的框图。

    数据项版本100包括数据106和与它相关联的删除数据信息(removed-data information)。删除数据信息包括最近包含时间(MOST-RECENT-INCLUSION-TIME)102,最近正在丢失的事务(LATEST-MISSING-TRANSACTION)103,最近正在丢失的改变的序列号(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)104和其它事务移出指示符(OTHER-TRANSACTIONS-ROLLED-OUT-INDICATOR)105。

    为了说明如何维护删除数据信息的各个部分,假设三个事务已经对数据项版本100做了更新。这些事务是TXA 110、TXB 111、和TXC 112。TXA 110在全局系统时间为10的时候提交。TXA 111在全局系统时间为12的时候提交。TXA 112在全局系统时间为14的时候提交。

    假设数据项版本100是当前数据项版本,在这种情况下,最近包含时间(MOST-RECENT-INCLUSION-TIME)将是无穷大,最近正在丢失的事务(LATEST-MISSING-TRANSACTION)将是0,而其它移出事务指示符(OTHER-TRANSACTIONS-ROLLED-OUT-INDICATOR)将不被设置,最近正在丢失的改变的序列号(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)也将被清零。

    假设为了移出TXC的所有改变,在数据项版本100上执行移出。同时假设TXC已经产生了序列号为11、25、32、和50的改变。现在数据项版本100的最近包含时间(MOST-RECENT-INCLUSION-TIME)将是13,即TXC的提交时间减1,最近正在丢失的事务(LATEST-MISSING-TRANSACTION)将是TXB,最近正在丢失的改变的序列号  (SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)将是11,而其它移出事务指示符(OTHER-TRANSACTIONS-ROLLED-OUT-INDICATOR)将被设置,这是因为由TXC所产生的改变已经被从数据项版本中移出。

    如果由TXB 111产生的一些但不是全部的改变接着被从数据项版本中移出,一种技术是将最近正在丢失的事务(LATEST-MISSING-TRANSACTION)设置成当前正在读数据项版本100的事务,将其它移出事务指示符(OTHER-TRANSACTIONS-ROLLED-OUT-INDICATOR)设为YES。最近正在丢失的改变的序列号(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)将被设置成读者的最后改变的序列号(SEQUENCE-NUMBER-OF-LAST-CHANGE)加1。如果读者的查询环境没有事务id激活(也就是说,在快照被获得而事务还没有产生任何变化的时候),那么最近正在丢失的改变的序列号(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)将不会被设置成读者的最后改变的序列号(SEQUENCE-NUMBER-OF-LAST-CHANGE)加1,因为这样做没有任何必要。

    如前所述,上面的字段被用来为删除数据维持信息,因此它们被统一的叫做删除数据信息。然而,删除数据信息不足以确定改变是否在一个数据项版本被克隆之后针对该数据项版本做出。

    为查询维护的数据

    每一个查询都有一个描述它的执行环境的环境。根据一个实施例,与每个查询相关联的环境信息包括如下一些内容:

    1)指示查询必须看到的快照的时间(TIME-INDICATING-SNAPSHOT-QUERY-MUST-SEE):

    表示查询必须看到的数据库中与快照相关联的时间。例如:如果一个指示查询必须看到的快照的时间(TIME-INDICATING-SNAPSHOT-QUERY-MUST-SEE)的值为10,那么这个查询必须看到在T=10或T=10之前被提交给数据库的所有改变,而不能看见T=10之后提交给数据库的任何改变。指示查询必须看到的快照的时间(TIME-INDICATING-SNAPSHOT-QUERY-MUST-SEE)通常在一个查询开始的同时就被设置,而且通常被设置成系统全局时间的当前时间。

    2)查询所归属的事务(TRANSACTION-THAT-QUERY-BELONGS-TO):

    如果查询是事务的一部分,查询所归属的事务(TRANSACTION-THAT-QUERY-BELONGS-TO)识别这个事务,如果查询不是事务的一部分,那么查询所归属的事务(TRANSACTION-THAT-QUERY-BELONGS-TO)就不被使用。

    3)最后改变的序列号(SEQUENCE-NUMBER-OF-LAST-CHANGE):

    查询必须看到查询所归属的处理事务所产生的最高改变的序列号。

    计算

    为了有效地识别提供给一个查询的数据项版本,克隆时间(CLONE-TIME)和最后看到时间戳(LAST-TO-SEE-TIMESTAMP)在系统中被用来维护删除数据信息和上面描述的查询环境信息。

    正如以后将更加详细描述的,这些信息不仅可以用来识别可能使用哪个数据项版本,而且也可以用来识别哪个数据项版本要求最少的转出(rollout)。这些计算包括与数据项版本相关联的删除数据信息以及与查询相关联的环境信息。这些计算如下所示:

    1.快照时间<=最近包含时间(MOST-RECENT-INCLUSION-TIME)&&

    2.最后看到时间戳(LAST-TO-SEE-TIMESTAMP)<=克隆时间(CLONE-TIME)&&

    3.(查询所归属的事务(TRANSACTION-THAT-QUERY-BELONGS-TO)指示没有用于查询的事务‖

    没有用于克隆的最近正在丢失的事务(LATEST-MISSING-TRANSACTION)‖

    查询所归属的事务(TRANSACTION-THAT-QUERY-BELONGS-TO)<>最近正在丢失的事务(LATEST-MISSING-TRANSACTION))那么

    数据项版本可能被使用。

    上面的逻辑式中使用的符号如下所示:

    1)“==”等于

    2)“<”小于

    3)“>”大于

    4)“<>”不等于

    5)“>=”大于等于

    6)“<=”小于等于

    7)&&逻辑与

    8)‖逻辑或

    矢量

    根据一个实施例,提供了矢量信息,以使分布式锁管理器(Distributed Lock Manager,以后简称DLM)能够确定在满足查询需求的数据项版本中哪个是花费最小工作量的最好的候选项。矢量与特定的数据项相关联,并包括关于那个特定数据项的所有数据项版本的信息。具体而言,这个矢量包括一个集群中所有节点的节点标识符列表,它将克隆时间(CLONE-TIME)与每一个节点上特定数据项的所有数据项版本的这些节点标识符相关联。

    例如,参考图3,用于一个特定数据项的矢量300有三个节点:节点1 310,节点2 320,节点3 330。节点1 310在它的缓存中包括三个特定数据项版本。这些数据项版本中的每一项都有一个与它们相关联的克隆时间(CLONE-TIME)。这个克隆时间(CLONE-TIME)在矢量300中被反映,与节点1 310相关联。具体的说,克隆时间-节点-矢量的关联(clone-time-to-node-to-vector association)311包含克隆时间(CLONE-TIME)1,克隆时间-节点-矢量的关联(clone-time-to-node-to-vector association)312包含克隆时间(CLONE-TIME)3,而克隆时间-节点-矢量的关联(clone-time-to-node-to-vector association)313包含克隆时间(CLONE-TIME)11。

    节点2 320在其缓存中包含一个数据项版本。这个数据项版本的克隆时间(CLONE-TIME)为15,它在矢量300中被反映,与节点2 320相关联。克隆时间-节点-矢量的关联(clone-time-to-node-to-vector association)314包含克隆时间(CLONE-TIME)15。

    节点3 330在其缓存中包含两个数据项版本。这些数据项版本中的每一项都有一个与它们相关联的克隆时间(CLONE-TIME)。这个克隆时间(CLONE-TIME)在矢量300中被反映,与节点2330相关联。克隆时间-节点-矢量的关联(clone-time-to-node-to-vectorassociation)315包含克隆时间(CLONE-TIME)16,克隆时间-节点-矢量的关联(clone-time-to-node-to-vector association)316包含克隆时间(CLONE-TIME)20。

    使用矢量以定位最好候选项

    包含查询必须看到的所有数据的数据项版本都是提供给查询的候选项。当任意候选项将工作时,通常优先选择最好的候选项。一般而言,第一选候选项是比第二候选项要好,否则内务操作(overhead)将不会被要求把第一候选项提供给查询,而是被要求提供第二候选项。内务处理的一部分包括移走查询不能看见的变化。一般来说,对于一个候选项,这些需要被移走的变化越少,这个候选项就越好。图4描述了数据库系统400,它有三个节点(节点1 310,节点2 320,节点3 330);以及一个分布式锁管理器440(如DLM)。每一个节点都有一个与DLM 440和缓存相关联的本地锁管理器(local lock manager,以后简称LLM)。

    节点1 310有缓存411和LLM 441。节点2 320有缓存421和LLM 442。节点3 330有缓存431和LLM 443。LLM 441、LLM 442、LLM 443不仅与三个节点(310、320、330)相关联,而且也与DLM440相关联。

    出于说明目的,假设图3中的矢量300正在被DLM 440使用,其次,假设查询450正在节点2 320上执行。在节点2 320上,查询450有下面的范围值:最后看到时间戳(LAST-TO-SEE-TIMESTAMP)9指示查询必须看到的快照的时间(TIME-INDICATING-SNAPSHOT-QUERY-MUST-SEE)8查询所归属的事务(TRANSACTION-THAT-QUERY-BELONGS-TO)TXB最后改变的序列号(SEQUENCE-NUMBER-OF-LAST-CHANGE)71

    在节点1 310上,数据项版本460在查询450开始创建数据项版本460之后在缓存411中被克隆。假设下面的值是与数据项版本460相关连的:克隆时间(CLONE-TIME)12最近包括时间(MOST-RECENT-INCLUSION-TIME)9最近正在丢失的事务(LATEST-MISSING-TRANSACTION)TXD最近正在丢失的改变的序列号(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)73其它移出事务指示符(OTHER-TRANSACTIONS-ROLLED-OUT-INDICATOR)未设置

    而且假定移出还没有被执行,那么这些数据项版本的最近包含时间(MOST-RECENT-INCLUSION-TIME)将与在图3中描述的克隆时间-节点-矢量(clone-time-to-node-to-vectors)的克隆时间(CLONE-TIME)有相同的值。

    根据以上的假设,查询450将请求DLM 440的数据项。DLM330将检查该矢量并发现节点1 310有一个最近包含时间(MOST-RECENT-INCLUSION-TIME)为11的数据项版本与节点1相关联(参照图3,在克隆时间-节点-矢量313中的克隆时间(CLONE-TIME)为11。)。既然这个最近包含时间(MOST-RECENT-INCLUSION-TIME)是所有最近包含时间(MOST-RECENT-INCLUSION-TIME)中与查询最后看到的时间戳(LAST-TO-SEE-TIMESTAMP)最接近的,DLM 440将转发查询请求给节点1 310。在节点1 310上的处理将完成扫描缓存411以发现最能满足查询需求的数据项版本的工作。该处理不假定最近包含时间(MOST-RECENT-INCLUSION-TIME)为11(参考图3,克隆时间-节点-矢量313)的数据项版本是最好的选择,因为在查询450的请求到达节点1 310的时候,可能获得了一个更好的数据项版本。在这个实例中,确实是这种情况。具体地,节点1 310包含了克隆时间(CLONE-TIME)为10的数据项版本,这是与最后看到时间戳(LAST-TO-SEE-TIMESTAMP)为9的查询更接近的数据项版本。如计算部分所概括描述的,比较查询与数据项版本的值的计算被执行。基于这些计算,确定一旦执行移出,数据项版本460将适合查询450的要求。最后改变的序列号(SEQUENCE-NUMBER-OF-LAST-CHANGE)的值大于71的改变将被移出,移出的数量将取决于改变的序列号。既然数据项版本460可以被用来满足查询450的需要,数据项版本460将被装载到节点2 320。

    其它应用

    本发明除了此处给出的例子以外还有许多应用。例如,此处描述的技术可以在系统中的会话所维护的数据的任何环境中被使用。该技术也可以被用在任何支持分布式缓存并且需要同步包含分布式缓存的不同的缓存中的数据的多节点系统。

    硬件概述

    图5是一个描述了在其上实现了本发明的具体实施例的计算机系统500的框图。计算机系统500包括总线502或其它用于传送信息的通信装置、以及与总线502连接用于处理信息的处理器503。计算机系统500还包括一主存储器506,如随机存取存储器(RAM)或其它动态存储设备,与总线502连接,用于储存信息和将被处理器503执行的指令。主存储器506也可以被用来储存临时变量或在处理器503执行指令的过程中产生的中间变量。计算机系统500还包括一只读存储器(ROM)508或者其它静态存储设备,连接至总线502,用于储存静态信息和用于处理器503的指令。提供了存储设备510,例如磁盘或光盘,连接至总线502,用于储存信息和指令。

    计算机系统500可以通过总线502连接至显示器512(例如阴极射线管(CRT)),用于显示信息给计算机用户。一包括字母和数字以及其它键的输入设备513,连接至总线502,用于将信息和指令选择传送给处理器503。另一种类型的用户输入装置是指针控制器516,例如鼠标、轨迹球、或者指针指示键,用于控制指针在显示器512上的移动。指针控制器用来传送指针消息和处理器503的指令选择。输入装置通常具有两个轴的两个自由度,一个是第一轴(例如x),一个是第二轴(例如y),这就允许该装置在平面上确定位置。

    本发明涉及计算机系统500的使用,用于选择将被提供给事务的数据项的特定版本。根据发明的一个实施例,响应于执行包含在主存储器506中的一个或多个指令的一个或多个序列的处理器503,计算机系统500执行对将被提供给事务的数据项的特定版本的选择。这些指令可以从另一计算机可读介质(例如存储设备510)读到主存储器506中。执行包含在主存储器506中的指令序列,使处理器503执行此处描述的处理步骤。多个处理装置中的一个或多个处理器也可能被用来执行主存储器506中所包含的指令序列。在可选实施例中,硬件的有线电路可能被用来代替或与软件指令结合来实现该发明。因此,本发明的实施例不被限制在硬件电路与软件的任何特定组合中。

    在这里用到的术语“计算机可读介质”指的是参与提供指令给处理器503进行执行的任何介质。这样的介质可能有多种形式,包括非易失性介质、易失性介质、传输介质等,但不限于此。非易失性介质举例来说包括光盘或磁盘,如存储设备510。易失性介质举例来说包括动态存储器,例如主存储器506。传输介质包括同轴电缆、铜线、或光纤,也包括构成总线502的布线。传输介质也可以采用声波或光波的形式,例如无线电波中产生的声波和红外数据通信中的光波。

    计算机可读介质的通常形式举例来说包括:软盘、软磁盘、硬盘、磁带、或其它任何磁性介质、CD-ROM、任何其它光学介质、穿孔卡片、纸带、任何其它具有孔图案的物理介质、只读存储器(RAM)、可编程只读存储器(PROM)、以及可擦写可编程只读存储器(EPROM)、闪存(FLASH-EPROM)、任何其它记忆芯片或记忆棒、下文所述的载波、或者其它任何计算机可以读取的介质。

    计算机可读介质中的各种形式都可以被用来承载处理器503执行的一个或多个指令的一个或多个序列。例如,指令首先装载到远端计算机的磁盘上。这台远程计算机可能把这些指令加载到其动态存储器中,使用调制解调器在电话线上传送指令。位于计算机系统500上的调制解调器能够通过电话线接收数据,并使用红外转换器把数据转换成红外信号。与总线502相连的红外探测器可以接收红外信号中携带的数据,并把数据放到总线502上去。总线502把数据加载到主存储器506中,处理器503再从主存储器中取回数据并执行指令。主存储器506接收到的指令可能在处理器503执行前或执行后被有选择的储存在存储设备510上。

    计算机系统500还包括一个与总线502相连的通信接口518。通信接口518提供了一种与连接到本地网络522的网络链接520的双向数据通信。例如,通信接口518可能是综合服务数字网(ISDN)卡,或者是调制解调器,它向相应的电话线类型提供数据通信连接。再例如,通信接口518可能是局域网(LAN)卡,提供到兼容的局域网的数据通信连接。也可以实现无线连接。在任何实现方式中,通信接口518都发送和接收电子信号,电磁信号、或光信号,这些信号承载着代表各种信息的数字数据流。

    网络链路520一般通过到其它数据设备的一个或多个网络提供数据通信。例如,网络520可以提供通过本地网522至主机523或至由因特网服务提供商(ISP)526操作的数据装置的连接。ISP 526反过来又通过万维分组数据通信网络,现在通常称为“因特网”528,提供数据通信服务。本地网522和因特网528都使用承载数字数据流的电信号、电磁信号、或光学信号。经过各种网络的信号、网络链接520上的信号、以及经过通信接口518的信号,承载着送到和来自计算机系统500的数字数据,是传输信息的载波的示范形式。

    计算机系统500能够通过网络、网络链接520、和通信接口518发送消息和接收数据,包括程序代码。在因特网实例中,服务器530可以通过因特网528、ISP 526、本地网522、和通信接口518传送被请求的应用程序代码。根据该发明,为了选择一个数据项的特定版本,提供了一个提供给这里描述的事务的下载应用。

    接收到的代码在被收到时通过处理器503运行,和/或储存在存储装置510中、或者其它非易失存储器中,用于随后运行。这样,计算机系统500可以得到载波形式的应用程序代码。

    结论

    本文描述的技术有效地确定了哪个数据项版本能够被提供给查询。它也可以被用来确定哪个数据项版本将需要最少的工作量,以满足查询,方法如下:

    1)使第一新字段和每个克隆相关联,其中,第一新字段表示数据项版本是最新的时间,

    2)使第二新字段和每个查询相关联,其中,第二新字段表示事务做出的该查询必须看到的最后的改变,以及

    3)使用克隆的第一新字段的值和查询的第二新字段的值,来确定该克隆是否能够提供给该查询。

    该机制除了以下几个方面外,已经达到了预定目标:

    1)通过集群中所有的节点广播消息,以触发数据项的所有非当前的数据项版本的更新或失效,

    2)获得锁,或者

    3)执行过多的移出(rollout)。

    因此,该机制能够提供满足查询又花费最少工作量的合适的数据项版本。

在分布式数据库环境中的一致性读取.pdf_第1页
第1页 / 共35页
在分布式数据库环境中的一致性读取.pdf_第2页
第2页 / 共35页
在分布式数据库环境中的一致性读取.pdf_第3页
第3页 / 共35页
点击查看更多>>
资源描述

《在分布式数据库环境中的一致性读取.pdf》由会员分享,可在线阅读,更多相关《在分布式数据库环境中的一致性读取.pdf(35页珍藏版)》请在专利查询网上搜索。

本发明提供了确定将哪个数据项版本提供给查询的技术。根据该技术,确定是通过以下步骤实现的:将一新字段和每个数据项版本相关联,这个新字段指示了数据项版本当前的时间;将一新字段和每个查询相关联,指示了查询必须看到的由查询所归属的事务做出的最新改变;以及部分地根据这两个新字段的值的比较来确定用哪个数据项版本来回答查询。。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1