对象存储与对象标识的概念紧密相关:对象标识要求每个对象都有一个与之唯一对应的、无论对象是否改变都不会改变的标志。对象标识使各对复杂关系的有效处理能够进行。若对象相互间的引用都是通过其唯一的对象标识实现的,那么,即使对象的状态或位置改变了,也不会影响到对象之间的关系。对象标识与基于值的数据库,如关系数据库不同,在关系数据库中,实体是通过它们的主属性标识的,因而可能随时改变。换句话说,对象标识对于对象关系的持久性维护是有用的。这种对象及其之间关系的永久性需要一种不同于关系数据库中所用的删除机制。因而,许多面向对象数据库不立即删除对象,而是删除对该对象的引用。当所有对被删除对象的引用都被删除之后才删除该对象,然后收回该对象所占空间。
对象标识符可用若干不同的方法构造,它们各有利弊。ORION中所用方法为:一个对象标识符用一个二元组(类标识符和实例标识符)。其中类标识符为该对象所属类的标识符,而实例标识符是该类或整个数据库中该实例的标识符。在分布式系统中,对象标识符还必须加上场点标识符。这种方法有一个好处,当一条消息发送给某个对象时,系统可以从指定的对象标识符中截取该对象的类标识符,而不必首先获取对象本身。系统必须查看对象以决定这条消息是否有效。如果消息有效,它就接着获取该对象并且发送相应的方法。类对象可以隐含起来以优化系统性能。但是这个方法也有缺点:即把对象从一个类移到另一个类时开销很大。而且,一个对象可以引用任意多个其他对象,也可以被任意多个其他对象所引用。这就是说,如果一个对象的类标识符改变了,那么所有其他对象对该对象的引用就变得无效了。找出所有这样的对象并且将它们的引用修改成新标识符,开销自然十分巨大。 如一个对象在应用程序结束之后还继续存在,则该对象被称为具有永久性的:对象的持久性。对象的持久性是将一个瞬态对象变为持久的的方法,包括: ● (Class)按类持久:声明一个类中所有对象都是持久的。简单但缺乏灵活性,有时一个类中可以同时有瞬态和持久对象。 ● (Creation)按创建持久:扩展创建瞬态对象的语句来创建持久对象。 ● (Marking)按标志持久:所有对象被创建为瞬态的,需要持久的对象在程序结束前显式地标识为持久的。 ● (Reference)按引用持久:一个或多个对象被显式地声明为(根)持久的;其它被根对象引用(直接地或间接地)到的对象被看作是持久的。 |