对象关系数据库中oid回收机制

上传人:E**** 文档编号:118153340 上传时间:2019-12-11 格式:PDF 页数:4 大小:243.67KB
返回 下载 相关 举报
对象关系数据库中oid回收机制_第1页
第1页 / 共4页
对象关系数据库中oid回收机制_第2页
第2页 / 共4页
对象关系数据库中oid回收机制_第3页
第3页 / 共4页
对象关系数据库中oid回收机制_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《对象关系数据库中oid回收机制》由会员分享,可在线阅读,更多相关《对象关系数据库中oid回收机制(4页珍藏版)》请在金锄头文库上搜索。

1、计算机科学2 0 0 4 V 0 1 3 1 1 0 ( 增刊) 对象关系数据库中o I D 回收机制。, A nO I D R e c y c l eM e c h a n 扭mf o rO b j e c t R e l a t i o n a lD a t a b a s e 8 施源彭智勇庄继峰翟博掇 ( 武汉大学软件工程国家重点实验室,武汉大学计算机学院武汉4 3 0 0 7 2 ) A b 5 I r a c t o b J e c ti d e n t i f i e r ( o l D ) p 1 8 y e r yi m p o r t a n tr o l emb o t

2、ho b j e c t o r i e n t e da r l do b J e c t r e l a t l o 耻ld a t a b a s e 8H o W e v e r ,w h e no b j e c t sa r ed e l e t e d t h e i ro I D sw i l ln o tb er e c l a l m e di nm o s td a t a b a 8 e s I nt h 协p a p e r ,w ep r o p o s ea no I Dr e c ”l em e c h a n i s mw I l i c hc a nb eu

3、 s e dt or e u s eO I D so ft h ed e l e t e do b j e c t s T h em e c h a n i 咖h a sb e e n s u c c e s s f u I ly l m p l e m e n t e di nP o s l g r e S Q Lw h i c hba no p e ns o u r c eo b j e c t f e l a t i o n a Id a t a b a s es y s t e m K e y w o r d s o l D r e c y c l e ,R e c l a i ma

4、n dr e u s e ,S y s t e mr e c o v e r y 1 引亩 O I D ( o b j e c t i d e n t i f i e r ) 是面向对象数据库中提 出的新概念。面向对象数据库中采用了“面向对象” 的方法,即实体类型用“类”表示,实体用“对象”表 示,系统给数据库中的每个对象赋予一个。对象标 识”( O I D ) ,起唯一标识作用。这种实现方法在语义 上克服了以往“面向值”数据模型的缺点o 。O I D 的 引入,避免了数据库系统的变量冗余,使对象可以方 便地被引用并共享o 。“。 O I D 作为对象之间相互区别的标志,通常应具 有以下几个性

5、质 3 :唯一性即每个O I D 在数 据库中都是唯一的。对应性O I D 和对象是一 一对应,密不可分的。独立性O I D 用来表示 对象的存在,但是O I D 的值却应该是独立于对象本 身的,或者说O I D 的值应该独立于对象的内部状 态,不会随着对象内部状态的变化而变化。抽象 性。 对象关系数据库口5 3 扩展了现有的关系数据库, 使关系数据库获得面向对象模型的许多优势,支持 大对象类型的存储和操作、数据和函数的集成,具有 规则管理能力。这种新型的数据模型中,0 I D 的概 念消除了传统关系数据库系统中存在的数据模型的 缺陷,使得用户在建模时既不用做范式分解工作,也 不用担心对象内部

6、状态的改变会导致数据库的异 常“。 O I D 作为一项数据库资源也是有限的。如果对 废弃的O I D 不回收则O I D 可能被耗尽。一种假设 认为,用完所有0 I D 的时同相对于数据库中对象的 生存周期足够长,以至于当数据库中所有O I D 耗尽 时,可从头开始循环利用以前的0 I D 。然而随着硬件 的不断发展以及用户需求的不断增加,数据库中存 储的对象更多,修改更频繁,因而O I D 资源消耗的 速度也大大加快;同时许多应用都需要长期存储数 据,对象存在数十年也是可能的。因此我们认为上述 假设不成立,它可能造成对象标识的冲突,进而导致 系统崩溃。以功能强大的开放源代码的对象关系数 据

