APP下载

对象管理在面向对象数据库中的应用研究

2013-10-15杨玉芬李明明高晓旸

吉林大学学报(信息科学版) 2013年5期
关键词:面向对象缓冲区内存

杨玉芬, 李明明, 高晓旸

(吉林大学 a. 网络中心; b. 计算机科学与技术学院, 长春 130012)

0 引 言

近年来, 数据库技术的应用领域不断拓展, 传统关系数据库技术面对许多新的应用需求[1], 如计算机辅助设计与制造、 软件工程、 超大规模集成电路设计、 计算机体系结构、 多媒体设计、 工程设计和地理信息系统等领域显得无能为力。这些语义丰富的应用表现为: 数据密集、 复杂的数据结构和类型、 多媒体数据、 长事务、 版本约束和模式演进等, 所以被称为非常规应用[2]。因为自身的诸多缺陷, 传统的关系数据库无法满足这些应用的需求。随着各种非常规应用对数据库要求的不断提高以及数据库技术的发展, 产生了一种用来支持非常规应用的领域, 融合了面向对象的方法和数据库技术的新一代数据库系统----面向对象数据库。

1 数据模式及核心模型概念

对象标识符是标识对象在全系统唯一的符号。对客观世界的任何一个实体一致地处理成一个对象就简化了用户对客观世界的看法。一个对象通过某些语义关系递归地与任何其他对象相联系[3-6]。在面向对象的系统中, 一个对象与其他对象之间的关系是通过某些对象的引用 (Reference)表示的: “引用是对象的一些属性值”。一个对象的引用是作为对象的对象标识符实现的。对象标识符是通过对象的一个复杂网络进行导航的一种简便方法。

在面向对象的语言和系统, 以及面向对象的概念的发展过程中没有考虑规模很大的数据库, 即, 它们假定所有的对象都驻留在一个大的虚拟存储中。这指的是对象标识符已经是用作确定对象的唯一方法; 选择任意一组满足任意搜索谓词组合的对象查询概念, 对于面向对象语言和系统设计者来说已是一种格格不入的属性和方法构成的对象状态[7-9], 而非与对象相联系的一组方法操纵对象的状态。对象的属性类似于关系数据库中一个关系元组的属性, 方法类似于某些层次数据库系统中的过程(procedures)属性说明, 除了属性名以外可以包括语义完整性约束。完整性约束包括唯一性、 允许空值(NULL)存在以及属性域等。

图1 复合对象

一个属性域是属性值所属的类: 它是类型检查的基础。属性域可以是任何类, 包括基本类(如整数、 字符串等)。进一步, 一个属性可具有一个单值或在其域内的一组单值。在核心模型中, 一个属性可以有一组值, 这组值属于同一个根的用户类等级上。图1中的运载工具(Vehicle)类具有4个属性: 标示符(id)、 重量(weight)、 驱动(drivertrain)和制造商(manufacturer)。属性id和weight的域是基本类, 包括: 整数和字符串。但属性drivetrain和manufacturer的域却分别是VehicleDrivetrain和Company类。而Manufacturer的属性值可以是用户指定的域Company的一些实例或Company类的任何子类。类似地, drivetrain属性值可以是根在VehicleDrivetrain类的类等级中的任何类的一些实例。

2 对象管理研究的方案和系统体系结构

开发途径主要归纳为4类: 数据库系统生成器、 对象管理器、 扩展的关系数据库系统和面向对象的数据库设计语言。下面阐明OODBMS(Object Oriented Data Base Management System)的开发策略。

2.1 对象管理器

这种途径开发的系统通常只有一个有限的模型, 可以把这样的系统看成是对现存文件系统的扩充[10], 它支持对象的持久储存, 也许还支持多用户的并发控制, 但不提供查询语言。实际上, 面向对象数据库系统通常被当作一个完整的存储管理层。开发对象管理器的最主要优点在于: 一个OODBMS的高级特征通常不必花费时间和代价考虑, 这很适合于对简单对象进行管理的场合。但在更多情况下, 对象管理器仅被当作一个OODBMS完整的核心模块。MNEME就是这样的一个系统, 由美国Massachuseus大学开发的。

