为了提供恰当的对象存取,这些关系本质上可以将持久对象引导到物理分组。对象分组不太容易实现有两个原因。简单来说,如果给定一个类图,则可有三个基本的对象分组存储模型。然而,只有LOID允许对象的垂直分割和继承关系。主要困难是对象的父母被删除时,这个对象要重新分组。分布式系统中,DSM和NSM适合直接使用水平分割。......
2023-10-28
对象的分布设计比前面介绍的关系分布要复杂。从概念上讲,对象将方法及其状态封装在一起。实际上,方法是在型(type)上实现的,且为该型的所有对象所共享。因此,把对象和型定位好就成为关键。对此,分割类是不容易的,原因是对象模型本身的难度。例如,由于封装性,方法和对象密切捆绑,将它们分开存放会造成新的问题[4];对象模型以型格形态出现,而不像关系模型那样是平面型的,分片时会牵一发而动全局。例如,对象A的性质指向另一个对象B,如果将B随A分片到一起,则可能将B与其所属类中的其他对象隔离开,处理B所属类的对象集合时会有所不利。
考虑到类和型的问题,对象世界里的分布设计由于对象状态和方法封装在一起而产生了新的问题。产生新问题的原因是,方法是在型上实现的,而这个型的所有实例都能共享。因此,人们必须界定是否在属性上实施数据分片,从而将该属性上的相应方法复制给数据片,或者干脆将方法也分片。因为有些属性的域可能是其他的类,所以关于这些属性的类的分片可能会影响到其他类。最后,如果能够很好地将分片实施到方法上,则必须区分好简单方法和复杂方法。简单方法不涉及其他方法,复杂方法要调用其他方法。
与关系型系统类似,对象模型也可以按照水平、垂直和混合分片。除此之外,还有人定义了导出水平分片、关联水平分片(associated horizontal partitioning)和索引路径分片(index path partitioning)等。导出水平分片和关系型系统的相似,关联水平分片与关系型系统的区别是,后者无谓词子句(predicate clause)来限制对象实例。
1.类的水平分片
对象数据库的水平分布与关系模型中的水平分布类似,但是导出水平分片有区别,如下。
类的分片可以产生子类的分片。注意,类可以有多个子类,因此该类在分片时会产生冲突。该类分片时考虑的分片谓词的合理性在面向子类时可能会变得不合理。为此可考虑按最细特指的类(即类格里最细分后的类)开始分片,逐步在类格中上移,将各层的特点反映到超类(superclasses)。这是一种自底向上的方法。
复杂属性的分片可以反映其包含类的分片。基于方法的类分片无需在设计里反映出从一个类到另一个类援引的顺序。
现在讨论一种简单情况,即由简单属性和方法构成的类的基本水平分片。此时类的基本水平分片可以按类属性上定义的谓词来实现。分片很简单:对于要分片的类C,我们创建一系列类C1,…,Cn,每个类由满足特定分片谓词的Ci(1≤i≤n)实例构成。如果这些谓词是互斥的,则类C1,…,Cn是不相交的(disjoint)。此时,可以将C1,…,Cn定义为C的子类[5],这样可将C的定义改为抽象类。
如果分片谓词不是互斥的,问题就会变得很复杂。要解决这个问题,还需深入研究。
【例15.5】 考察一个类Engine:
这是一个简单类,描述的是汽车引擎,其所有属性都是简单的。这些属性是no-of-cylinder(气缸数)、capacity(容量)和horsepower(马力)。也可简单记作:
Engine(no-of-cy l inder:Integer,capaci ty:Real,horsepower:Integer)
甚至记作:
Engine(no-of-cy l inder,capaci ty,horsepower)
下面是两个分片谓词:
p1:hor sepower<150
p2:horsepower≥150
这里,Engine类的对象按照其马力(horsepower)分割成两个类Engine1和Engine2,它们继承Engine类的所有性质。
这种类的基本水平分片可以应用到所有的类上。当这一处理结束时,我们可以获得每个类的分片模式。但是,这些模式没有反映导出分片。这样,如何使用一个谓词集从前面步骤生成的结构中产生导出分片是下一个步骤需要考虑的。本质上,我们要研究从超类到子类的分片传播问题,并能把这两个分片集合成一种一致的形态。
现在讨论基于对象的实例变量的水平分片问题(即对象的有些实例变量的域是另一个类C′)。但从对象行为看,假设所有的方法是简单的方法,即对象的方法不涉及对关联类C′的方法的调用。这种情况下,必须考虑类之间的组成关系。这里可用一个主-从(owner-member)关系来描述:如果类C1有一个属性A1的域是类C2,则C1是主(owner)、C2是从(member)。这样,C2的分解遵循与导出水平分片一样的原则。
接下来看看方法变得复杂时的情况。例如,考虑一个类,其属性是简单的、方法是复杂的情况。这种情况下,基于简单属性的分片可以用前述方法处理。然而,对于复杂方法,必须确定在编译期间那些通过方法调用存取的对象,这可以通过静态分析来实现。显然,如果被调用的方法在调用时包含在相同的分片里,则可以获得最佳性能。优化要将一起存取的对象定位在同一数据片里,因为这样可将本地存取最大化。(www.chuimin.cn)
最复杂的情况是,类有复杂属性也有复杂方法。这时必须考虑子型关系、聚集关系和方法调用关系,这里不再赘述。
2.类的垂直分片
类的垂直分片更复杂。给定一个类C,将它垂直分片成C1,…,Cn,就产生一系列片类[6],每个片类由一些属性和方法构成。这样每个分片比最初的类要小。必须注意,原始类-超类和子类之间的关系,和分片类之间的子型关系,分片类自己之间的关系,以及方法定位之间的关系。如果方法都是简单的,则方法可以简单分割,否则方法的定位就比较困难。
3.路径分片
可以用组合图来代表组合对象(composite objects)。组合对象如汽车由发动机、车轮、方向盘、控制箱等组合而成,而发动机由气缸、活塞、连杆等组成,从而形成一个组合图。许多应用里,必须访问完全组合的对象。
路径分片是将组合对象分组形成一个分片的概念。路径分片由所有域类的对象分组而成,这些域类对应于以复杂对象为根的子树里的所有实例变量。
路径分片是形成索引的一个节点分层结构。索引的每个节点指向成分对象(component object)域类里的对象。这样,索引包含一个指向组合对象的所有成分的指针,避免浏览类组合分层结构里的成分。结构化索引实例是一个OID集合,它们指向组合类的所有成分对象。相对于对象数据库模式而言,结构化索引是一个正交结构(orthogonal structure),其中,它将组合对象的成分对象的所有OID组成一个结构化索引类(structured index class)。
4.类分片算法
类分片算法的主要目标是,通过减少不相关数据的存取来改进用户查询和应用的性能。这样,类分片是一种物理数据库设计技术,按照应用语义将对象数据库模式重新结构化。类分片要比关系分片更复杂,也是一个NP-complete问题。类分片算法主要基于类似/血缘(affinity-based)方法和成本驱动方法(cost-driven approach)。
在关系模型中,我们使用属性类似/血缘性进行垂直关系分片。同样,也可以使用实例变量、类似/血缘方法、多个方法间的类似/血缘性来实现水平分片和垂直分片。
虽然使用类似/血缘方法可以直观地分片,但是未必能最大限度地减少磁盘存取开销。成本驱动方法则可以优先处理查询的磁盘存取问题。
1)分配
对象数据库涉及方法和类的分配问题。方法分配问题与类分配问题密切相关,这是由封装特性决定的。因此,类的分配蕴含相应母类(home class)中方法的分配。但是,面向对象数据库上的应用涉及方法,方法的分配影响应用的性能。存取分布在不同节点的多个类的方法分配是一个有待解决的问题。学术界曾提出以下四个问题。
(1)本地对象:这是一种最直接的情况。这里,行为和对象放在一个地方,是一种最简单的情况。
(2)本地行为:远程对象此时发生的行为在本地,而涉及的对象在远地。有两种处理方法:把对象从远程移到本地;或者在对象所在的节点实现行为,前提是远程节点支持实现行为所使用的代码。
(3)远程行为:本地对象与第(2)种情况相反。
(4)远程函数:远程对象与第(1)种情况类似。
2)复制
复制增加了新的设计问题。对象、对象的类或对象的汇集可以作为复制单位。毫无疑问,这与对象模型是相关的。型的说明是否复制到每个节点是需要考虑的一个问题。
有关分布式数据库技术的文章
为了提供恰当的对象存取,这些关系本质上可以将持久对象引导到物理分组。对象分组不太容易实现有两个原因。简单来说,如果给定一个类图,则可有三个基本的对象分组存储模型。然而,只有LOID允许对象的垂直分割和继承关系。主要困难是对象的父母被删除时,这个对象要重新分组。分布式系统中,DSM和NSM适合直接使用水平分割。......
2023-10-28
图3.1软件开发过程数据库设计的过程与软件开发的过程类似。下面先来看一下集中式数据库设计的情况。在分布式数据库系统中,集中式数据库设计的问题依然存在,且有以下两个新的问题需要考虑。这个过程就是确定如何将全局关系划分成水平、垂直或者混合的数据片。数据片的分配,即决定数据片如何映射到物理镜像上,决定如何复制数据片。数据片的分配问题则研究已久,当然,过去研究的则是“文件分配”问题。......
2023-10-28
对象从一个节点移动到另外一个节点,这是分布式系统的一个显著特点。这样就产生了新的问题,即对象迁移问题。另外一个问题是必须跟踪对象移动,以便能在其新地点找到该对象。处于激活或等待的对象不允许迁移,否则,会被阻塞。因为对象移动时,必须更新系统目录,以反映新的位置。组合对象的移动会涉及其参考的其他对象的移动,如对象组装方法。......
2023-10-28
SQL:1999[7]是ISO制定的一个国际标准。可以说SQL3是为面向对象SQL而定义的,计划作为对象-关系数据库管理系统的基础。与SQL-92相比,新的语言增加了面向对象的特征。JTC 1中的分委员会SC32负责数据库的标准问题,其中,WG3负责SQL标准,而WG4关注SQL/MM。......
2023-10-28
瞬时对象标识的实现与所使用的程序设计语言有关。对于永久对象标识,可以是物理标识也可以是逻辑标识。注意,选定对象的大小也很重要,使用小对象,导致对象标识数量大,可能会使得OID表十分大。所以,对象标识管理与对象存储技术密切相关。在对象存取期间,如果LOID里的服务器标识部分不直接用在对象定位标示上,则对象标识符起的是纯LOID的作用。在磁盘上通常采用对象标识符作为指针。......
2023-10-28
几乎所有的对象查询处理器都使用关系型系统定制开发的优化技术。通过继承层次存取对象的优化也是面向对象和关系查询处理相区别的问题。图15.8对象查询处理方法对象的复杂结构及其上面提及的那些与关系查询的四点主要差异导致对象查询的优化和关系查询比较有很大不同。查询优化器可以计算整棵处理树的成本。......
2023-10-28
在关系数据模型上构建对象数据库称为关系-对象模式。前面的VML样例就是基于关系-对象模式的,只是那里的讨论聚焦于模式映射。本节以Oracle为例说明关系-对象模式的实现。由于Oracle是典型的关系型数据库管理系统,因此继承自己的优势是其首要考虑的因素。这样,它采用在关系系统上构建面向对象系统的策略。在许多其他面向对象语言和系统中,Oracle对象类型等于对象类。......
2023-10-28
Oracle公司的OPS环境比一般的(单实例)Oracle环境复杂得多。不同结构下的OPS的实施略有不同。图14.23OPS体系结构为了利用这些特性,需要专业人员合适的设计以及恰当的手工配置。下面对有些关键问题进行简单讨论,讨论中会涉及一些Oracle系统专用的术语,读者可参阅Oracle公司的相关文档。DLM与Oracle进程一起工作并相互通信。DLM相关的初始化参数在每个实例的SGA[12]中分配必要的结构以处理消息机制、封锁与实例相关的Cache管理,这样就为各种Oracle进程操纵提供了基础。......
2023-10-28
相关推荐