关于对象代理数据库系统的探究
2014-03-25刘一鸥
刘一鸥
(西安外事学院,陕西西安,710077)
同传统数据库管理系统一样,对象代理数据库系统TOTEM 主要由储存管理、查询处理、事务管理等几部分组成,各部分通过系统表联系成一个整体。
1 TOTEM 的存储管理
首先,对象代理数据库的代理对象的属性值经常来源于相关对象。其次,对象之间具有语义联系。最后,对象代理数据库存在虚属性和实属性之分,在虚属性上建立索引时,该属性只有模式没有真实的值,这与传统的建立索引放法有很大区别。
1.1 对象代理储存
在对象代理数据库中存在对象和代理对象、类和代理类以及它们之间的双向指针。
TOTEM 采用系统表存储和管理类、代理类、类和代理类之间的代理关系、代理类的代理类型、代理规则以及所有代理类的虚属性的切换操作表达式。
类似关系数据库,TOTEM 系统采用表结构来存储对象和代理对象。为了存储和管理对象和代理对象之间的双向指针,需要设计一个系统表,作为对象oid 和对象存储物理地址的对照表,将对象的代理对象的oid 和源对象的oid 也存储在这个系统表,并通过系统表中的OID 来指示源类和代理类。
1.2 共享对象缓冲区
由于对象的复杂性,对象之间复杂的语义联系使得传统关系数据库的页面缓冲区管
管理不再满足TOTEM 系统要求,所以采用双缓冲区管理机制,它由定长页面缓冲区和对象缓冲区组成,对象缓冲区是不定长的,它的存储单元是一个个的对象。由于对象大小的差异性,使得管理对象缓冲区要必定长的页面缓冲区复杂得多,对新检索对象的安置也比较麻烦,系统需要在共享对象缓冲区中找到一片足够大的连续空间来放置该对象。
1.3 对象代理索引
对象代理数据库中对象的属性有扩展属性即真实属性和代理属性即虚属性两种。在实属性上建立索引,将所有单向代理该属性和所有经过多层单向代理该属性,并且有属性上写方法的代理类上都作上该代理类上在该属性上已经建有索引的标志,并且索引为源类实属性上建立的那个索引。通过这个标志,可以实现索引共享机制。在虚属性上建立索引,此时在索引上没有值,在形成索引元组的时候,需要通过切换操作的读方法将该被索引的属性的实质值计算出来,然后存入到索引元祖中去。
2 TOTEM 的查询处理
TOTEM 处理代理类虚属性的查询时,建立了一套完善的查询机制,是代理类的查询能采用与一般查询一致的形式描述和实现。
2.1 虚属性查询
代理类的定义中,代理规则实际上只定义了本代理类和其直接父类之间的关系,而不管这些父类是否也是代理类,因此有可能代理规则中的目标表达式含有源类的虚属性。因此生成新的switching 表达式时,首先要把目标表达式中虚属性的Var 节点用其对应的switching 表达式替换,即通过嵌套的switching 表达式实现任何代理类层次上的虚属性的计算。这种表达式将可以从代理对象出发,一直到最上层的源对象中的实属性值并得到最终的计算结果。
在查询编译阶段,如果查询语句中出现了代理类和对虚属性的引用,查询编译器将通过查元数据,找出这些虚属性的切换表达式,放入查询树中,供查询优化器和执行器使用。
2.2 跨类查询
除了虚属性的透明性之外,OD-SQL 查询语句的另外一个特点在于路径表达式。因为在TOTOEM 系统中,所有相关的对象都是由系统维护的双向指针连接在一起的,所以十分快捷的从一个对象导航到与其相连的其他对象。
3 TOTEM 的事务管理
在TOTEM 系统中,对一个对象的修改操作由两部分组成,对该对象自身或其源对象的修改以及修改所引起的对象更新迁移。因此,如果将修改过程中所涉及的所有对象都同时加锁,势必会造成系统大量事物的阻塞。为此,TOTEM 采用了一种基于原子段的多粒度锁,它是针对多版本两阶段加锁方法的改进
3.1 更新迁移
在TOTEM 系统中,满足代理规则的源对象一定会在代理类中存在代理对象。在类或对象发生更新时,系统会产生更新迁移,以维护这种严格的代理规则。
1)类的更新迁移 创建代理类不仅只是模式上的创建,而且需要检查其源类中是否有满足代理类的代理规则对象。如果有,则在新创建的代理类中生成若干对象作为这些对象的代理对象,以维护代理规则的严格性,并建立代理对象和源对象之间的指针。同样,删除一个类时,出了删除自身与其所有的代理类及其中的对象,还要删除其所有源类中源对象和该类中代理对象之间的双向指针。
2)对象的更新迁移 对象和代理之间存在各种依赖关系,他们通过选择谓词、组合谓词和分组谓词来定义,称这些谓词为代理规则。对象的改变引起其代理对象相应的变化,称之为对象更新迁移。对象更新迁移主要用于维护系统的数据一致性和依赖的严格性。如果一个对象o 被增加到类Cd 中,然后C 所有的代理类被检查。
3)索引的更新迁移 在虚属性上建立索引时,就涉及到索引的更新迁移。类中增加一个对象,根据代理规则判断哪些代理类上需要增加相应的代理对象,然后在这些代理类的索引上分别插入一个索引对象。删除一个类中的对象,其所有的代理类中都要删除相应的代理对象,然后在代理类的索引上删除对象的代理类,修改类中一个对象,根据代理类的代理规则判断需要删除对象的代理类,需要插入对象的代理类和不需要施加任何操作的代理类。如果是插入和删除,那么在相应的代理类的索引上执行对应的插入或删除索引对象的操作。
3.2 并发控制
在TOTEM 系统中,提出了一种基于原子段的多版本动态优先并发调度的算法,该算法将对象的更新操作分成多个原子段依次枷锁的方式,而不必一次将更新过程涉及到的对象以及该对象的源对象和代理对象都封装在一起,一旦原子段执行完毕,就释放数据对象上的锁,即通过松弛事物原子性和隔离性来最大成都的提高系统的并发度。
TOTEM 的并发控制分成类和对象两个层次,只有在类级别获得了相应的锁,事务才有权对属于该类的对象进行访问。
1)类层次 在TOTEM 系统中,查询代理类如果涉及虚属性,则在层次对代理类及虚属性所涉及的源类加查询锁。更新代理类则分两种情况考虑:where 字句的判断条件如果涉及读取虚属性,则将该虚属性所涉及的源类和代理类加查询锁;如果更新虚属性,则将该虚属性所涉及的源类和代理类加更新锁。
2)对象层次 为了保证数据的一致性,以及防止死锁的产生,TOTEM 将更新操作分成多个源子段,采用多个源子段一次加锁的方式。如果修改代理对象的虚属性或where 字句的判断条件涉及读取虚属性,则将修改涉及到的源对象和代理对象作为一个逻辑整体同时加对象更新锁,该源子段称为更新段。
如果修改、插入或删除对象引起了对象更新迁移,则将迁移过程中遍历的所有对象形成一棵迁移树,树的上层对象被修改或删除,则它子树上的部分对象会被修改或删除,同时还需调整对象和代理对象之间的指针,即增加或删除源对象的代理领域。迁移过程需要将一棵迁移树上涉及的对象加锁。将每一步迁移涉及的代理对象以及需要调整代理域的源对象作为一个整体进行加锁,该原子段成为迁移涉及的代理对象以及需要调整代理域的源对象作为一个整体进行加锁,该原子段称为迁移段。通过采用多个原子段一次加锁的方式,而不必一次将更新过程涉及到的所有对象以及源对象封装在一起,阻止事物访问。
4 结束语
该系统采用对象代理模型,能够为简单的结构化数据和复杂的非结构/半结构化数据统一建模,又能实现对象视图、角色多样性和对象移动等灵活的对象管理功能。它利用双向指针,支持独特的跨类查询,用来实现目前正在兴起的跨媒体应用,在多媒体、生物、地理等复杂信息管理领域具有广泛的应用前景。
[1] Michael Stonebreaker,Paul Brown.1999.Object-Relational DBMSs Tracking the next great wave . 2nd ed .CA:Morgan Kaufmann Publisher.