2.2 系统的开发途径

笔者的目标是开发一个比较完善的OODBMS, 不仅具有OODB的特征和功能, 同时还要适合工程管理的需要。毕竟一个对象管理器的功能不完善[11-13], 应用非常有限。该系统实现的功能包含了对象管理器的功能, 系统的对象管理子系统是整个系统的核心模块。笔者将与上层结构紧密结合, 同时也便于修改某些结构以便更加适合[14]。所以采用该方法缩短了开发周期, 减轻了课题的工作量, 而且随着HBase的不断升级, OODBMS也可以得到更多的支持。系统的上层特征, 即面向对象特征, 和C++密切相关, 对OODBMS来说, C++不仅是一种宿主语言, 许多的对象特征都是借用C++的机制体现的, C++目前是本系统向用户提供的唯一开发环境。总之, 该系统将HBase和C++紧密结合, 借用二者的许多功能, 简化了系统的开发工作。

2.3 系统体系结构

图2展示了系统的总体结构, 两层结构组成其主要框架, 上层基于OODBMS, 数据对象的语义特性是通过面向对象的思想和概念描述的。下层基于关系表结构的特征, 把关系的表结构抽象成类。同时把关系表中的元组抽象成实例对象。关系表中的属性定义域可以是任意类, 其中作为上下层进行数据交换的场所就是对象缓冲区。

图2 系统总体结构

3个子系统构成了上层结构, 他们分别是事务处理子系统、 用户管理子系统和对象管理子系统, 现分别说明如下。

1) 用户接口子系统。系统提供两种形式的用户界面, 终端用户可通过用户界面直接操作数据库数据; 编程用户可在C++语言中嵌套数据库操作语言。

2) 对象管理子系统。对象管理子系统由4个模块组成: 类对象管理模块、 实例对象管理模块、 消息对象管理模块和版本对象管理模块。类对象管理模块是OODBMS的重要组成部分, 其主要功能有: 类模式定义、 修改查询和删除, 类模式提供用户定义新类的工具; 类模式查询功能为用户查询模式结构提供了方便; 类模式修改使用户能动态修改类属性和组成结构; 类模式删除模块则帮助用户动态地删除系统中已经定义的类模式。每个实例对象标识的前16 bit为该对象所属类标识, 后16 bit代表该类的实例化对象的个数(从0开始)。该设计方法不但保证了对象标识的唯一性, 同时还可从对象标识中提取该类标识等信息。类标识创建的框图如图3所示。实例对象标识创建的框图如图4所示, 它是由各类的最新产生实例对象标识oid添加而成, 从文件中可以得到系统各类的标识和其实例对象标识的最新值, 从而可以创建新的类对象标识和实例对象标识。DDL(Data Definition Language)对面向对象数据库的模式进行说明。DDL必须支持的语义是OCDB(Original Content Database)数据模型。

图3 类标识创建框图 图4 实例对象标识创建框图

3) 事务处理子系统。事务处理子系统的主要功能是并发和恢复, 在事务开始和结束时, 保证数据库的一致性和完整性。笔者设计的OODBMS需要实现事务管理的并发性和长事务。该子系统还未实现, 故不在讨论范围。

4) 数据存储管理子系统。数据存储管理子系统主要由对象缓冲区管理模块和数据存储模块组成。对象缓冲区是对象存在的空间, 而数据存储模块则把存在对象缓冲区的对象变为二进制数据存储在物理空间, 从而实现对象的快速存取。

3 对象缓冲区管理的研究

对象缓冲区管理是OODBMS的核心部分, 负责对象在对象工作区的表示和组织、 对象在主存和辅存之间的转移以及对象工作区的管理。该系统是在HBASE内核基础上实现的, 其主要功能如下:

1) 实现对象工作区的自动管理;

