首页 理论教育分布式数据库技术-对象迁移

分布式数据库技术-对象迁移

【摘要】:对象从一个节点移动到另外一个节点,这是分布式系统的一个显著特点。这样就产生了新的问题,即对象迁移问题。另外一个问题是必须跟踪对象移动,以便能在其新地点找到该对象。处于激活或等待的对象不允许迁移,否则,会被阻塞。因为对象移动时,必须更新系统目录,以反映新的位置。组合对象的移动会涉及其参考的其他对象的移动,如对象组装方法。

对象从一个节点移动到另外一个节点,这是分布式系统的一个显著特点。这样就产生了新的问题,即对象迁移问题。

下面讨论迁移的单位问题。大家知道,在面向对象概念里,对象由其状态及其上面的方法(行为)来描述。在状态和方法分离的系统中,可以移动系统状态而不移动方法。在一个纯行为系统里,可以将对象按照其行为来分片。若将单个对象置为迁移单位,则其重新分配可能会将它搬离与其捆绑的类型说明(信息),因此必须确定是否将该类型说明复制到每个有实例驻留的节点,或者将行为或方法应用到对象时需存取类型(的定义)。

这样可以将类(型)的迁移问题分成以下三类。

●源码移动,然后在目的地重新编译。

●类编译后的版本可以像其他对象一样迁移。

●类定义的源码移动,但编译后的操作不移动,因为可以使用懒惰迁移策略(lazy migration strategy)。

另外一个问题是必须跟踪对象移动,以便能在其新地点找到该对象。结果是对象可以处于以下四种状态中的一种。

●Ready:Ready对象指目前未被调用,或者还没有收到消息,但等待被调用,对于接收消息状态。

●Active:Active对象指目前已被调用,响应于调用或消息,处于激活状态。(www.chuimin.cn)

●Waiting:Waiting对象已被调用(或已经发送消息给另一个对象),处于等待响应状态。

●Suspended:Suspended对象暂时不能被调用。

处于激活或等待的对象不允许迁移,否则,会被阻塞。

迁移则涉及两步:将对象从源节点发送到目的地;在源节点生成一个代理(proxy),取代原始对象。

这里要注意两个问题。第一个问题是系统目录的维护。因为对象移动时,必须更新系统目录,以反映新的位置。可以采用懒散方法来实现这一点,即无论什么时候,在移动期间,将代理(surrogate/proxy)对象重指向援引(invocation)。第二个问题是在对象移动频繁的高度动态环境里,代理链可能会变得很长。为了系统的透明度,要把这些代理链压结实。而压结实的结果必须反映在目录里,这在懒散方法里不太容易做到。

还要注意组合对象(composite object)的移动问题。组合对象的移动会涉及其参考的其他对象的移动,如对象组装方法。

对象存储包含两个重要问题,即对象分组(object clustering)和分布垃圾收集。大部分对象是组合对象和复杂对象,它们的特性可带来好处:如果在磁盘上将数据有效分组,则可以减少检索时的I/O开销。

当对象数据库中出现分布垃圾收集时,是因为存在基于参考的共享。所以,需要小心对付对象删除和随机的存储空间回收。