7、库管理系统P o s g r e S Q L m 为例,它以3 2 位无符合 整数作为O I D 这意味着系统在不重复利用O I D 的 情况下最多可分配约4 G 个O I D ,即最多可创建4 G 个对象。而现代事务数据库应用的特点是数据量大, 并且增删频繁,若系统不对废弃O I D 进行回收,上 述4 G 个o I D 可能在几年内被消耗完。因此采用一 种合理的机制来实现0 I D 的回收和再利用,从而尽 量避免出现O I D 披耗尽的情况,是十分必要的。 基于上述问题,本文设计了一套关于对象关系 数据库中的O I D 回收再利用机制,并介绍了在 P o s t g r e s Q L 系

8、统上实现该机制的过程。文中针对该 回收机制分别从O I D 回收、O I D 再利用以及故障恢 复三个方面加以说明。 2o I D 机制简介 目前,对象标志符管理的实现方法可归纳为两 种:外部标识符管理机制和内部标识符管理机制。外 部标识符管理机制由用户为对象分配O I D ,这种方 法虽然语义直观,但是却使用户陷入了O I D 的复杂 管理中,很难保证O l D 的唯一性,而且由于O I D 的 抽象性也不利于用户记住每一个对象的O I D 内部 标志符管理机制使用户摆脱了繁琐的O I D 管理,使 得O I D 对用户透明。大多数面向对象数据库都采用 * ) 本文研宽得到国家8 6 3 (

9、 2 0 0 2 A A 4 2 3 4 5 0 ) 国家自然科学基盒( 6 0 2 7 3 D 7 2 ) 教育部博士点基金( 2 0 0 1 0 4 8 6 0 2 9 ) 和湖北省青年燕出人才基金 ( 2 0 0 2 A c 0 0 3 ) 资助 5 6 6 内部标识符管理机制。 2 1 对象与对象标识 根据数据库中对象与标识的对应关系,可以分 为“基于对象标识的对象模型”和“混合对象模型”。 “基于对象标识的对象模型”是种比较纯粹的面向 对象的数据模型,它把系统中的所有成分都作为对 象处理并为之分配一个系统范围内唯一的对象标 识。在这样的系统中,小到一个整数一个字符串,大 到一个记录,

10、一个数据库都是统一地由对象标识来 表示的对象。这种数据模型的优点是对象模型的一 致性和简单性,但是在很多情况下,所谓的原子对象 并不会被独立地存取,因而也没必要有对象标识, 此外为每个原子对象都分配一对象标识将可能引 起十分巨大的运行时空开销。而在所谓的“混台对象 模型”中则恰恰相反,它避免将对象标识分配给系统 中的所有数据成分,而只将它们分配给那些必须具 有对象标识的对象。没有对象标识的对象被称为原 子对象,而具有对象标识的对象被称为复合对象, 复合对象通常是由原子对象通过对象的聚集、联合 和引用构成的复杂对象。原子对象没有对象标识,但 却可以通过它们所构成的复合对象的对象标识来访 问它们,

11、原子对象只有在构成了某个复合对象时才 有存在的意义。 2 2 对象标识的设计策略 在常用的数据库模型中,对象标识的设计常分 为下面三种方法: 方法一t 按照类似于关系数据库系统中定义表 格的关键字的方法- 系统选用对象的若干个属性组 合成对象标识。因为对象标识并没有实现与对象内 部属性的相互独立性,这种尝试并没有消除关系数 据库系统中由于关键字可能的冲突而导致的异常。 因此现在使用得并不广泛。 方法二:采用对象的物理存储地址作为对象标 识。这种方法的突出优点是对象的存取效率非常高。 在面向对象的数据库系统中,对象的存取最终都是 通过对象标识来进行的。由于采取物理地址的标识 方法能够实现对象的快

