首页 理论教育分布式数据库技术中的对象标识管理方案

分布式数据库技术中的对象标识管理方案

【摘要】:瞬时对象标识的实现与所使用的程序设计语言有关。对于永久对象标识,可以是物理标识也可以是逻辑标识。注意,选定对象的大小也很重要,使用小对象,导致对象标识数量大,可能会使得OID表十分大。所以,对象标识管理与对象存储技术密切相关。在对象存取期间,如果LOID里的服务器标识部分不直接用在对象定位标示上,则对象标识符起的是纯LOID的作用。在磁盘上通常采用对象标识符作为指针。

谈到对象管理,就要想到对象标识管理。

对象标识(OID)是由系统生成的,用于唯一地标识系统中的每个对象(无论是瞬时的或是永久的,系统创建的还是用户创建的)。永久对象的实现与瞬时对象的实现有所区别,因为前者必须提供全局唯一性。

永久对象标识的实现有两种通用解决方法,即基于物理的标识或基于逻辑的标识,它们各有优缺点。物理标识(POID)方法等同于对应对象物理地址的OID,这个地址可以是磁盘页面地址及其从基地址起始的位移。寻找这个对象的好处是可以直接从OID分析获得。其不利之处是,无论什么时候,当对象移动到不同页面时,所有的父对象和索引的指向都必须更新。

逻辑标识(LOID)方法为每个对象分配一个系统范围内的唯一OID。因为OID是不变的,所以对象的迁移无需额外开销。该方法是建立一个OID表,为每个OID捆绑一个物理对象地址。当然也要付出代价,增加的开销是每次存取对象时都需要查OID表。面向对象数据库系统倾向于使用逻辑标识方法,因为它适合于动态环境

瞬时对象标识的实现与所使用的程序设计语言有关。

对于永久对象标识,可以是物理标识也可以是逻辑标识。物理标识可以是真实的对象地址,也可以是虚拟的对象地址,这取决于是否提供虚拟存储器。一般来说,物理标识方法更有效,但要求对象不迁移。逻辑标识方法则与面向对象程序设计语言有关,将对象均匀地分配给程序执行的间接表里。这个表存放的是逻辑标识,在Smalltalk里称为OOP(object oriented pointer)。这样,需要有相应机制管理对象的物理标识。对象迁移导致增加的开销是,每存取一次对象需要查一次表。

对象管理器面临的窘境是如何在普遍性和有效性之间恰当地选择折中方案。注意,选定对象的大小也很重要,使用小对象,导致对象标识数量大,可能会使得OID表十分大。所以,对象标识管理与对象存储技术密切相关。

在分布式对象DBMS中,使用LOID更合适,因为那些操作如重组(reclustering)、迁移(migration)、复制(replication)和分片(fragmentation)会频繁发生。但要注意,使用LOID会引起与分布相关的问题,如下。(www.chuimin.cn)

●LOID的生成:LOID在整个分布域里是唯一的。如果LOID在中心节点生成,则容易保证其唯一性。然而,在中心节点生成LOID模式又是我们不希望的,因为这存在潜在的网络开销和负载问题。在多服务器环境里,可以让每个服务器为其节点上的对象生成LOID。LOID的唯一性是通过将服务器标识作为LOID的一部分来得到保证的。因此,LOID由一个服务器标识和一个序列号组成。序列号是对象在磁盘上位置的逻辑表示。在一个特定的服务器中,序列号是唯一的,为了防止误删对象,序列号也不能重用。在对象存取期间,如果LOID里的服务器标识部分不直接用在对象定位标示上,则对象标识符起的是纯LOID的作用。如果使用该LOID的服务器标识符部分,则LOID起的是伪LOID的作用。

●LOID的映射定位和数据结构:LOID-to-POID映射信息的定位很重要。使用纯LOID,如果客户端可以同时直接连接多个服务器,则必须在客户机上呈现LOID-to-POID映射信息。如果使用伪LOID,则在服务器上只需呈现映射信息。映射信息在客户端上的呈现是我们不期望的,因为这种解决方式不是可伸缩的,即映射信息必须在可能存取该对象的所有客户端上更新。

LOID-to-POID映射信息通常以哈希表或B+树的形式存放起来。哈希表能提供快速存取功能,但不能随着数据库的大小而可伸缩。B+树是可伸缩的,但是需要消耗一定数量(取决于LOID数量的多少)的存取时间,需要复杂的并发控制和恢复策略。

在面向对象DBMS中,可以通过属性基于对象值从一个对象导航到另外一个对象,常用的对象是指针。在磁盘上通常采用对象标识符作为指针。然而在内存里,希望使用内存内指针来将一个对象导航到另外一个对象。这样,将磁盘上的指针转换成内存内指针的过程称为指针转换(pointer-swizzling)。通常有两种指针转换机制,分别是基于硬件模式的机制和基于软件模式的机制。

基于硬件模式里,使用操作系统的页面容错机制,即当页面放入内存时,所有指针都被“转换”(swizzled),并指向保留的虚拟存储器帧(virtual memory frames)。与这些保留的虚拟存储器帧对应的数据页面,只有真正存取这些页面时才载入内存。

基于软件模式里,将对象表用于指针转换。也就是说,指针被转换到指向对象表里的一个位置。

基于硬件模式的优点:当跨越一个特殊的对象层次时,由于对每个对象的存取不需要间接关联,因此性能更好。但也有其明显的缺陷:如果分组做得不好,即每页只存取很少几个对象,则页面故障机制的高开销使得基于硬件模式缺乏吸引力。基于硬件模式也不能防止客户去存取页面上已经删除的对象。而且在最坏的分组情况下,基于硬件模式可以耗尽虚拟内存空间。最后,因为基于硬件模式是面向页面的而不是面向对象的,所以很难提供对象级的并发控制、缓冲管理、数据传输和恢复特征。大多数情况下,在对象级操纵数据要好于在页面级操纵数据。