2) 实现对象在工作区和物理空间的调入调出。

在实现上述操作原语时将涉及到内存对象表的存取和操作, 下面给出内存对象表的实现过程[15]。内存对象表存放的是所有调入对象的存取信息, 每个表结点信息包括对象名, 对象标识, 对象所在对象工作区的地址, 对象在内存被引用的次数和回写标志等。对象在内存被引用的次数是指该对象被内存中的其他对象引用的总次数。在访问内存中的对象时系统将频繁存取该内存对象表, 所以必须为该表提供高效的存取手段, 笔者为该表建立了基于对象工作区号的散列表, 该散列表用单链表的方法解决冲突, 内存对象表的结构表示如图5所示。

图5 内存对象表的结构

以下列出子系统对内存对象表提供的操作:

slbwlcr()实现散列表结点插入操作;

slbwlcz()实现散列表结点査找操作;

slbwlsc()实现散列表结点删除操作。

以下说明对象管理子系统的几个功能模块的实现过程。

1) Load-Object-In()调入对象到对象工作缓冲区(见图6), 该模块提示用户输入对象文件名, 由文件名得到对象名和对象标识, 将该对象登入对象内存表后, 调用Load-CurrRec()缓冲区管理函数, 将该对象的全部信息调入对象工作区。

2) Load-Object-Out()将对象调出对象工作缓冲区(见图7), 该模块在用户输入对象文件名后遍历内存散列表查找该对象所在对象工作区的位置, 然后, 删除该对象所在内存表上的结点, 同时执行缓冲区管理函数Close-WA(), 关闭对象所在工作区, 从内存中删除该对象。

3) 0_Buf_List(), 内存对象列表模块如图8所示。系统遍历内存散列表查找出内存中的所有对象, 并将散列表各结点信息传入显示对话框, 由列表框列出各对象名及其所在工作区号供用户选择, 用户可通过双击选择显示各对象的信息。

图6 Load_Object_In()的实现 图7 Load_Object_Out()的实现 图8 0_Buf_List()的实现

4 结 语

笔者介绍了面向对象数据库的基本概念, 对OODBMS普遍具有的特性进行分析, 将这些特性按重要性、 公认性分为不同层次, 以尽早使OODBMS的开发实现得到理论指导。在此基础上, 通过对POSTGRES95源程序代码的阅读, 提出一个在微机环境下的面向对象的数据库管理系统OODBMS的设计过程和方法, 并完成了部分模块功能。得到如下结果:

1) 在数据模型中对类与对象、 对象标识, 继承性等面向对象的基本特征进行了形式化描述, OODBMS的实现正是基于这种模型;

2) 存储管理子系统实现了物理层、 数据层和对象层三层存储空间结构, 在传统的内外两层结构上增加了对象层的管理, 实现了关系型底层和面向对象的数据模型的良好结合;

3) 版本管理子系统主要实现了对象的各种版本功能, 在实现版本树的基础上提供了各种版本的操作功能;

4) 查询管理子系统实现了面向对象特征和导航式查询方式, 用户可以进行从根类到各实例对象信息的查找。

参考文献:

[1]金远平. 面向对象数据库系统中方法调用 [J]. 计算机研究与发展, 1997(2): 143-148.

JIN Yuan-ping. Method Invocation in Object-Oriented Database System [J]. Computer Research and Development, 1997(2): 143-148.

[2]许维平. 面向对象方法继承性技术研究与实现 [J]. 微机发展, 1997(6): 32-34.

XU Wei-ping. Object-Oriented Methods Inherited Technology Research and Implementation [J]. Computer Development, 1997(6): 32-34.

[3]陈睿. 面向对象数据库中的次序关系 [J]. 计算机研究与发展, 1997(1): 19-27.

CHEN Rui. Order Relation in Object-Oriented Database [J]. Computer Research and Development, 1997(1): 19-27.

[4]袁晓东. 面向对象方法中的类型概念 [J]. 计算机研究与发展, 1997(10): 726-730.

