嵌套数据库的实现方法、系统和数据结构的制作方法

文档序号:6470909阅读:1004来源:国知局
专利名称:嵌套数据库的实现方法、系统和数据结构的制作方法
技术领域
本发明通常涉及一种数据管理系统。具体说,本发明涉及利用一种加锁管理以保护数据资源不为错误的使用而破坏的方式的数据管理系统和事务处理系统。本发明还涉及数据库管理系统实施的方式,这种方式可基于计算机存储器中的数据结构而应用嵌套数据库。而且,本发明还可应用于任何可同时多人访问共享数据的系统。
背景技术
当两个人或者群体要求访问一个数据库中的信息,或者想同时访问另一个位置中的信息,或者想要同时或者大约同时往数据库中写入同样的信息时,那么固有的冲突及问题就会产生。在数据共享的地方,这些问题有可能发生在任何类型的应用程序中,字处理和工程设计就是发生同时访问的两种领域,尽管本发明可应用于希望不止一个群体使用同一数据的任何设定或者场合。
在数据管理系统中,要求有ACID特性(即不可分割性、一致性、隔离性、耐久性)。
不可分割性(Atomicity),指要么事务(例如对数据库的更改)的结果在数据库中都正确地得以反映,要么反之在数据库中不留下任何变动。一个事务一般可说成是提交执行或者中断执行。当提交执行一个事务时,因该事务而对数据库造成的全部变动被可靠地保存,使数据库变更保持连续性。当中断执行一个事务时,由该事务造成的对数据库任何的更改行为都被中断、收回,再次使数据库得以保持连续性。
一致性,指每个事务只提交执行对数据库来说是合法的结果。于是一个事务就必须把数据库从一个连续状态带进另一个连续状态。
隔离性,指必须把事务中的诸多事件与另一个事务中的同时运行的事件分离开来。同时进行的事务不允许相互干扰。它们运行时得看起来似乎有着各自的数据库。
耐久性,指当一个事务完成并向数据库提交执行结果时,系统就必须保证这些结果能经以后发生的故障而得以保存。
虽然强烈要求具有上述ACID特性,但是同一数据的多次写入,这就常要求对ACID特性有所折衷。要想在让每一个人或者每一个事务去做任何他、她或者它随时想要做的事情 的同时,而又想完全保持事务各自的特性是很困难的。
简单地让使用中的数据又被另一个用户访问,这都会导致对ACID诸特性的内在冲突。

发明内容
因此,本发明的目的就是让多个群体访问同一数据。本发明进一步的目的是在一个多用户的环境下锁定数据,在一定程度上维护ACID特性。本发明还有一个目的是发明一个数据库管理系统,其中多用户或者多群体通过不同的数据库访问某个数据,这可以称之为数据库、虚拟数据库或者子数据库。另外,本发明还有一个目的便是提供一种数据管理系统和/或数据结构,其中,可以使子数据库或者虚拟数据库得以实施。
这些及其他目的,用一个包含数据结构的存储器、一种方法、一个系统、和计算机程序产品来实现,这些都必须能实现在一个多用户环境中对数据的锁定和同时控制。对于当前的事务,可以联系到并索引一个与那个事务相联系的数据库或者子数据库。涉及该事务的这种数据结构可以称之为事务控制块。
数据结构,在这里叫做数据库控制块,指明了哪个数据库或者子数据库与哪个数据项相关联。而且,有一个数据结构涉及了该数据的实际锁定,叫做锁控制块,和/或锁请求块。
结合以上各种数据结构,则可以实施嵌套数据库、子数据库或者虚拟数据库的概念。例如数据结构最好设置成能够确定一个具体事务及其项下的子数据库的上下文数据库。进而,与该事务相关联的数据结构也可包含对已锁定状态的和未决锁定状态的查询,这可以通过与数据锁定相关联的数据结构来体现。涉及虚拟数据库、数据库控制块的数据结构为锁定数据结构所索引,以便其被确定与数据库还是子数据库发生联系。
按照本发明的一个实施例,用一个存储器存储被数据处理系统访问的数据。这种数据并不一定就是最终用户所需的数据项,而可能是涉及数据结构的数据,它显示了锁定和子数据库信息。该存储器包括一个含有事务信息的数据结构。这个数据结构最好是当作一个事务控制块来实施。该存储器还包括一种含有事务数据锁定信息的数据结构。该数据结构可叫做锁控制块和/或锁请求块。而且,还有多个数据结构包含多个数据库的信息。这些与数据库关联的数据结构可以叫做数据控制块。数据库控制块用于把一个具体的数据库或者子数据库与一个锁和事务联系起来,反之亦然,以正确地控制嵌套或子数据库。
本发明也涉及实施嵌套或者子数据库概念的数据结构的创建和使用。显示数据项被锁定的方法包括步骤在第一层级(hierarchical level)中创建一个数据结构,该数据结构要指明该数据项由第一事务锁定,该第一事务与第一层级相关联。
另外,该方法还包含一个创建步骤,在第二层级上,创建一个数据结构指明数据项被第二事务锁定,该第二事务与第二层级相关联。于是,上述步骤创建了一个锁定所控制的数据结构的层次,如锁控制块。层级中的每层都可以被不同的数据库、子数据库或者虚拟数据库使用。
为了能访问数据项,必须先确定在该数据项里是否有一个现有的锁。可以按照如下步骤实施(a)确定数据的锁是否存在于第一层级,并且(b)在第一层级上为该数据项创建一个锁,如果步骤(a)确定该数据项还没有被锁定的话。
当步骤(a)确认该数据项的锁不存在时,执行步骤(c),确认该数据项的锁是否存在于第二层级。进而,执行步骤(d),当一个数据项上的锁没有存在于第二层级上时,则在数据项上创建一个锁。
除了执行以上功能的方法步骤外,本发明还包括一种系统,它含有各种执行以上功能的装置。而且,本发明还进一步包括一种计算机程序产品,其中含有可执行指令,用于执行本发明的方法。