12、速定位,因此对象在内外存 之问的转换可以做到非常简洁和迅速,这对于提高 面向对象数据库系统的运行效率意义重大。同时,这 种方法也保证了对象标识与对象内部属性值之间的 相互独立性,又避免了对象标识自身的冲突。然而这 种方法也存在着一种致命的缺点:我们通常要求对 象标识一经产生并分配给某个具体的对象后,就不 能改变其自身的值。既然对象的物理存储地址就是 对象标识的值,因此对象的物理地址也就不能改变。 这在数据库系统中几乎是不可能的也是不可接受 的,困为它违反了数据库要求数据物理独立性的要 求,因此这种方法也几乎被淘汰了。 方法三:现在人们普遍使用的方法是所谓的代 用品方案( s u r r o g

13、 a t e ) 。所谓的代用品其实是一个由 系统自己负责生成并维护的句柄,它在系统范围内 唯一,因此可以被用来作为对象标识。该代用品与对 象内部属性没有联系且独立于对象的物理位置,但 是我们可以根据它侠速地定位到对应的对象。为了 实现高效率和维护的简洁,现在的代用品方案大都 采用下面两种算法:( 1 ) 时间戳算法:根据对象创建 的时刻,将系统日期和时闯组合赋给对象。这种算法 的突出优点是简单,但是在时问粒度的大小取舍中 存在缺陷;( 2 ) 句柄维护:系统为每一个范式都维护 一个句柄,每次生成新的对象,都将该句柄的值加 一,然后赋给对象作为对象标志符。在实用的数据库 中,该句柄一般为6 4

14、 位。然而,无论系统采甩多长的 句柄,该资源总是有限的。所以,在这种分配机制下, 必须引入并建立起相应O I D 的回收机制避免0 I D 资源的枯竭。 3 对象关系数据库的o I D 机制 对象关系数据库P o s t g r e s Q L 口3 系统采用代用 品方案中的旬柄维护羡略,使用3 z 位的无符号整数 作为对象标识,最多可以分配4 G 个O I D 。具体做法 为;使用一个全局变量n e x t o i d 来记录下一个可分 配的O I D ,该变量从1 6 3 8 4 开始( 1 6 3 8 4 之前的为系统 保留的O I D ) ,每分配一个O I D 后自动加1 。该变量

15、记录在系统的共享内存 9 1 中。共享内存是P o s t g r e s Q L 系统在内存中开辟的一块特殊空间,它为 所有进程所共有。如果某个进程需要对共享内存中 的变量进行操作,它必须先获取相应数据结构的锁。 因此不同的进程不可能同时修改共享内存中的数 据。利用这种机制,系统可以确保不同进程在分配 O I D 过程中不相冲突,避免O I D 的重复分配。 具体来说,n e x t o i d 存放在共享内存的结构体 s h m e “l v a r i a b l e c a c h e 中。该结构体有三个域: T r a n s I d :下一个可分配的事务I D ;n e x t o

16、 i d :下一 个可分配的O I D ;o i d c o u n t :O I D 分配计数器。 o i d c o u n t 初始值为8 1 9 2 ,每分配出一个O I D 则自 减一次。当o i d c o u n t 达到。时,系统写一次日志记 录,并重新将该变量赋值为8 1 9 2 。换句话说,系统以 8 1 9 2 个O l D 为一个分配单位。其具体流程如图1 。 数据库系统出现故障时使用检查点和回滚恢 复算法能够将损失降到最小。检查点( c h e c k p o i n t ) 是指在磁盘中对某些请求作记录的一种状态。系统 会定期地或在自动关机时做检查点,一旦发生故障 能够自动地从最后一个检查点开始进行恢复工 作 。P o s t g r e s Q L 系统针对O I D 恢复的具体做法 是:定期做检查点时,记录下个分配单位( 8 1 9 2 个 O I D ) 中的第一个O I D ;在正常关机时检查点中记 5 6 7

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号