YUAN Xiao-dong. The Type Concept of the Object-Oriented Approach [J]. Computer Research and Development, 1997(10): 726-730.

[5]李天柱. O-O数据模型中实体联系的表示方法[J]. 计算机研究与发展, 1997(4): 275-280.

LI Tian-zhu. O-O Data Model Representation of Physical Contact [J]. Computer Research and Development, 1997(4): 275-280.

[6]陈楠. 面向对象数据库技术的产生与发展 [J]. 计算机时代, 1997(12): 9-10.

CHEN Nan. Object-Oriented Database Technology Generation and Development [J].The Computer Age, 1997(12): 9-10.

[7]戚成功. 用C++语言实现OODB中对象多版本 [J]. 计算工程与应用, 1996(5): 21-25.

QI Cheng-gong. Using C++ Language OODB Objects in Multiple Versions [J]. Computational Engineering and Applications, 1996(5): 21-25.

[8]梁文菲, 黄厚宽. 对象/关系映射技术与面向对象数据库技术比较分析 [J]. 中国科技信息, 2006(21): 154-160.

LIANG Wen-fei, HUANG Hou-kuan. Object/Relational Mapping Technology and Comparative Analysis of Object-Oriented Database Technology [J]. China Science and Technology Information, 2006(21): 154-160.

[9]肖刚. 面向对象数据库在教学信息管理系统中的应用 [J]. 硅谷, 2009(6): 79.

XIAO Gang. Object-Oriented Database Application in the Student Information Management System [J]. Silicon Valley, 2009(6): 79.

[10]陆登, 李善平, 郑春昭. 基于对象数据库的扩展Java集合框架 [J]. 计算机应用与软件, 2011(1): 133-136.

LU Deng, LI Shan-ping, ZHENG Chun-zhao. Object-Based Database to Extend the Java Collections Framework [J]. Computer Applications and Software, 2011(1): 133-136.

[11]左鸣. 对象数据库的几个主要概念 [J]. 渝州大学学报: 自然科学版, 1998(6): 19-22.

ZUO Ming. A Few Key Concepts of Object Database [J]. Yuzhou University: Natural Science Edition, 1998(6): 19-22.

[12]苏剑, 沐连顺, 张长岩. 基于面向对象数据库的SCADA测试系统研究 [J]. 中国电力, 2000(10): 52-54.

SU Jian, MU Lian-shun, ZHANG Chang-yan. Based on Object-Oriented Database SCADA Test System [J]. China Power, 2000(10): 52-54.

[13]胡金柱, 谭支鹏. 分布式对象数据库系统中的对象管理策略 [J]. 小型微型计算机系统, 2001(1): 96-99.

HU Jin-zhu, TAN Zhi-peng. Distributed Object Database System Object Management Policy [J]. Mini-Micro Systems, 2001(1): 96-99.

[14]王功明, 关永, 赵春江, 等. 面向对象数据库发展和研究 [J]. 计算机应用研究, 2006(3): 1-4.

WANG Gong-ming, GUAN Yong, ZHAO Chun-jiang, et al. Object-Oriented Database Development and Research [J]. Computer Applications Research, 2006(3): 1-4.

[15]阳国贵, 战茅. 一个面向对象的数据库ONTOS [J]. 计算机工程与应用, 1996(6): 1-5.

YANG Guo-gui, ZHAN Mao. An Object-Oriented Database ONTOS [J]. Computer Engineering and Applications, 1996(6): 1-5.

猜你喜欢

面向对象缓冲区内存
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
面向对象方法在水蓄冷PLC编程中应用分析
基于ARC的闪存数据库缓冲区算法①
一类装配支线缓冲区配置的两阶段求解方法研究
峰丛洼地农作物面向对象信息提取规则集
内存搭配DDR4、DDR3L还是DDR3?
基于面向对象的车辆管理软件的研制与开发
初涉缓冲区
面向对象的SoS体系结构建模方法及应用