通过参照本发明的如下附图,就可以使本发明的特征和由此带来的优点得以更透彻的分析,并更加容易为人所理解图1为方框图,显示了实现本发明的数据库管理系统;图2图示了用于对数据源进行追踪的数据结构,它被分成子数据库;图3图示了多个链接锁控制块和锁请求块;图4图示了数据结构,其包含数据库锁控制块(SLCB),其用于在子数据库中建立数据项的加锁设定;图5图示了每个事务都归属于一个具体的数据库或者子数据库;图6图示了在具体的实施例中,一个事务只能访问在其自己的数据库或者子数据库中的资源;图7图示了一个数据库控制块(DBCB)数据结构的示范性的实施方式的示意图;图8图示了事务控制块(TCB)数据结构一个示范性的实施方式;图9图示了一个示范,把一个子数据库导入到一个层级体系中;图10图示了一个示范,在一个数据控制块中使用活动事务字段,在事务控制块中使用上下文数据库和子数据库字段;图11提供了一个选择性实施方案,其中的每个子数据库中都有一个搜索列表,该搜索列表包括子数据库锁控制块的索引值;图12为一个实施范例,其中子数据库锁控制块包含在一个阵列或者列表之中;图13图示了把数据库控制锁定块和事务控制块整合进一个单层级数据结构体系中的可行方案;图14为锁控制块数据结构提供了一个选择性实施方案;图15为创建新子数据库的流程图;图16为流程图,图示了如何安置一个子数据库,尽管并不要求移动用户数据的物理位置;图17为流程图,图示了如何利用图11的数据结构来安置子数据库的可选择实施例;图18为流程图,图示了在嵌套数据库的场合对一个锁请求的处理过程;图19为流程图,图示了一个可选实施方案,在锁控制块有了图11的可选结构时,用以处理在嵌套数据库场合的一个锁请求;图20为流程图,图示了终止使用一个子数据库的过程;图21A-图21D图示了一个范例,其中多个用户要求使用同一个数据库,该数据库包含4个编进子数据库的文字处理文档;图22A-22D分别相对于图21A-图21D,并依照图21A-图21D被执行的范例来表示数据结构设置;以及图23A-23D分别相对于图21A-图21D的范例,却利用了一个数据结构设置,其中每个数据库都有一个搜索列表或者阵列;以及图24A-24D图示了一个范例,即多个有着不同权限的用户通过嵌套数据库对一个文档的各个部分进行共享。
具体实施例方式
现参照附图,更具体地说,比如其中的图1,其中图示了一个数据库管理系统100(DBMS),在这些附图中,相同的标号表示相同的或者相应的部分。事务的操作和管理由一个事务管理器102和一个锁管理器104来处理,二者都是软件程序,都由系统的数据处理器或者CPU 106来执行。事务管理器中维持着一个事务列表108,常常以树结构来施行,以明了未决事务的状态和属性。锁管理器104维持一个锁列表110,常有的实施方式是使用散列表以及各种链接表和/或树结构(后面将会更加详细地探讨这一点)。锁列表110保持对数据库112上的数据资源的锁请求的跟踪。锁列表110可以存储关于一个事务的存储器地址、一个事务识别符、一个锁类别或者模式、锁参数、以及与锁相联接的数据库或子数据库的信息。数据库112存储有DBMS 100所执行事务可访问的数据。尽管常常可能遇到永久保存的需要,但并不要求数据库112对数据进行永久性的存储。作为可选择方案,所存的数据应当可以是暂时性的。那么,数据库内容中互相协作的事务就得以处理仅须存在几分钟、几小时、几天的数据资源,因此,当系统被拆或者关闭时,它们便不复存在。
典型的DBMS 100包括有附加存储器资源114,一条或者更多系统总线116,用以联接系统的各个部分,以及一个网络接口118或者其他类型的通讯接口,用以处理同客户工作站120的通讯。存储器114可以通过任何类型的存储器来实现,包括但不限于随机访问存储器,最好是既可读、又可写。此外,存储器114可以用于存储本发明的数据结构。虽说图1只描述了本发明的一种实现的可能性,但任何符合要求的硬件和软件都可以用于实现本发明的诸项功能。例如可以用任何类型的计算机、计算机服务器、和/或带有任何适用的操作系统的个人电脑和/或硬件来实现本发明。这些组件、结构和硬件的操作方式都是熟知于社会的。
参见图2,一个最佳实施列中的“锁列表”110按照如下方法实施。用一个杂凑函数150来把一个资源标识符(RID)在一个散列表152中转换为散列表地址,在具体实现时,可以将其设定为固定的大小。被杂凑函数150所散列的资源标识符可以包含资源类型或者层指示符(例如指明要锁定的资源是否是一个数据库、列表、页面、数组或者其他),以及资源的起始地址。每个可寻址空位154,例如参照154-1,散列表在没有锁定资源符合空位的散列表地址时则包含一个空值,而在至少有一个锁定资源、该资源的杂凑值与空位的散列表地址相对应时则包含一个指针,显示一个锁控制块(LCB)160的列表,例如LCB 160-1。
锁管理器将为每一个实际已锁定的可锁定数据项指定(如创建和存储)一个锁控制块(LCB)160,并将为每一个事务的锁指派一个锁请求块(LRB)162,如LRB 162-1。那么,如果有一个具体的数据库对象在一个特定时间点被三个不同的事务锁定,那么就会为该对象和一个“悬于”LCB的三个LRB(每一个事务各一个)的链接列表产生有一个LCB160。
每个LCB 160最好包括一个锁识别符170,典型的配置包括有用于一个锁定资源的资源识别符的复制件;一个模式指示器171,指示出LCB所提供的数据库资源中授权的全部锁定的限制性最高的访问模式(例如浏览、阅读、参数化读取、写入、参数化写入、或者拒绝访问);
一个可选择的读取参数指示器172,只要在锁定的资源上未决,并且该参数被参数化读取锁正在使用,那么,最好是以位图模式,提供读取参数的逻辑“或”;一个可选择的写入参数指示器173,只要在锁定的资源上未决,那么,最好是以位图模式,提供写入限制参数锁的写入参数。读取和写入参数指示器172和173的细节进一步构成本发明的一个方面,这些情况在授予给Anfindsen的美国专利No.5,983,225中已有所详细说明,引用它作为参考。
一个授权的请求列表指针174,对于LCB提供数据库资源,指明经授权的资源请求的LRB 162列表;一个未决请求列表指针175,对于LCB提出的未决资源请求(例如未经授权的),指明一个包含LRB 162的列表(也可称阵列);一个数据库索引字段177,为一个LCB所属的数据库或者子数据库的索引。
本发明的一个特点就是数据可以分到不同的数据库,这里称之为子数据库、虚拟数据库、或者就叫数据库。通过如此区分,就可能实现多用户或事务使用同一个数据。在这样一个系统中,本发明人很清楚的是,必须明确某个锁属于哪个数据库,而这种信息可以通过数据库索引字段177很容易地确定下来。本发明的这种特征通过使用一种诸如数据库索引系统177的索引物来实现,尽管如此,但这并不是唯一,其他比如包括LCB中数据库名称。图2中,数据库索引系统177中提到了一个全局数据库192。
这个全局数据库192是最高等级的数据库,其它的子数据库叫做DB1、DB2……DBn。子数据库功用的更多细节如下详述;一个下级LCB索引178,其指示出一个子数据库锁控制块(在不同的等级结构中也可以是虚拟或者子数据库),比如子数据库锁控制块(SLCB)164-1。该索引系在不同的等级中,可以为空,也可以为一个子数据库锁控制块。关于它的更多信息后面将会介绍;以及一个下级LCB指针176,指向与该LCB共享同一杂凑地址的下级LCB。
LCB 160中的字段172和173所提供的读写参数对本发明来说并不是必不可少的,但其提供了一个能将其和本发明的子数据库面结合或者分离使用的特性。此外,本发明的参数172和173进一步发展了DBMS所使用的传统的访问方式。一套规定的读/写参数字段的每一个不同的值都代表着一个相应的数据可靠性分类或者类别。于是一个参数字段有着8个参数值(每一个代表着一个8比特参数字段的相应的比特),这个参数字段得以允许这种限制达到8种不同的数据可靠性类别。在本发明的其他实施例中,这些参数可以用于指明一个数据库对象的属性,而非“可靠性”,比如应用程序的识别符以及类别,其包含了一个在对象上的写锁,或者其他应用程序可以用于判断它们是否愿意读取数据,而不管上面有没有写锁定的信息。
每一个LRB 162,发出一个已授权的或者未授权的锁请求,最好包含一个模式指示器181,用于指明访问模式,(例如浏览、读取、参数化性读取、写入、参数化性写入、或者拒绝访问),其中资源被一个具体的事务所访问或者请求;一个事务指示器184,用以识别请求或者包含针对LRB的锁的事务;一个可选择参数指示器182,提交读或写访问模式参数,它由读或写锁的拥有人使用,就最好以位图的形式;只有锁或者锁请求的拥有人使用一个参数化访问请求时,才适用该字段。对于锁控制块的参数172和173,参数字段182对于实现嵌套数据库或者本发明的子数据库面来说,不是必不可少的;一个锁指针185,用于构建一个某事务所属的LRB链接列表,比如事务T1,由事务识别符184所识别。由此可知,LRB的链接列表可以实现以包括更多的特性,比如两重链接列表,以保证在两个方向上追踪一连串的LRB。更多的LRB选择方案后面会详述;以及一个指向下级LRB的下级LRB指针186,当需要为同一个数据库资源作为这个LRB时。
LCB中的读和写参数字段和LRB中的访问模式参数字段典型的大小为1到2个字节,支持8到16个不同的参数值。
子数据库LCB(SLCB)164-1可以用如同LCB 160-1相似或者相同的方法构建。那么,子数据库LCB 164就可以被看作一个SLCB,以便清楚地指明LCB用于控制对一个子数据库中数据的访问的锁定。在图2中,SLCB 164-1对子数据库DB1发出的索引或者指针就是数据库索引177,它表明SLCB 164-1与子数据库DB1相联系。以类似的方式,LCB160-1的数据库索引177涉及全局数据库192。但是,由于DBMS可以设置为包含全部LCB,或者至少LCB在第一层,索引全局数据库192,可行也是最好的办法便是从LCB中消除数据库索引字段177。
由此可见,通过以上说明,附图显示了指针,在图中它从一个字段指向另一个项目。这些指针并不同于以往计算机的指针,而是可以实现为任何类型的索引或者树结构。而且,作为索引的信息可以有选择地包含在数据结构本身之中。所以,不用字段177来索引全局数据库192,而是把关于全局数据库192的信息放进数据库字段177之中。后面将会更详细地描述到在最佳实施例中的各种数据库,包括全局数据库192和子数据库DB1、DB2…DBn,都是数据库控制块DBCB,都不包含最终用户最终所要求的数据。相反,数据库控制块被用于指明哪个数据库或者子数据库与哪个锁或者锁控制块(或者LCB)相关。
SLCB 164-1索引LRB 162-2,其可以实施为与LRB 162-2同样的结构。图2描述两个事务控制块T1和T2。事务T1与全局数据库相联系,反之,事务T2与子数据库DB1相联系。此外,可以看到,事务T1通过索引LRB 162-1得到一个授权锁请求。同样地,事务T2索引LRB 162-2,指明事务T2在与子数据库DB1相关联的数据上已锁定。
本发明中,锁管理器的主要部分是锁控制块(LCB)。如同在以往的数据库管理系统中一样,用LCB来识别一个可锁定资源,例如一个对象、一个相关列表中的数据行(也叫数组)、或者一个记录。这样的资源一般说来由一个对象ID(OID)、数组ID(TID)、或者一个数据行/记录ID(RID)来识别。简言之,项目RID在下文中用作为xID的一个属项。
图2图示了一个散列表,但本发明并不限于通过散列表来实现。这种考虑的关键在于需要利用一个RID来寻找相应的LCB,并且,散列表是最佳的实现方式。但是,也可以通过一个阵列或者其他类型的检索类型结构来实现,本发明不限于散列表的应用。
如果在一个指定的RID中事务没有锁定,那么有一个便捷的方法来表现这一点,即在数据结构中,使RID不拥有一个LCB就可以了。换句话说,散列表中现成的LCB仅仅提供一个所有可锁定资源的子集,比如碰巧在某个时间点至少有一个事务锁定的资源。
作为一个在同一个方向上链接LCB的可选方案,一个双链接表的方案可以采用,这样就可以在各个方向上追踪一连串的LCB。对每一个可锁定资源来说,可以考虑多个事务在某个资源上只拥有一个(或者某个)锁。每一个授权或未授权的锁请求由一个锁请求块LRB提出。对每一个LRB来说,最好是索引它自己或者索引它的LCB。为了使附图清晰并隔有空间,这个特点可以不包括在附图中。也可以用双链接结构来实现LRB链,这样在两个方向上都可以追踪LRB链了。此外,还可以用第一个LRB来索引LRB链上最后一个LRB。于是当需要尽快找到一个数据链的末尾时,效率就可得以提高(例如当一个新的LRB需要插进未决列表的末尾时)。例如,要实现该特征,在图3中,LRB 162-5则索引LRB 162-7。
图3是一个数据结构的范例,它可以为本发明所用。但是,DBCB没有清楚地表示出来。事务控制块(TCB)T1和T2代表事务。一个事务可以有多个锁,所以可以有多个LRB,尽管一个LRB最好是只从属于一个事务。每一个TCB维护一组LRB。图中,用虚线表示从TCB到LRB以及LRB之间的关系。也可以把LRB建到双链接表中,进而实现LRB,使每一个LRB都能索引它自己的事务控制块。例如,在这种情况下,图3中的每一个LRB 162都会索引TCB T1或者T2之一。
从本发明的LCB和SLCB数据结构中显然可以看出,一个LCB用于表示可锁定资源和数据库。就是说,一个LCB现在在一个具体的数据库(全局数据库或者其中的子数据库之一)中代表一个可锁定资源。
图4图示了用于锁定的数据结构,它显示每一个LCB(或者SLCB)最好是对应于单个的数据库,由此对应于一个单个的数据库控制块(DBCB)。例如图1,SLCB 164-1索引DB1,SLCB 164-2索引DB2,SLCB 164-3索引DB1,以及SLCB 164-4索引DB2。需要的话,也可以避免使全局数据库拥有一个数据库控制块,因为最低层的每一个LCB都隶属于全局数据库,并且对事务和LCB来说,都可当作是缺省值。这种情形下,LCB和TCB的索引就会用于指示与全局数据库的关系。
图4进一步说明一个子数据库的级别的随机数如何产生。如上所述,可以这样实施使SLCB和LCB结构相同,并且,在该专利申请上如此做出标签,其目的仅仅在于区别子数据库的LCB和全局数据库的LCB。但是,一些存储工作可以通过实现SLCB而完成,无须用于同LCB捆绑在一起的“下级LCB索引”。但是,如果有必要,SLCB可以在一个单向上链接到另一个SLCB上,或者按照要求进行双链接。图4中,LCB 160-1和160-2都是第一层的LCB,都与全局数据库相联。SLCB 164-1和164-3是第二层LCB,也可以看成是第一层SLCB。SLCB 164-2和164-4是第三层LCB,或者看成第二层SLCB。在同一层SLCB之间的可选择的链接,表示为虚线箭头或者引用线,也可以实施为双链接,以便SLCB 164-3也可以索引SLCB 164-1。
图5图示了每一个事务,在最佳实施例中,属于一个单数据库。事务控制块T1、T2、T3…Tm都索引一个单数据库控制块。于是,就可以判定数据库或者子数据库的层级,这些数据库与一个具体事务相关联。
图6图示了示范性的数据结构,其中最佳实施例中的事务只访问它们自己数据库中的资源。例如,事务T1索引全局数据库192,用实线箭头表示,事务T1还以虚线箭头索引LRB 162-1和162-3,它们都与第一层或者被散列表152索引的LCB层相联系。另外,事务T2及其事务控制块还索引子数据库DB1,或者成为它的一部分,以及进一步索引LRB162-2和162-4,用虚线表示,两者与第二LCB层或者第一SLCB层相联系,并对应于DB1。在最佳实施例中,一个事务在一个且唯一的数据库的上下文中得以执行。此外,最好是让一个事务,被禁止访问不处于该事务的数据库的范围之中的资源。在实施层,这将导致一个事务的LRB从属于或者联系上LCB(或者SLCB),它们把同一数据库控制块索引为该事务的事务控制块参照物。例如,图6中,T2在DB1中执行。
因此,T2的LRB(162-2和162-4)属于LCB(SLCB 164-1和164-2),其索引同一个数据库DB1。
图7为一个数据库控制块(DBCB)的实施范例。在一个最佳实施例中,不要求DBCB存储最终用户最后所要求的数据,而要求DBCB通过LCB或者SLCB至少部分地指明归属于哪个数据库或者子数据库。
图7中,DBCB 202包含一个识别符字段204,其缩写为ID。该识别符字段对DBCB进行识别或者判定其名称。一个活动事务字段206,缩写为Act Tx,启用其中之一从一个DBCB到每一个事务进行追踪,该事务在这个时间点活动于当前数据库或者子数据库。这很有用,例如,在一个子数据库的拥有者希望执行或者终止该子数据库时。系统应当判断子数据库的活动事务是什么,以及判断活动事务列表是否为空。子数据库的拥有者应当得到警示,表明其他人正在使用该子数据库,并询问是否需要终止在这个时间点的事务。还有必要给该用户一个权利来终止或者不终止子数据库。
另一种实施方案是,当有活动事务在里面运行时,某个时间点上,系统不可终止某个子数据库。此时,该事务必须终结,以便只有当没有活动事务时,子数据库才得以终止。没有这样的检查,系统就中止事务,并且数据库管理系统的特性则无法发挥。
活动事务字段206可包含多个参数、一个单一参数(它是一个包含一个全部活动事务列表的链接列表的一部分),还可能包含名字或者其他活动事务识别方式。除此之外还有办法,要实现活动事务字段,可以用双链接列表,它为上述的数据库或者子数据库索引每一个活动事务。
固有事务字段208,缩写为Own Tx,是一个创建并因此而拥有所述DBCB的事务的索引。对全局数据库来说,可以设定为空参数,而对子数据库,该字段会索引它的创建者/拥有者事务控制块。一个超级数据库字段210,缩写为Sup DB,是DBCB的索引,它代表这个数据库中的一部分。
一个子数据库字段212,缩写为Sub Db,是整体DBCB的一个索引,它为这个数据库提供了一个子数据库。一个下级数据库字段214,缩写为Next DB,在数据库层级中的同一等级中索引下级DBCB。一个上级数据库字段216,缩写为Prev DB,在子数据库层级中的同一等级中索引下级DBCB对上级DBCB是一个索引。下级DB和上级DB字段用于在子数据库层级中某个指定的层中创建一个DBCB的双链接列表。于是,有着同样父系的数据库的子数据库就可能被链接到这样一个列表。DBCB 202最后一栏的三个小点或者椭圆,按照要求,它们代表可能包含在DBCB中的附加字段。
设置DBCB的目的在于具体而精确地指明在资源层级和数据库层级中一个具体的事件比如锁归属的地方。于是,一个人便可比较容易地判定子数据库和系统其他部门的关系。
关于以上讨论的DBCB和后面详细讨论的事务控制块(TCB),存在着大量包含于这些数据结构中的字段,这些数据结构并没有完全在每一幅图中表现出来。为了便于理解和管理索引的数量,除了必要的以外,并没有对每一个索引都进行了说明。从而在图表中没有显示的索引并不能理解为该索引不存在,同样地,一个数据结构包含一个具体的索引或者字段,并不说明一定存在着这么一个索引,它完全符合数据结构的条件。DBCB最好建成为等级结构。但是,也可以在等级结构中不设置DBCB。
图8图示了一个事务控制块(TCB)数据结构222。这个数据结构用于指明活动事务,指明该活动事务从属于哪一个数据库或者子数据库层级,和/或判定被锁定的资源和一个事务锁的状态。
在一个TCB中,存在着一个识别符字段224,它识别诸如事务的名称。一个上下文数据库(Context Database)字段226,缩写为Ctxt DB,用于索引数据库的DBCB,其为所述的事务提供上下文或者范围。这在创建事务时就可确定。按照本发明的实施例,从一个事务产生到它的终结,其存续并实施全部的内容都在一个单一数据库中。本发明在最佳实施例中有效而恰当地运做,靠的是一个单独的上下文中使一个事务存在期间自始至终的一个规则。于是,上下文数据库字段226可以用于提供一个所述事务的内容或者范围。例如,上下文数据库字段226可索引全局数据库,即相应于TCB的事务在全局数据库中执行或者按照它的上下文数据库更新全局数据库。
图8的子数据库字段228用于提供一组该事务已经创建的子数据库。显而易见这个字段可以是空字段或者索引内容为零。一个事务能够创建并因此拥有多个子数据库。依据正在执行的任务,就可以判定有多少子数据库为某个事务而存在。所以,当须要终止某个事务时,最好先知道这个终结指令发出前有哪个子数据库还存在。同样地,就可以知道那个数据控制块的子数据库,如上所述。
字段230中包含TCB的已授权锁请求,字段234包含TCB的未决锁请求。字段230和字段234可以通过从TCB到LRB的索引依据按照图的说明来实现,例如图6。
如果需要的话,可应用超事务字段236来维护一个事务的层级结构或者TCB。这个超事务字段236将索引或者指向一个等级比所述事务更高的事务。例如,超事务字段236可以用于索引已经创建或者允许创建所述事务的事务。
图9说明诸DBCB之间的关系,以及诸DCBC和诸TCB之间的关系。这些数据结构用于控制资源的锁定。图9中,散列表、LCB、SLCB和LRB没有说明,这样就使图不至于太复杂。尽管如此,这些数据结构都很正常地存在于系统中。图9中表示了TCB T1、T2、T3…Tm。还有DBCB 240、250、260、270、280、290、和300。在这个例子中,可以看到DBCB的等级。例如,DBCB 240在DBCB层级结构中是最高的DBCB,并且可以相当于全局数据库192。关于DBCB 240,ID字段241会指明这个DBCB是针对于全局数据库的。Own Tx字段243指向空,因为没有必要在DBCB中很详细地识别全局数据库事务的拥有状况或者拥有者。同样的道理,Sup DB字段244也指向空,因为全局数据库没有超级数据库。
一个Sub DB字段为这个数据库245索引子数据库的设置,在这种情况下索引DBCB 250。在全局数据库的层上,对这个具体的范例中没有其他数据库,所以,下级DB字段246和上级DB字段247都指向空。在图9中将会看到,在图7中活动事务字段206没有说明,仅在图中简单表示,而是出现在实施例中,活动事务字段如上所述得以应用。
在层级结构中低于DBCB 240的有DBCB 250和260。图9中并不是每一个字段都象这些自说明字段一样。但是,对于DBCB 250可以看到固有事务253索引T2,以及该DBCB的超级数据库254是全局数据库,如DBCB 240提供的一样。DBCB 250的子数据库由索引DBCB 270的索引Sub DB 255指明。数据库250的其他子数据库280、290以及300链接到子数据库270。下级DB字段256由DBCB 260索引,上级DB字段257索引为空。
关于和DBCB 250同一等级的DBCB 260,固有事务263是T3,超级数据库264为DBCB 264作索引,而DBCB 260没有数据库,同时SubDb字段265索引为空,而且没有下级DB,同时在字段266中指明。上级DB字段267为DBCB 250作索引。基于以上对DBCB 240、250和260的说明,DBCB 270、280、290和300都处于同样的层级,它们都低于DBCB 250和260的层级。
对于DBCB,一般说来,超级数据库字段为一个超级数据库作索引,全局数据库除外,它不为任何超级数据库作索引。这样的索引允许提供层级结构。图9只是示范DBCB如何在一个具体事务串中得以安置,图9中没有精确地表示出层级。
当一个事务创建一个子数据库时,该子数据库基于所创建事务的上下文被创建。图9中,事务T2和T3最好在全局数据库中执行,否则可能无法创建从属于全局数据库的子事务。所以DBCB 250和260拥有全局数据库,如DBCB 240表现的一样,因为它们的上级数据库依照它的范围或者上下文显示其固有事务拥有全局数据库。此外,依照上面的解释,对每一个DBCB只有一个超级数据库,但可拥有任意多个子数据库。但是,可选择的实现方案中,可能没有这样的要求。
尽管图9说明了一个双链接列表结构,例如通过DBCB 250为DBCB 260作索引,又让DBCB 260为DBCB 250作索引,这样一个DBCB之间的双链接列表关系并不是一个必不可少的,还可以使用其他的实现方案如树结构。例如,可能有一个来自DBCB的指针或者索引,它指向或者为一个分离的对象作索引,其目的是提供一组或者一个列表的某种结构这种结构指明DBCB的位置。这种可选方案会向数据结构设置中增加更多的数据结构。这样一来,如此的可选方案就可能增加数据结构排布的复杂性。但是这么做还是有一些优点可取。举一个例子,这样就可允许一个人删除下级和/或上级DBCB的索引。
图10对TCB和DBCB进行了更多的说明,这些在图9中没有表示出来。为了使图看起来清楚简明不混乱,图9中省略了这些细节。同理,为了简约的目的,包含在图9中的DBCB的特征在图10中就不再标出。图10中,活动事务字段在DBCB中表示出来,并利用上下文数据库和子数据库字段来描述TCB。图10中通过这些字段以更加详细的方式表现了DBCB和TCB之间的关系。
最好使DBCB时刻跟踪它自己的固有事务,如图9一样,以及时刻追踪子数据库的活动事务。这样的功能通过活动事务索引或者DBCB的字段来实现。如图10所示,DBCB 310有一个识别符字段311和一个活动事务字段312。活动事务字段312为TCB 320作索引。那么相应于DBCB310的子数据库的拥有者就得以判定相对于TCB 320的事务对DBCB 310来说是否为一个活动事务。此外,从TCB 320最右端可以看到,TCB 330有一个索引,以及TCB 330为TCB 340作索引。同时,TCB 340也为TCB330作索引,TCB 330又为TCB 320作索引。还有,TCB 320、330和340的上下文数据库字段都为DBCB 310作索引。
当创建、开始一个事务时,该事务最好多少有些上下文,有了上下文该事务方便于执行。在一个标准的上下文中,以及在一个先有技术中,往往由全局数据库来担任这个角色。但是,就本发明的嵌套数据库而言,一个事务可以在全局数据库中开始和执行,或者从子数据库中开始。最好是,在其中已开始事务的子数据库的外面,无任何数据可访问,以及,锁管理器知道或者能够判定在数据库中这个事务正在执行,这就叫做上下文数据库。如果一个事务请求的资源在上下文数据库外,那么一个对该信息访问的请求就最好是由锁管理器来拒绝。尽管如此,作为可选择方案,也可以动态地增长所述的子数据库。如果须要的话,这种动态增长的确可以适时发生,如果进一步须要,可以对这种增长设定一个自动触发机制,这样就无须用户的干涉。这种增长发生的方式可以是类似于图16所述的过程,其中描述了新数据项被导入子数据库的过程。如果所请求访问的数据是上下文数据库的一部分,那么该资源就属于这个可访问的数据库,那么接下来要判断的是在该资源上是否有冲突锁。没有的话,则锁管理器可对锁请求进行授权。所以,本发明的数据结构允许既可以指明资源是否可访问,又可以判断资源是否已被锁定。
回头参见图10,可以看到TCB 320的子数据库字段323为DBCB348作索引,TCB 330的子数据库字段333为DBCB 346作索引,TCB 340的子数据库字段343为DBCB 347作索引。关于DBCB 348、352和356,一个超级数据库指针或者这些DBCB的索引为DBCB 310作索引。DBCB348利用其中的活动事务索引为TCB 360作索引。TCB 360和364都利用它们相应于上下文数据库中的索引来为DBCB 348作索引。图10中简化的DBCB和TCB的详细的字段结构,为了表述清晰、使图10不至于索引上的混乱,已被省略。
图11图示了一个可选择的数据结构实现方案,该数据结构用于控制并监视资源的锁定状况。在图2、4和6表现的实施例中,当锁管理器针对某个数据库上的一个资源处理一个锁请求时,它将首先使用资源识别符(RID)为全局数据库上的指定的这个资源来搜寻LCB。之后,必要的话,它将使用“下级LCB”索引来发现LCB,以求得同样的RID,但又有各自的正在处理的锁请求所识别的数据库和子数据库。图11的可选择实施例(和图12中的可选择实施例一样)允许事件的顺序相对于前述而反转。就是说,图11的数据结构允许锁管理器首先查找数据库,如DBCB所提供,接着在那个数据库中查找RID。完成这些操作的方法是,应用一个各个DBCB都有的搜索列表,而不仅是单一的全局搜索列表,如前面所述的散列表。
图11中,诸DBCB,除了为它们自己的TCB作索引之外,还为一个搜索列表作索引,该搜索列表提供对包含在所述数据库中RID的访问服务。例如,DB1为列表380作索引,DB2为列表390作索引,DBn为搜索列表400作索引。搜索列表380、390和400之任一对SLCB都有索引,而SLCB提供关于具体数据项锁设置的信息。尽管没有显示在图11中,LRB也能结合SLCB应用于已授权和未决锁请求,其方式等同于上述实施例中它们的应用方式。
子数据库搜索列表比如380、390和400,它们可以实现为散列表,也可以以其他方式来实现。例如,可以用固定大小的LCB索引阵列来实现它们。如果子数据库的尺寸在子数据库创建的时候是固定的,那么这个实施方案就是可行有益的。也可以用LCB索引的动态规模的阵列(可增长阵列)来实现。如果把散列表用作子数据库搜索列表,那么这些散列表被指派的入口就会更少,必要的时候,比全局数据库散列表还少。如果散列表用作子数据库搜索列表,那么就可能有一连串的LCB用于任何指定的散列表,如范例所表示的拥有索引402的搜索列表400,它索引SLCB 164-5,而SLCB 164-5又作为SLCB 164-6的索引。在图11的可选实施例中,由于LCB现在被组织进了不同的搜索列表中,于是LCB或者SLCB的“下级LCB”字段就不再必要。于是,在一个这样的搜索列表中,从一个指定的入口,就可以访问LCB的一个线性结构,和先前的实施例中LCB和SLCB中的层级结构形成对比。图11中,每一个子数据库DBCB都对它自己的TCB有一个索引,而且每一个TCB也有一个索引来针对其包含的DBCB。虽然图11和12中没有表示出这样的索引,但图11的数据结构并没有取消对超级数据库索引的使用。
图11中,有一些索引在TCB和DBCB之间两个方面都得到了应用,二者皆指明了关于事务的上下文数据库的信息。就是说,比如T1,T1指向全局数据库192,表示在全局数据库中执行,或者说使全局数据库成为它的上下文数据库。关于从DB1到事务T1的索引,这个索引指明DB1由T1、T2、T3和T4创建并拥有,并且,所有的索引DB1指示出那些事务在DB1的上下文或者范围中执行。图11说明了T4是DB2的创建者,它索引的范围是从DB2到T4,但是T4在DB1中执行。依据这个信息,可以得出结论,DB2是一个子数据库,它包含在DB1中。应当记住的是,图11只是一个子数据库系统的范例,它还可以用其他的方式来说明。但是,如图11所示,无论DB2中是什么内容,这个内容都是DB1的子集,因为通过T4有联接。图11中还描述了T5和T6同DB2协作执行的情形,DB2作为它们的上下文。T6创建DBn,T7和T8在DBn中执行。
图12进一步描述本发明的一个可选择的实施方案。由于子数据库要设计为要包含为数不是特别多的可锁定资源,那么子数据库的尺寸可能不大,既然如此,必要时就可以把子数据库设计为固定尺寸,必要时也可以作为LCB的阵列来实现搜索列表410、414和416。由于LCB是为子数据库服务的,那么图12中的LCB描述为SLCB(子数据库锁控制块)164-1至164-20。SLCB阵列可以用于同一个索引阵列或者LCB索引阵列的散列表进行对比。应当注意,散列表152最好设计为与先前的实施例中所述内容相同的方式。该散列表有关全局数据库的实施方案必要时允许较多的LCB用于全局数据库。如果子数据库的某个具体的应用被获知,或未被获知,都可以在一个子数据库中适当地任意地限制项目的数量,比如20个数据项。这个数字根据需要可大可小。但是,它是一个固定的数字,实施例可以这样实现创建阵列410、414和416,并带有20个存储器,每个都能容纳一整个SLCB。那么只有一部分被指派的存储器得以应用,未使用的部分则被浪费,但未使用的部分不会很大,只要引入一个新LCB,就不必去处理动态存储分配,这显然是一个优势。还可以无须一个搜索列表就能得到一连串的LCB,比如链接列表或者双链接列表,还能在只要有必要查找一个具体的LCB的时候,进行连续的指针或者索引链的搜索。
图13进一步描述了一个层级结构,它包含与DBCB和TCB相关的数据结构。对本发明来说,可以把事务和数据库看成同种类型的“事”。这完全是可行的,因为数据库可以被看成是一个被动的事务。如此一来,既然数据库被当成了一个被动的事务,先前被描述为一个事务的(如T1)已经贴上了活动事务的标签,那么DBCB和TCB在一个单层级数据结构中统一的办法就有了可能。
图13中,ATCB和PTCB在其中有所表示,它们各自与活动TCB和被动TCB相关。一个活动TCB(ATCB)相对于先前描述的TCB,被动TCB(PTCB)即相对于DBCB。图13中,层级的根部可以叫做一个数据库/事务层级,也就是全局数据库PTCB 420。这个节点对应于上述的全局数据库数据结构192。在层级结构中,可以允许任何节点有任何类型的子节点,尽管它可能不会普遍用于使PTCB按照其直系父节点去拥有另一个PTCB。不同于前面的措辞表达方式,层级的起始点是全局数据库,全局数据库是层级结构的根,并且从这时起,数据库/事务层级就可以依照事务和子数据库创建和终结,以几乎任何可想象的方式动态地发展(增长或者减少)。这就意味着全局数据库的PTCB只要系统存在,进行着事务和锁管理,它们也就存在,虽然所有其他节点可能是暂时性的。在这种情况下,全局数据库的PTCB可以实现为永久存续。图13统一结构可用于任何上述的实施方案。这意味着系统能被实现为有一个全局搜索列表,其可提供对全部LCB的访问,或者可实现为每一个PTCB有一个搜索列表,它提供对属于所述PTCB的LCB的访问。
参照图13,可以看到全局数据库PTCB 420处于最好层级。紧靠着全局数据库PTCB 420往下的是4个事务ATCB 422、ATCB 424和ATCB426。这3个ATCB是顶层事务,全局数据库PTCB作为它们的直系父节点。在图13的层级中,所有其他事务和ATCB都可以被认为是子事务。实现图13中说明的数据结构关系成为可能,其一个原因在于发明人已经认定一个子数据库可以被认为是一个被动事务,并且是一个总被一个活动事务所创建的子数据库,子数据库将成为一个子事务。图13中所描述的数据结构的统一和层级结构的优势在于,提供了相较于图10所述的设计,就有了一个简化的可能。这种简化颇有意义,因为仅有一个单层,这样就无须指针或者索引在两个不同的层级结构——TCB和DBCB之间来回穿行。于是,就不需要一个数据库控制块在它自己的事务和它的超级数据库之间进行辨认,这样就可实现数据结构,从而在两个字段中只需要一个就够了;系统可实现为只包括一个超级节点。例如如图10,对上下文数据库事务控制块有一个指针或索引,先前实施方案中的数据结构,虽然没有要求,但最好实施为针对一个超级事务的指针或者索引。图13中的实施例,这样一个超级事务和上下文数据库索引或者指针就可以混合为一个单一的索引了。一个搜索列表比如散列表LCB、SLCB、LRB用在这个实施例中,其使用方式同先前描述的实施例一样。
当执行一个锁请求的处理过程时,类似于先前实施例的步骤得以执行。处理过程中,可能需要从一个TCB到LCB,反之亦然。同在此之前一样,可以通过TCB或者ATCB给PTCB作索引来确定答案,PTCB对应于DBCB。作为可选择方案,在层级中可往上调整,直到查找到一个PTCB。任何一种情形下,都可以快速地从事务控制块到事务的数据库控制块。在这点上,可以有两种选择,要么比如通过一个散列表利用一个RID去搜寻所述的索引LCB,然后搜寻所述数据库的LCB,要么去DBCB然后去散列表或者去数据库控制块,用来为一个所要求的RID搜寻LCB。至于PTCB的结构,该结构会类似于先前描述的DBCB。但是,实现PTCB时,最好通过把DBCB的固有事务和超级数据库字段混合的方式,这个混合的字段可以简单称之为高级字段。
关于相对应于上述TCB的ATCB的实现方式,图8中的上下文数据库字段226可以混入超级事务或者TCB的父系事务字段。于是,就可以实现ATCB,其方法与TCB的方法颇类似,虽然在必要的时候,还可以做出附加的变更。
前述的实施例中每一个最好都应用一个LCB或者SLCB,作为一个锁请求块或者LRB的索引。作为一个可选择方案或除此之外的方案,可以用LCB或者SLCB中本身的一个已授权请求位图和一个未决请求位图来替代LRB。参照图14,LCB或者SLCB的可选实施方案被表述为数据结构460。这个数据结构把存储在LRB中的信息整合进LCB中去,以便LCB(和SLCB)成为容量更大的控制块,它得以包含比传统类型的LCB(和SLCB)更多的信息。图14的数据结构基于并类似于图3的数据结构,它在美国专利5,983,225中有所阐述,这已包含在其中得以参照。
数据结构460包括了一个锁识别字段462,在发行时,典型地应当包括一个资源识别符的复制件,用于一个已被锁定的资源,或者所述资源的其他一些的识别。一个模式字段464指示出由LCB提供的在数据库资源中的全部已授权的锁的最高限制的访问模式。一个已授权请求位图字段466和一个未决请求位图字段468各自都包含一个尺寸足够大的位图(如64或者128位),以此来提供数量最多的同时发生的事务的系统支持(或者子数据库级的支持)。每一个事务分配给一个位图事务识别符。已授权请求位图466包含一组位,用于每一个活动事务,这些活动事务都已授予一个LCB 460(或者SLCB)提供的锁定资源。类似地,未决请求位图468包含一组位,用于每一个活动事务,在LCB 460上提供的资源中,这些活动事务拥有一个未决锁请求(也可称之为被呼及访问请求)。一个数据库字段470包含一个对DBCB的索引,由DBCB向相应于LCB460的资源提供数据库。对于这个实施例,和其他实施例一样,也可这样实现该系统一个具体的记录或者对象只有一个单一的物理复制件,但该记录在不止一个数据库是可访问的,如果在同一个时间点超过一个数据库中不可访问,那么也可在不同的时间点上如此访问。于是,当一个事务正在访问所述的资源时,它最好是指示出它访问的资源处于哪个数据库之中,并且每一个所述资源所位于的数据库都将有一个LCB(或者SLCB),LCB(或者SLCB)最好能清楚地识别一个相应的所述数据库。这即是数据库字段470的目的。
关于一个下级LCB 472,这个字段作为一个下级LCB的索引,就层级结构的较高层SLCB的索引而言,同图4和图6中描述的一样。字段474提供的附加字段可以包含在LCB/SLCB 460之中。例如,读取和写入参数位图,和美国专利5,983,225图2中的单元172和173所描述的一样,可以用于提供读取和写入参数化访问模式,该模式由LCB 460提供在数据库资源上得以授权。另外,其他字段可包含在LCB 460的474区域中。一个下级LCB字段476可以用以提供下级LCB并可以对应于图2的字段176。而且,数据库字段470和下级字段LCB 472可以实现为和数据库字段477相同的方式,并且下级LCB字段178以图2的方式来实施。LCB或者SLCB 460的可选实施方案可代入任何一个先前使用了LCB或者SLCB所述的图,于是就可以允许消除LRB,LRB最好用在些实施例中。
本发明涉及事务和一个可能被认为是工作逻辑单元的事务。这样一个事务可以在一个工作的终端,基于一个人为的设定,或者它也可以基于运行或者服从一个业已存在的计算机程序,以及一个对系统执行程序指令的请求。一个子事务涉及一种和事务进行合作、或者受其管辖、或者与之联合的概念。一个事务分作若干子单位,可以认为是子事务的创建。必要的话,仅作为示范性的方案,一个事务可被认为独立于其他事务,并且可以成为自治工作单元。另一方面,一个子事务可以被认为是一个非自治或者非独立事务。于是,子事务可被认为是一个较高层事务的一部分。
一个数据库可以当成是一个数据的集合。一个子数据库也是一个数据的集合,但一般说来一个子数据库是动态产生的,可被认为是一个过渡体。在一个最佳实施例中,子数据库可实现为,其寿命仅限于同所创建事务的寿命一样长,以及当创建子数据库的个体终止存在时,子数据库也将终止存在。该子数据库可认为就是或者被涉及到一个控制范围,该范围在数据的子集周围设置了一道围栏或者界线,该边界里面的范围被定义为子数据库。子数据库也被认为是虚拟数据库。在本文中,术语“数据库”可以用于称呼子数据库或者虚拟数据库。该子数据库在不必在物质上实现的意义上,可以叫做虚拟数据库。在子数据库中,不必依照本发明实施方案从物理上去拥有一个单独的数据复本。那么,可以有一个单独的数据复本,它属于全局数据库的同时,还可以属于一个或者多个对应于全局数据库控制块192的子数据库,而无须从物理上单独地创建数据复本。
数据最好存储在全局数据库,例如图1中所术的数据库。全局数据库192最好实现成数据库控制块,用于管理并操作DBMS的所锁控制器的过程期间。为了得到实际存储于数据库中的数据,全局数据库192和其他DBCB,DB1、DB2、DB3…DBn,不直接地用作入口点以得到所要求的数据,数据最好不要存在这些数据结构中。
在本发明的实施例中,最好是从整个LCB和SLCB来得到数据(或者得到用于获取访问数据的锁定信息)。设想存在着一个记录ID(RID),还存在一个要访问针对于RID的具体记录的需求,以及对该记录的访问将处于一个指定的数据库或者子数据库之中。就一个基本的方法而言,如关于图2-10所说明的数据结构,散列表用于获取RID的入口,一旦获取RID,则指向一个可能的对应于某个具体RID的空LCB或SLCB链。从属于另一个RID的LCB可能就被忽略。如果子数据库不涉及或者不处于全局数据库的层级,那么相对于LCB通过散列表所发现的LRB则受到检查,看是否有冲突锁,以及是否锁请求得以批准。如果是这样,相对于请求的锁的LRB就会导入已授权LRB链,并且访问数据的要求则被允许。这时,就可以去到另一个系统组件,这个组件是已知的,未被描述,可称之为缓冲管理器或者其他项目,它允许访问磁盘和物理地址,以得到记录并得到实际的数据。如果嵌套数据库或者子数据库存在,数据库控制块最好不要用于直接的访问。正如以上所必要的,为了得到数据,把散列表用于查找相应的未加入散列表的LCB,如上所述。于是得到RID所述的入口,并且有了图中往右的一个步骤,以此为所述的RID查找LCB。为了形象地描述得到数据的过程,参考图4。在图4中,有第一层的LCB 160-1到160-2。从图4的散列表152索引154-1被查找到。它导向LCB 160-1。LCB 160-1索引全局数据库DBCB 192。设想某数据已经放进数据库2(例如DB2)或者所述事务正在数据库2的上下文中得以执行,所以就有必要为了正确的找到资源去查找SLCB。必须从第一层LCB 160-1移动到第二层LCB 164-1。SLCB 164-1为不在数据库中但有价值的DB1作索引。
故此,从LCB/SLCB层级结构中继续往上,到第三层的LCB,可以看见SLCB 164-2索引DB2,因为我们的目的就是DB2,那么就到达了正确的LCB层。锁管理器现在检查什么样的锁在为这个数据库和SLCB164-2的资源起作用。如果一个新的锁请求同一个既有的兼容,那么锁请求则被允许。一旦锁请求被允许,那么该数据库就得到了该锁,但数据本身必须得以被访问。为了访问数据,DBCB不用于最佳实施例。数据控制块最好用于同步控制并为锁管理器辖制,但最好不要为缓冲管理器或者其他系统中的到外面取得数据的机制所使用。在最佳实施例中,数据控制块仅仅是控制块,不含有数据;它们仅含有控制信息。所以,一旦锁得到授权,系统就提出一个提示,指明某个事务正在被授权处理一个具体的RID。那么,按照传统的技术和数据库实施方案,例如,提示指出一个数据的锁已得到应允,那么就可能使用一个缓冲管理器或者其他个体,以便得到由RID所识别的数据。缓冲管理器最好不要利用DBCB来得到数据。数据的获取是一种物理访问路径的方法,在磁盘上所需要的数据会得以安置。
在最佳实施例中,只有单个数据复本,虽然可选择的实施例预计能用上更多的复制的数据。无论什么记录或者对象最好是存在于一个复制件中。磁盘上有一个物理地址,缓冲管理器能够计算出RID指定的物理地址,并且,它不理会子数据库中的数据所从属的缓冲管理器;物理地址最好设计为一概相同。
SLCB和LCB被描述为包括一个索引或者指针以针对DBCB。应当注意的是一个可选择实施例通过在LCB或者SLCB中包含一个字段来消除对这个索引或者指针的应用,LCB或者SLCB是一个数字或者识别符,其指出SLCB属于一个具体的数据库或者子数据库。对LCB或者SLCB的参照标准的可选实施方案都是可能的。
用于实现本发明的子数据库数据结构,在通常所说的锁定这种知名的同步控制技术中导入了递归。递归与一次次地使用一个即定的原则有关,还涉及到在这个具体的上下文中,开始一个全局数据库,其中存储了总体的数据项的集合体,例如文字处理或者工程或者CAD/CAM设计文档或者结构。同步控制实施的方法是锁定,以确保一个人或者一个事务不去打断或者生成不恰当的数据,因为它正在使用中。关于本发明,其中一个原则是要创建嵌套数据库或者子数据库,可以看成是小型数据库,然后要执行同样基本的概念并为全局数据库锁定子数据库。所以,本发明把全局数据库中的该原则应用于子数据库的虚拟集合中。于是,本发明把递归同步控制的该原则应用到了协作问题上面,这就启用了虚拟数据库或者虚拟沙箱环境的创建。对于这些虚拟环境或者子数据库,本发明允许使用常规同步控制,以及在两个或者更多的要求协作的用户之间建立任意复杂形式的事务。
如果有要求取消一个对数据的更正或者要求对数据先前状态能够复原,这些都关系到不可分割之特性,那么本发明则可以实现为维护一个在事务的范围中与每个数据项相关的诸事件的日志。日志启用向前向后恢复任何以被修改项目的内容。这就是可恢复性,实现该特性有诸多知名技术。但是,多个写入者之间的协调的大多数方法都会牺牲事务的不可分割性,因为这些事务被分割成了若干个小的事务。该方法众所周知的范例包括打开嵌套事务和所传诵的故事。尽管在这些小而完整的事务中启用了可恢复性,但是在更大的逻辑工作单元中可恢复性却丧失,这些大单元按照用户的期望构建成了事务。因为这,必须引入补偿事务的概念,它们是由应用程序开发人所不得不创建的事务。换句话说,这对可恢复性本质上就是一个自己动手的方式。
这同嵌套数据库存在的理由刚好相反,于其可恢复性是不能不要的,而补偿事务的应用是不必的。还有,一个人能继续使用知名技术用以在有嵌套数据库的时候,实现可恢复性;为此无须开发新的算法、数据结构、或者技术。数据库嵌套的所有层级上可恢复性的保留,再加上标准技术的支持,就成了本发明针对协同工作的问题的,相对于其他方法的一个优势。
在本发明最佳实施例中,为了创建或者开始一个子数据库,最好在所述的子数据库或者对象上施以写入锁定。该事务建立一个控制区域,在其中动态地把某个对象引入控制区域,基于所述控制区域的性质,操控这些对象就成为可行。有了一个控制写入区域,就可以修改整个或者部分控制区域。一个写入锁允许写入、删除、插入和修改数据,并按照最佳实施例的要求,这些都是子数据库创建所须的先决条件。子数据库可以被认为创建数据库锁,以反制一个写入锁。如果你有一个数据库锁,它就不会允许做所有在写入锁情形下允许的事情,以及一个数据库锁可能实际地导致人们为了写入锁而放弃一些权利。尽管一些权利被放弃,但放弃权利以及创建子数据库所产生的优势,则是产生了同步控制的单独构架,因为子数据库的拥有者愿意同其他人或者组织主体共享子数据库的对象。
关于一个具体的事务的锁管理器决定了该事务在某个数据库的范围中所存在的时间长短。所以,本发明可以实现为用一个递归算法来区分有着不同范围或者子数据库的事务。本发明不同于美国专利5,983,225所描述的参数化锁定管理系统,虽然本发明可以沿着该美国专利所述的技术而实现,以使该系统更加强大并有更多的附加特性。本专利中嵌套或者被嵌套的数据库,以及子数据库的使用目的都在于协调多用户访问数据。
回到图15,该流程图表示创建了一个新的空子数据库。图15中的一个隐含的上下文即是,在数据库中,或者其他一些全局数据库中的子数据库中,有一个事务正在执行,并且掌控该事务的人或者拥有者要求创建一个新数据库。图15中,开始后,步骤482创建了一个新DBCB。为将要产生的新子数据库的到来,创建数据库控制块以便有一个控制点或者参考点。如上所述,在最佳实施例中,不必为子数据库创建一个新的数据复本,除非必要才可以创建。步骤484、486、488涉及被创建的DBCB到其他的可能存在的数据结构。在步骤484中,DBCB的Own Tx字段被生成以为创建或者拥有事务作索引。这个步骤被执行以弄清创建事务与新DBCB之间的关系。应当注意到,每个流程图中所有步骤都不是必不可少的,都不依赖于所使用的实施方案,有些步骤如果必要的话,或者被命名的数据结构或者字段都没有启用时,可以省略。接着,步骤486使DBCB的超级数据库字段为DBCB相应的超级数据库作索引。依此执行以指明系统或者在DBCB数据结构中搞清新子数据库成为什么数据库的一部分。步骤488写入下级DB和上级DB在DBCB数据结构中,以便为姊妹数据库作索引,如果有的话。这些姊妹数据库可以是被同一创建事务所创建的其他先前的子数据库,如果有的话,以便和其他子数据库的关系可以被定义或者创建。
图15之下一步,执行步骤490,通过这个步骤在创建事务的TCB中写入合乎规范的信息,以便这个DBCB被创建事务的TCB的子数据库字段所索引。这个步骤确保了超级数据库包含该新数据库在它的其本身自含的子数据库集合中。最后,步骤492,一个新LCB搜索列表被指派,并且这个新搜索列表从DBCB中被索引。应当注意到这个步骤492不必在实施例中执行,但在图11的数据结构和/或图12的数据结构的实施例中却可以。在图11和/或图12的实施例中,每个DBCB最好都有它本身的散列表、阵列、或者其他搜索结构,用作一个在其子数据库或者字段中的查找RID的入口点。接着图15的过程终结。
图16描述了一个把RID引入一个子数据库以便在子数据库中安置的过程。图15中创建的子数据库在创建之初将是空的,图16说明了一个对象或者数据项是如何被拉进子数据库,以至对象或者数据项可用于未来的将在所述子数据库中得以执行的事务。图16中,开始后,步骤500判定一个所述的操作是否有效。执行这个步骤是因为在最佳实施例中,不允许移动任何对象进子数据库,但这是有一定条件的。例如,创建并拥有子数据库的事务,这种方案为最佳,在这个时间点上,拥有一个它希望引入子数据库中去的对象。还可以执行其他的问题或者测试,比如只有当处于该子数据库中的超级数据库时,才把一个对象拉进子数据库,而无论该超级数据库是否碰巧就是全局数据库或者某些其他数据库。于是,在一个最佳实施例中,可以做到仅从数据库层级构架中直接上级数据库中拉进一个对象。如果该操作被判断为无效,例如,上述两种条件都不符合,图16的过程则结束。
如果步骤500判定操作是有效的,流程继续走到步骤502,以至所述的对象可导入子数据库。图16的实施例涉及数据结构管理,如图2-4和6所描述。于是,步骤502为超级数据库中的RID查找到LCB。该步骤的最佳实施方式为,到散列表中推敲RID,得到一个散列表入口或者索引,然后从散列表到第一层的LCB,遵循指针链或者索引。LCB将识别全局数据库中的RID。如果所述的对象正在被拉进的那个子数据库不是全局数据库的一个直系派生物,而是其他一些其上的在全局数据库和它本身之间的子数据库,那么就可以从一个LCB到另一个地穿越下层数据库索引或者下层LCB,直到到达在子数据库的直系超级数据库中识别资源的LCB。并且由于关于步骤500的所做的测试,则可获知将存在这么一个LCB。
步骤502之后,执行步骤504,该步骤中,在这个数据库或者子数据库中,为所述的RID指派一个新的LCB。这个新的LCB将在这个新子数据库中,提供非常相同的资源,该子数据库是先前创建的并且资源被导入其中。在步骤506中,超级数据库中的对于RID的LCB用以作为新LCB的索引。最后,为了该数据库,步骤508使新LCB作为DBCB的索引。换句话说,需要确定的是新LCB通过指明这是我的数据库或者我的上下文数据库,清楚地提供了它同一个数据库的联接。图16的过程终止。
图17的流程图表明如何安置一个数据库或者子数据库,但又如何同可选实施方案一起工作,这些实现方案有着所表述的数据结构,例如,图11和12中所表述。如此安置的一个主要的目的就是通过创建LCB实现一个锁定结构,以便判定一个资源的锁状态。
在图17“开始”后,执行步骤510,由此判定一个所述的操作是否有效。该步骤和图16的步骤500相同,所以该步骤的重复说明被省略了。下一步,在步骤512中,该数据库的DBCB中被找到。此时,数据库,比如全局数据库或者一些相关的子数据库,则被获知。最好是,有一个数据库控制块提供数据库,其中当前试图拉进一个对象。此外,最好是有一个方法来为一个指定的数据库查找DBCB,而且是正在执行的,这样对数据库控制块才好有一个索引。接着,步骤514,指派数据库中的所述RID的一个新的LCB(或SLCB)。在这个步骤中,一个新的LCB正在被创建,因为一个新对象正在导入数据库中。换句话说,如果一个对象在多重数据库中,那么它安置其中的数据库有多少个,就有多少LCB提供给它。最后,步骤516,LCB插入到数据库的搜索列表。这可以由在记录ID上的散列法来完成,得到一个散列表入口,表现为一个正在使用中的散列表,虽然可选方案可用于上述情形,例如一个阵列或者一个列表,然后一个新LCB被插进任何为离散函数指明其应当插入的散列表入口。如果此时有一个空LCB链,例如无LCB,LCB则作为第一项被插进链中。如果该链不空,LCB既能作为第一项被插入,也能作为链中其他项被插入,例如最后一项或者某个中间项,只要入口被插进并从一个具体的散列表或者所述阵列入口可抵达。
图18为流程图,示范性地显示了通过图2-4和6中说明的本发明实施例的数据结构锁请求过程的步骤。图18中,开始后,执行步骤520替所述RID以查找散列表空位。一个锁定请求将要求访问某个数据的识别事务,以及还将沿着RID将被发现的数据库识别符RID或者所述的该数据的记录ID。此外,将有一个访问模式的识别符,例如是否数据被要求读取或者写入。当处理锁请求时,这个信息对锁管理器可用。于是,为了替RID查找到散列表空位,以及有一个RID的散列法,找到散列表入口,并且散列表入口中的索引被核准以判定是否有一个用于RID的LCB在全局数据库中。如果步骤522判定用于RID的LCB不存在与全局数据库中,那么流程则继续进行到步骤530,创建一个LCB并将其插入到第一层LCB链。当步骤522判定用于RID的LCB不存在于全局数据库中时,那么锁定请求在全局数据库中被推断为是用于RID的,因为,若非如此,系统就会出错,就不可能为一个数据项在一个不存在的子数据库中创建一个锁请求。于是,当一个锁管理器在实践中收到一个锁请求时,它可能被安全地假定这个锁请求和现实数据结构设置的现实是协调的。于是,如果没有用于RID的LCB在全局数据库中,也就最好不存在其中所述数据项所归属的子数据库。所以,步骤522中当回答是否时,有一个锁请求或者要访问全局数据库的所述资源的请求。这是一个相当简单的情形,因为当一个LCB被创建时,它还不存在,该LCB也还不存在,很容易判定没有其他事务有一个锁在数据项中,以至将有一个无条件的锁授权被提出请求。于是LCB被插入到关乎全局数据库的第一层LCB链。步骤530后,步骤532对请求授权并创建一个对应于所授权的请求的LRB。
还有一种可能,如果步骤522判定一个用于RID的LCB不存在于全局数据库中,步骤524则被执行,其依照“下级LCB”直到正确的数据库或者子数据库被发现。请注意步骤524可能被执行0次,所以全局数据库中即使有一个对资源的请求,也可以立刻发现正在被浏览的LCB被要求或者纠正LCB,所以,就可以停止该LCB,并中止继续进行。然后,执行步骤526,判定是否有任何冲突的锁存在。通过核对该请求是否同任何现存的在该数据项已经被授权的锁兼容,这很容易判断。如果步骤526判定有冲突的锁,流程继续进行到步骤528,其中请求被排队或者被拒绝。还可以实现该系统以便能有一个等待期,盼望既有的锁将被释放以便锁管理器在稍后的时间点能重新考虑现在是否能对请求的锁授权。步骤528中还可以这样,被请求的锁干脆被直接拒绝;就如何处理这个问题而言,是作为一个设计上的选择而考虑的。对请求直接的拒绝防止无限的期望得以访问所想得到的锁的时间被暂停或者等待所消耗。
如果没有冲突锁被判定存在于步骤526中,流程继续进行到532,对请求进行授权并产生一个LRB,其涉及这个请求,以便正确地指明资源或者与之关联的数据的锁定状况。
图19,如图18一样,表示一个锁请求是如何在嵌套数据库存在时被处理的,而且还涉及图11和12的数据结构,其中每个数据库或者子数据库控制块都有它自己的搜索列表。图19中,开始后,LCB对所述数据库的搜索列表被查找到。通过依照搜索列表索引从被锁请求识别的数据库DBCB中就可以做到这点。接着,步骤536,用于RID的散列表空位被找到,如果这个数据结构于本实施例存在的话。由于可选方案被要求避开散列表,该实施例可以实现为更直接地提供或者指派LCB。接着,执行步骤538,判定用于RID的LCB是否已经存在。如果LCB不存在,继续进行步骤537,在那里判断在全局数据库中该请求是否用于一个资源。如果是,进行到544。但是,如果请求用于某个子数据库资源,而该资源的LCB不存在于那个子数据库中的搜索列表之中,那么我们就遇到了一个特殊的情形,即事务要求访问它上下文数据库范围之外的内容。一般说来,这种请求会被拒绝,在步骤539的分支中以否的形式指明。但是,可以对系统编程。在该时间点将被请求的资源被动态地引入,于是再动态地使所述子数据库增长——通过步骤539的询问,这种可能性保持开放。步骤539判定子数据库是否应当被允许增长。这个决定无论人的干预是否存在都可以做出。步骤539中肯定的答案的情形下,继续进行到544。必要的话,图18的流程可改为插入到步骤522和530之间,图19的537和539之间。这就允许了图18过程中步骤537和539的功能得以完成。
在步骤538中,如果判定用于RID的LCB已经存在,则继续进行步骤540,以判定是否有冲突锁的存在。如果冲突锁存在,那么锁请求排队或者被拒绝,如图18中的步骤528所说明如果没有冲突锁,继续进行到步骤546,其中锁请求被授权并生成一个LRB,如上所述。图19的过程结束。
图20流程说明在子数据库终结期间所执行的步骤。开始后,步骤550判定是否有这个数据库的事务或者子数据库存在。如果对步骤550的询问答案都是YES,执行步骤522,问是否有继续执行该程序的要求。步骤552的决定块可以任何要求的方式执行,并可能是一个通过用户在查询系统的用户后如果他或者她仍就要终结子数据库做出的人为决定。还可以这样,以一个自动做出的决定来指明是否可接受终结子数据库。如果由于该数据库的事务或者子事务存在,而要求保存子数据库,则从步骤552进行,并当所述数据被要求保存时处理结果。步骤522继续的决定可以是一个程序化的决定或者计算机程序决定,也可以是一个人为的决定。如果要求继续步骤522的终结,则执行步骤544,其中该数据库的所有的子数据库和事务都被终结。该终结是递归的又一个范例,因为执行步骤544的行为将导致图20的流程为正在步骤554中终结的项目而再次被执行。
当步骤550判定没有所述数据库的事务或者子数据库时,或者执行步骤554之后,执行步骤556为所述数据库解除所LCB的指派。步骤556解除指派可安全地执行,因为将不会有LRB出现,并且没有事务或者子数据库依赖这些LCB,所以可以把它们拿开或者解除指派(如把它们从计算机存储器中卸掉)。接着执行步骤558解除搜索列表的指派,如果有的话。可以注意到在一些场合,没有一个搜索列表被解除指派,所以步骤558就不必执行了。最后,执行步骤560,为所述数据库解除指派DBCB,一旦步骤560被执行,一般说来,就不会有更多的数据结构存在于计算机存储器中专门用于这个子数据库,并且子数据库当前也停止存在了。图20流程结束。
为了更容易评价本发明可能的应用程序、结果、和特征,本发明能做的范例以图21A到图21D说明。该范例说明的是文件共享。但是本发明有很多应用程序,可用于要求在多个用户之间共享数据的任何状况。此外,本发明可用于共享用户之间部分的文档,以便多用户同时在一个文档上工作。在这个例子中,一个屏幕或者计算机显示器显示出每个用户每个文档或者每个可为屏幕上显示的用户所用的数据项。但是,应当知道这仅仅是一个示范性实施方案,在实践中,没有要求或者必要使每一个所述的数据项显示在同一个计算机屏幕上。参见图21A,显示一个计算机屏幕570,GAIL有四个文档,文档1572、文档2574、文档3576、文档4578。在图21A的屏幕570中,GAIL有写入锁定文档1、2、3和4,并且她对这些文档既能读取也能写入。下面将说明显示于图21A到21D的范例的实施方式中的数据结构,依照此说明,GAIL有一个顶级事务在全局数据库中。
图21B中,GAIL创建了一个子数据库,从逻辑上说,把文档2、3、4拉进这个子数据库。这致使那些文档变成了只读性质,如每个文档的右上角“R/O”指示的一样。
在图21C中,一个屏幕抓图570显示了GAIL,也显示BRIAN当前有能力在文档2582和文档4584上工作,如屏幕580上所指明。
在图21C中,BRIAN开始了一个事务在GAIL的子数据库中,并且有写入锁定文档2和4。BRIAN现在对这两个文档有完全编辑能力,但是GAIL此时却不能写入文档2和4,只能读取,以及在必要时观察该项BRIAN正在操作的工作,只因这些文档BRIAN有了控制权。
在图21D中,可以看见GAIL和BRIAN的屏幕图像570和580,除此之外,还可看见ANNE有一个屏幕图像590,描述只读文档2592,以及文档3594。图21D的情形中,ANNE开始了一个事务在GAIL的子数据库中。她在文档2中有一个读取锁和一个写入锁在文档3,表示只有文档3可以被ANNE修改。
可以注意到图21D中,BRIAN有一个写入锁在文档2582,同时ANNE有一个读取锁在文档2。在以往的系统中,BRIAN的写入锁和ANNE的读取锁一般认为不兼容。为了允许ANNE浏览BRIAN的工作,就可以应用上参数化的锁定或者其他机制。于是,本发明就把目光集中在了嵌套数据库,将其同参数化锁定结合起来,以使系统完成更多功能。
为了使存在于图21A和21D的范例中的情形得以实现,示范性数据结构在图22A到22D和23A到23D中得以分别说明,目的是要说明子数据库和数据共享发生的方式。图22A到22D表示数据结构第一个范例,其可用于分别实现图21A到21D的范例。在图22A中,GAIL有着一个事务控制块600(TCB)。还有锁控制块(LCB)分别标注为160-1到160-4,它们针对每个文档,即1到4。锁请求块(LRB)162-1到162-4用于实现文档的锁定,同各自的LCB协同。图22A中每个LCB 160为全局数据库192(实际上是全局数据库控制块)作索引,于是使GAIL有了一个顶级事务在全局数据库中。对GAIL的顶级事务的TCB 600,对每个文档1到4,都有着完全的编辑能力。用于这些文档的LCB,以及数据本身,则被认为是全局数据库的部分或者同其相关。
图22B中,和图21B相对应,GAIL创建一个子数据库,并从逻辑上把文档2、3、4移进该子数据库。可创建一个子数据库以便使GAIL邀请其他人同她合作。当GAIL创建一个子数据库时,附属数据结构被表示在图22B中。具体说,由于文档2、3、4是子数据库的一部分,第二层的LCB,也就是SLCB,为文档2、3、4而创建,并且由指派164-2、164-4、164-1分别提供。可以看见每个SLCB为GAIL的子数据库控制块(DBCB)602作索引。没有第二层LCB或者SLCB用于文档1,因为GAIL没有移动文档1进她的子数据库。于是,在这个时间点上,文档1是唯一GAIL能编辑的文档,另一个文档只能被浏览。为了数据结构使GAIL当其他文档被移进了一个不同的子数据库时只能编辑文档1,已经被移进了GAIL的子数据库的用于文档的LRB模式字段可被修改为指示关于该文档锁定的能力。图22B中,GAIL的子数据库中没有活动的事务。而且,在图22B中,用于GAIL的TCB的上下文数据库留在全局数据库192中,GAIL的子数据库DBCB 602为GAIL的TCB 600作索引以便指示GAIL的子数据库为GAIL的事务所拥有。
参见图22C,BRIAN已经开始了一个事务在GAIL的子数据库中,并且BRIAN的事务由BRIAN的TCB 604提供于图22C的右上角。在这个具体的范例中,BRIAN的事务只能访问文档2、3、4,因为这些文档是GAIL子数据库的文档,BRIAN的事务有权访问。但是,本发明的实施例允许GAIL动态地增长她的数据库,她可以朝它增加更多的文件,甚至在另一个人比如BRIAN在子数据库中开始一个事务后。在图22C中,BRIAN放置写入锁在文档2和4中,对这些文档有完全的编辑能力。于是GAIL能看见BRIAN正在对文档所做的事,但是她不能直接覆盖他的变动。BRIAN对文档2和4设置写入锁的能力由破折号虚线箭头或者从BRIAN的TCB 604到文档4的LRB 162-5的索引表示,该索引为一个用于文档2的LRB 162-6所索引。图22C中还可看到BRIAN的TCB 604为GAIL的子数据库(或DBCB)602所索引,它指明了用于BRIAN的TCB的上下文数据库就是GAIL的子数据库。
参见图22D,对应于图21D中指明的设置和访问能力,ANNE开始了一个事务在GAIL的子数据库中。和BRIAN的事务一样,ANNE的事务只能访问文档2、3、4,除非GAIL选择通过朝它增加更多的文档动态地增长她的子数据库。此时,ANNE有一个写入锁在文档3和一个读取锁在文档2。这个信息可由LRB 162-7和LRB 162-8来提供。用于文档2的SLCB的LRB 162-7会指明读取锁,文档3的LRB 162-8会使其模式集合指明写入锁。在这个时间点上,ANNE只能编辑文档3,但她能浏览所有BRIAN正在对文档2所做的变更。需要的话,ANNE也能浏览文档4,同样地BRIAN能浏览文档3,如果需要的话。可以看见ANNE的TCB606,除了为LRB 162-7和162-8做索引外,还通过上下文数据库索引标准为GAIL的子数据库602作索引。
图23A到23D图示了一个可选择的实现方案,其中图11中的数据结构用于执行图21A到21D的范例。在对应图21A的图23A中,穿过160-4为所述的四个文档中,存在LCB 160-1,每一个LCB为一个相应的LRB 162作索引。GAIL的TCB 650为LRB 162作索引,以及GAIL的TCB 650为其索引或者指明它的上下文数据库就是全局数据库192。
在图23B中,对应于图21B,GAIL创建了一个子数据库,并且通过这么做,一个数据库控制块652被创建,其用于GAIL的子数据库。GAIL的子数据库DBCB 652为GAIL的TCB 650索引,指明GAIL的子数据库由GAIL的事务所拥有,并且GAIL的子数据库652为散列表、阵列、或者其他结构654索引。这个结构654为三个文件其中有SLCB 164-1、164-2和164-3,它们都是GAIL的子数据库的一部分。SLCB 164索引列表654的索引656、658和660。
图23C中,对应于图21C,BRIAN的事务成立并由BRIAN的TCB670所提供,它为GAIL的子数据库控制块652索引,并指明BRIAN的TCB 670或者事务的上下文数据库就是GAIL的子数据库652。BRIAN在文档2和4上获取一个锁,分别为LRB 160-5和160-6所提供。
图23D中,对应于图21D的设置,ANNE的事务成立,她有GAIL的子数据库作为上下文数据库。这是由GAIL的DBCB 652索引ANNE的TCB 680上下文数据库索引说明的。另外,ANNE对文档2和3有一定权利,并通过ANNE的TCB 680分别作文档2和3的LRB 160-7和160-8的索引在数据结构中体现出来。LRB 160-7和160-8有它们自己的字段集合来指示ANNE所拥有的只读或者写入访问能力。
图21A到23D上面所描述的内容属于不同文档的锁定和共享。但是,本发明并不限于文件或者文档层次的共享,本发明还可用于在多个用户或者群体中共享一个单独的文件、文档、工程计划等等。单独的文档、文件或者其他数据项在其中所披露的嵌套数据库网络中得以共享,这种实施方案涉及锁定间隔的问题,例如,涉及锁定数据结构或者LCB所提供什么样的资源。于是,本发明允许锁定一个文档或者文件一个较小的局部,例如段落的级别、句子级别、甚至走极端到锁定单词、字符或者位。而且,文档处理或者词汇处理环境的外面、工程制图的不同部分,都可以共享在一个CAD/CAM系统或者任何其他系统。
图24A到24D所呈现的范例中,(如果需要,可以找更先前的例子),BRIAN的事务和ANNE的事务实际上就是GAIL事务的子事务。于是,默认情况下可假设GAIL、BRIAN和ANNE的事务都锁定以和GAIL的顶级事务同样的间隔。但是,作为可选择方案,让GAIL的锁在局部的层面上,同时拥有其他锁定在文档或者段落级别的独立顶级事务,这也是可行的。多间隔锁定的概念是众所周知的,但对于本发明,多间隔锁定和嵌套数据库的概念可共同使用,而且这些概念一般被认为彼此不相关(如相互独立)。可在Anfindsen论文中发现更多关于多间隔锁定的信息,如下参考。
现在回到图24A到24D所表示的例子中来,图24A图示了一个屏幕图像的例子710,表示GAIL的文本编辑器。所述文档的文本有四个节,表示为节1、节2、节3和节4。在图24A中,GAIL锁定了所描述文档的所有节,对整个文档有完全的编辑能力,在每个部分中,样品文本得以说明,但所有所要求的文本都可以使用。
图24B中,一个屏幕图像720再次显示了GAIL的文本编辑器,但在这个图形中,GAIL已经向一个子数据库委派节2、3和4,并且那些节现在在她的编辑器中已经变成了只读性质,由穿过节2、3、4的对角线表示。
图24C,一个屏幕图像730,表示BRIAN的文本编辑器。关于图24C,BRIAN已经通过她的子数据库(其中他被GAIL授权工作)访问GAIL的文档。BRIAN成功地请求到了写入锁在节2和4,以至可以在他的编辑器上进行编辑,但节1和3依旧是只读的。应注意到穿过文档的只读节的对角线,是仅以说明为目的而画的,在实际情况中,没有要求必须有这样的对角线穿越文本。但是,在最佳实施例中,可以要求显示某个节被锁定,而其他的则未被锁定。这可以通过文本颜色的不同或者文本背景的不同,以表示不同的锁类型或者模式或者访问能力来做到。例如,一种颜色表示一个人或者一个节,或者该文档的其他部分按照对数据有写入锁的人或者群体标注以颜色。还可以是,以某一种颜色来指定只读文档的节。
最后,图24D中,一个屏幕图像740表示ANNE的文本编辑器。ANNE通过她的子数据库(其中她被GAIL授权工作)访问GAIL的文档。ANNE在节3成功地请求到了写入锁,所以可以在她的编辑器上进行编辑,但节1、2和4依旧是只读的。
本发明可以方便地以一个或者更多的传统通用的数字计算机按照说明书的指导编程 来实现,这点对那些精通计算机技术的人来说是显然的。合适的软件编码可以容易地为熟练的编程人员基于本发明公布的方法所制备,这点对那些精通该技术的人来说是显然的。实现本发明的方式还有就具体的集成电路编制应用程序,或者联接到相应的传统组件电路的网络中,这点对那些精通该技术的人来说是显然的。此外,本发明可通过多个计算机、计算设备、或者其他类型的设备来实现。这些设备可以联接到任何类型的网络中,以便交流数据、指令、对数据的请求、以及任何涉及数据库管理系统操作的其他信息。这样一个计算机网络按照需要可被实现为有线网络或者无线网络,比如使用无线电频率、红外线、或者超声波之类的网络。作为可选方案,或者除了利用通用计算机外,本发明被预想成实现为使用任何类型的设备,包括个人数字助手,诸如掌上领航员、因特网服务器、专用计算机,以及任何类型的因特网浏览器,包括电话浏览器。
本发明包括一个计算机程序产品,即一种存储媒介体,包括能用于为计算机编程以执行本发明的程序的指令。存储媒介体可以包含,但不限于任何类型的盘,包括软盘、光盘、光盘驱动器、磁-光盘、只读存储器、随机访问存储器、可擦可编程只读存储器、电可擦除只读存储器、闪存、磁卡或者光卡,以及任何类型适合于存储电子指令的介质,包括硬盘驱动器。本发明还包含其中描述的数据结构,以及可以存储于任何存储器或者在该应用场合所讨论的存储介质的数据结构。
尽管本发明描述并参照了具体的最佳实施例,但对于熟知本技术领域的人员来说,可以做出各种改变,以及可以以同类组件替代而不会背离本发明精神及真正范围。例如,尽管本发明描述了存储于一个存储器的数据结构,但这等同于在多个存储器中存储该数据结构。此外,本发明构想了混合数据结构,如果有要求的话。
本发明是基于先前为发明人所描述于各种公开发行物上的技术及理论的。这些发行物包括有“Apotram-an Application Oriented TransactionModel”(一种应用程序定向事务模式),博士研究论文,Ole Anfindsen著,1997年;“Supporting Cooperative Work in MultimediaConferences by Means of Nested Database”(用嵌套数据库的方法对多媒体会议中的合作事务进行支持),Ole Anfindsen著,挪威计算机科技会议上的报告-NIK’96,1996年,311-322页;以及“Cooperative WorkSupport in Engineering Environment by Means of Nested Database”(以嵌套数据库的方法在工程环境下支持合作事务), Anfindsen著,CEEDA学报,1996年,英国,Poole,325-330页,收录的每篇文章,都作为在这些出版物中所引用的参考之一。这些出版物中每篇所采用的文章和说明都可为本发明所实施和利用。而且,较早的由本发明者所申请的美国专利,包含美国专利5,983,225和6,044,370,都作为参考所收录,并可共同或者分别用于本发明。
权利要求
1.一种存储器,用于存储通过一个数据处理系统所访问的数据,包括一个数据结构,包含事务信息;一个数据结构,包含事务数据锁的信息;以及多个数据结构,包含多个数据库信息,至少包含多个数据结构之一、一个数据库数据结构、包含至少多个与该数据和事务关联的数据库之一的信息。
2.按照权利要求1的存储器,其中数据库数据结构与包含事务信息的数据结构相关联。
3.按照权利要求2的存储器,其中数据库数据结构包含一个对包含该事务信息的数据结构的索引。
4.按照权利要求3的存储器,其中包含事务信息的数据结构的索引包含一个对固有事务的索引。
5.按照权利要求4的存储器,其中数据库数据结构是一个与包含该事务信息的数据结构不同的数据结构。
6.按照权利要求1的存储器,其中数据库数据结构包含一个字段,其中存储了至少一个活动于数据库的事务的标识符。
7.按照权利要求1的存储器,其中包含事务信息的数据结构包含了一个字段,它指明了与数据库数据结构的联系。
8.按照权利要求7的存储器,其中包含事务信息的数据结构包含了一个字段,指明与至少一个事务的子数据库的联系。
9.按照权利要求7的存储器,其中指明与数据库数据结构联系的字段,指明了与上下文数据库的联系。
10.按照权利要求9的存储器,其中指明与数据库数据结构联系的字段,包含一个对数据库数据结构的索引。
11.按照权利要求10的存储器,其中指明与数据库数据结构联系的字段,包含一个对数据库数据结构的指针。
12.按照权利要求11的存储器,其中数据库数据结构是一个不同于包含事务信息数据结构的数据结构。
13.按照权利要求1的存储器,其中包含事务信息的数据结构包含一个字段,指明一个与至少一个子数据库的联系。
14.按照权利要求1的存储器,其中包含事务信息的数据结构包含一个字段,它与包含锁信息的数据结构相联系。
15.按照权利要求14的存储器,其中与包含锁信息的数据结构相关的字段,包含一个对包含锁信息的数据结构的索引。
16.按照权利要求15的存储器,其中包含锁信息的数据结构包含至少两个单独的数据结构。
17.按照权利要求16的存储器,其中两个单独的数据结构包含一个锁控制块和一个锁请求块。
18.按照权利要求17的存储器,其中包含锁信息的数据结构的索引是一个对锁请求块的索引。
19.按照权利要求18的存储器,其中锁请求块包含一个对一个不同的锁请求块的索引。
20.按照权利要求1的存储器,其中包含数据锁信息的数据结构包含一个与数据库数据结构相联系的字段。
21.按照权利要求20的存储器,其中与数据库数据结构相联系的字段指明锁属于多个数据库中的哪一个。
22.按照权利要求21的存储器,其中与数据库数据结构相联系的字段包含一个对数据库数据结构的索引。
23.按照权利要求22的存储器,其中与数据库数据结构相联系的字段包含一个指向数据库数据结构的指针。
24.按照权利要求1的存储器,其中包含锁信息的数据结构包含至少两个单独的数据结构。
25.按照权利要求24的存储器,其中两个单独数据结构包含一个锁控制块和一个锁请求块。
26.按照权利要求25的存储器,其中锁请求块包含一个对不同锁请求块的索引
27.按照权利要求1的存储器,其中包含锁信息的数据结构包含一个单一数据结构,该数据结构有至少一个字段存储一个已授权锁的信息。
28.按照权利要求27的存储器,其中至少一个字段存储一个已授权锁的信息,该字段存储一个已授权锁信息的位图。
29.按照权利要求1的存储器,其中包含事务数据锁信息的数据结构包含一个字段,该字段为不同的数据库把数据锁和该数据另一个锁联系起来。
30.按照权利要求29的存储器,进一步包括包含不同的数据库的另一个锁信息的数据结构,该不同的数据库由一个字段索引,该字段将该数据锁与一个不同数据库的该数据的另一个锁联系起来。
31.按照权利要求1的存储器,其中包含数据锁信息的数据结构包含了一个与锁联系的数据库的指示。
32.按照权利要求31的存储器,其中包含数据锁信息的数据结构包含一个对与锁联系的数据库的索引,所述索引就是与锁联系的数据库的指示。
33.按照权利要求32的存储器,其中与锁联系的数据库的索引包含一个指针。
34.按照权利要求1的存储器,进一步包括一个用于搜索目的的数据结构,包含一个指明与包含数据锁信息的数据结构相联系的信息。
35.按照权利要求34的存储器,其中用于搜索目的的数据结构包含一个对包含锁信息的数据结构的索引,它就是所述的联系。
36.按照权利要求35的存储器,其中用于搜索目的的数据结构包含一个对包含锁信息的数据结构的指针,它就是所述的索引。
37.按照权利要求34的存储器,其中所述数据体系用于搜索目的,该数据结构包含一个散列表。
38.按照权利要求34的存储器,其中用于搜索目的的所述数据结构包含一个阵列。
39.按照权利要求34的存储器,其中用于搜索目的的所述数据结构包含一个列表。
40.按照权利要求34的存储器,其中所述数据库数据结构包含一个对所述用于搜索目的的数据结构的索引。
41.按照权利要求40的存储器,进一步包含一个以搜索为目的的第二数据结构,它不同于所述的以搜索为目的的数据结构;以及一个第二数据库数据结构,它索引所述的用于搜索的第二数据结构。
42.按照权利要求34的存储器,其中用于搜索的数据结构其中包含含有锁信息的数据结构。
43.按照权利要求1的存储器,其中包含事务信息和数据结构的数据结构以及数据库数据结构包含在同一层级中。
44.按照权利要求43的存储器,进一步包括与事务联系的数据结构,它索引其他与事务和多个数据库结构联系的数据结构;以及多个数据库结构索引至少一个包含事务信息的数据结构。
45.按照权利要求1的存储器,其中包含事务信息的数据结构、包含事务数据锁信息的数据结构、以及数据库数据结构都是不同的数据结构。
46.一个指明一个数据项被锁定的方法,包括的步骤有在层级结构中的第一层,创建一个数据结构以指明数据项被一个第一层级关联的第一事务锁定;以及,在层级结构中的第二层,创建一个数据结构以指明数据项被一个第二层级关联的第二事务锁定。
47.按照权利要求46的方法,进一步包含以下步骤在第一层级创建的数据结构和第二层级创建的数据结构之间创建一个联系。
48.按照权利要求47的方法,其中创建联系的步骤包含在创建于第一层级的数据结构字段中创建一个索引,其索引第二层级中创建的数据结构。
49.按照权利要求46的方法,其中创建在第二层级中的数据结构的步骤包含在第二层级中创建数据结构以包含一个对与第二层级关联的一个数据库的索引。
50.按照权利要求49的方法,其中创建在第一层级中的数据结构的步骤包含在第一层级中创建数据结构以便第一层级的数据结构不包括对一个与第二层级相关的数据库的索引。
51.按照权利要求49的方法,其中创建在第一层级中的数据结构的步骤包含在第一层级中创建数据结构以便第一层级的数据结构包括一个数据库和第一层级的联系。
52.一个判定一个数据项锁是否存在的方法,包括如下步骤(a)判定一个数据项锁是否存在于第一层级;(b)当步骤(a)判定数据项锁不存在时,为数据项在第一层级中创建一个锁;(c)当步骤(a)判定数据项锁不存在时,判定一个数据项锁是否存在于一个第二层级;以及(d)当一个数据项的锁不存在于第二层级中时,在数据项上创建一个锁。
53.按照权利要求52的方法,其中创建的所述步骤(b)包含(b+1)在一个指示锁存在的第一层级中创建一个数据结构。
54.按照权利要求53的方法,其中所述步骤(b)进一步包含(b+2)从一个搜索数据结构到指示锁存在的第一层级的数据结构创建一个索引。
55.一个指明数据项被锁定的系统,包括创建装置,在第一层级上,一个数据结构指明该数据项被与第一层级相关联的一个第一事务锁定;创建装置,在第二层级上,一个数据结构指明该数据项被与第二层级相关联的一个第二事务锁定;
56.按照权利要求55的系统,进一步包括在第一层级创建的数据结构和第二层级创建的数据结构之间创建一个联系。
57.按照权利要求56的系统,其中创建一个联系的方法包括有在一个创建于第一层级的数据结构字段中创建一个索引的方法,其为创建于第二层级的数据结构进行索引。
58.按照权利要求55的系统,其中在第二层级中创建数据结构的方法包括有在第二层级中创建数据结构的方法,包括对与第二层级相联系的一个数据库的一个索引。
59.按照权利要求58的系统,其中在第一层级中创建数据结构的方法包括有在第一层级中创建数据结构的方法,以至第一层的数据结构不包括对与第二层级相联系的一个数据库的一个索引。
60.按照权利要求58的系统,其中在第一层级中创建数据结构的方法包括有在第一层级中创建数据结构的方法,以至第一层的数据结构包括一个与第一层级相关联的数据库的联系。
61.一个判定一个数据项锁是否存在的系统,包括判定一个数据项锁是否存在于第一层级的装置;为一个数据项在第一层级中创建一个锁的装置,当判定一个数据项锁是否存在于第一层级的该装置判定该数据项锁不存在时;判定一个数据项锁是否存在于第二层级的装置,当判定一个数据项锁是否存在于第一层级的该装置判定该数据项锁不存在时;以及在一个数据项上创建一个锁的装置,当一个数据项上的锁不存在于第二层级时。
62.按照权利要求61的系统,其中所述的用来为在第一层级的数据项创建一个锁的装置包括用来在显示有锁的第一层级创建一个数据结构的装置。
63.按照权利要求62的系统,其中所述的装置用来为数据项在第一层级中创建一个锁,该装置包括用以从一个搜索数据结构到指明有锁的第一层级的数据结构创建一个索引的装置。
64.一个计算机程序产品,其中有着计算机可读程序编码装置,用于指明一个数据项被锁定,包含有在第一层级中,创建一个数据结构的装置,指示出数据项被与第一层级相关联的第一事务锁定;以及在第二层级中,创建一个数据结构的装置,指示出数据项被与第二层级相关联的第一事务锁定。
65.按照权利要求64的计算机程序产品,进一步包括在产生于第一层级中的数据结构和产生于第二层级中的数据结构之间创建一个联系。
66.按照权利要求65的计算机程序产品,其中创建联系的装置包括在创建于第一层级的数据结构字段中创建一个索引的装置,它参照创建于第二层级中的数据结构。
67.按照权利要求64的计算机程序产品,其中在第二层级中创建数据结构的装置包括有在第二层级中创建数据结构的装置,包含对与第二层级相关联的数据库的一个索引。
68.按照权利要求67的计算机程序产品,其中在第一层级中创建数据结构的装置包括有在第一层级中创建数据结构的装置,以至于数据结构在第一层级对与第二层级相关联的一个数据库不包含一个索引。
69.按照权利要求67的计算机程序产品,其中在第一层级中创建数据结构的装置包括有在第一层级中创建数据结构的装置,以至于数据结构在第一层级中包含与一个与第一层级相关联的数据库的一个联系。
70.一个计算机程序产品,其中有着计算机可读程序编码装置,用于判定一个数据项的锁是否存在,它包括判定一个数据项锁是否存在于第一层级的装置;为数据项在第一层级中创建一个锁的装置,当判定一个数据项锁是否存在于第一层级的该方法判定该数据项锁不存在时;判定一个数据项锁是否存在于第二层级的装置,当判定一个数据项锁是否存在于第一层级的该装置判定该数据项锁不存在时;以及在一个数据项上创建一个锁的装置,当一个数据项上的锁不存在于第二层级时。
71.按照权利要求70的计算机程序产品,其中所述的方法用于为数据项在第一层级创建一个锁,它包括创建一个数据结构在指明锁存在的第一层级中的装置。
72.按照权利要求71的计算机程序产品,其中所述的装置用于为数据项在第一层级创建一个锁,它包括从一个搜索数据结构到指明锁的第一层级中的数据结构创建一个索引的装置。
全文摘要
一种用于处理和管理数据的同时使用的请求的方法或者系统。嵌套数据库用于创建不同的环境,在这样的环境中,该数据可以被访问和修改。对每一个存在的事务而言,有一个指示或者索引针对同事务相联系的数据库或者子数据库。还有一些数据结构,为每个所述的数据项指明哪个数据或者子数据库同该项相联系。使用涉及事务、子数据库、和数据项的数据结构,就可以为各种事务和子数据库创建控制区域。于是,在多个用户中就可以很容易地共享数据。创建子数据库不要求多个数据复件,数据库管理系统可被实现为使用该数据的一个复件,尽管有所要求时也可使用多重复件。
文档编号G06F17/30GK1539110SQ01813513
公开日2004年10月20日 申请日期2001年7月16日 优先权日2000年7月28日
发明者J·O·安番森, J O 安番森 申请人:辛孚尼系统股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1