




已阅读5页,还剩58页未读, 继续免费阅读
(计算机软件与理论专业论文)基于关系数据库的对象持久化及性能优化研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
重庆大学硕士学位论文 中文摘要 i 摘摘 要要 目前,大多数商业系统通常都采用面向对象的应用与关系数据库相结合的方 式,这会引出对象模型和关系模型之间的不匹配问题。对象模型基于耦合、内聚 和封装等软件工程概念,而关系模型则基于数学理论,特别是集合论。在应用上 使用面向对象模型、在数据存储上使用关系模型就存在这样的问题:对象模型通 过对象之间的关系遍历对象,而关系模型则是复制数据来连接表中的行。另一方 面,面向对象模型的理想存储机制面向对象数据库还不成熟,还存在一定问 题和局限性,这也成为在开发中选择关系数据库的一个重要原因。因此,研究如 何在应用开发过程中进行对象关系转换、有效地集成面向对象应用和关系数据 库显得格外重要。 实现这种对象关系转换的核心的问题是对象持久化,即把对象由内存中的 瞬态对象变成数据库中的持久对象。目前通过直接内嵌 sql 或者数据访问类的方 法可以解决两种模型不匹配的问题,但却使得应用的可维护性降低,数据库发生 变动就涉及到大量修改应用中的数据访问代码。一个更好的解决方案是构建一个 数据访问层,用户接口、业务逻辑和数据库访问各为一层,各层通过接口与相邻 层通信,每个层中的代码改变不会对其他层造成太大的影响。 本文分析了对象模型与关系模型的各自特点以及对象关系映射理论,详细 描述了不同映射策略的适用性并进行了比较。探讨了基于关系数据库的对象持久 化方法,分析了数据访问层的数据访问模式、事务模式和 cache 模式的特征以及 各种模式的适用点,结合这些设计模式提出了具有性能优化策略的轻量级的对象 持久层框架,并对框架的设计细节进行了描述和说明。 这一对象持久层框架能够封装关系数据库的访问、实现对象的透明存储,同 时还具有缓存和延迟加载等性能优化的能力,对面向对象应用而言是一种轻量级 又高效的数据库中间件。由于对象持久层将关系数据库访问的实现代码从业务应 用代码中解耦出来,应用的维护性大大提高;同时,对象持久层支持多数据库产 品和数据源,使应用具有很好的移植性。可以说这是一种解决基于关系数据库的 对象持久化的理想方式。 为了将对象持久层应用于 b/s 开发中,本文结合 struts 和轻量级对象持久层 框架,应用这一框架,能快速开发 web 应用,大量减少手工编码,提高开发的质 量和效率。 关键词:对象持久化,对象关系映射,设计模式,对象持久层,性能优化 重庆大学硕士学位论文 英文摘要 ii abstract one of the most common architectures in enterprise systems today is the combination of object-oriented applications with active relational database systems, which could lead to the mismatch between object orientation and the relational model. the object paradigm is based on software engineering principles such as coupling, cohesion and encapsulation, whereas the relational paradigm is based on mathematical principles, particularly those of set theory. the mismatch comes to the problem when designing with object paradigm as storing with relational paradigm: with the object paradigm you traverse objects via their relationships, with the relational paradigm you duplicate data to join the rows in tables. in the other hand, the ideal storage mechanism for object model object -oriented database is not mature, which is an important factor in choosing relational database in development. therefore, it is so significant to find an approach to transfer object models to relational models and integrate of object orientation aspects and relational database. the core of realizing the transfer is object persistence - a way that turns a transient object to a persistent object. today a straight sql-embedded or data access class solution is a solution for the mismatch, but the ways depress applications maintainability. once database or physical model changed, data access code in application should be changed correspondingly. a better solution is data access layer, which is decoupling with user interface and business logic. every layer communicates adjacent layer through interfaces, therefore code had changed in some layer would not influence other layer much. firstly this paper analyses the characters of object model and relational model, describes object-relational mapping theory and adaptablily of mapping strategies. secondly object persistence based on relational database and several design patterns in data access layer is discussed. through analysis of data accessor pattern, transaction pattern ,cache pattern and each patterns applicability, we presented a lightweight object persistence layer framework with performance optimization and specified design details. the object persistence layer framework can encapsulates database access, achieves object transparent store with cache and lazy loading. its a lightweight and effective database middleware for oo applications that can improve the efficiency and 重庆大学硕士学位论文 英文摘要 iii shorter the cycle of development owing to decoupling data access code from business logic. moreover, the framework can support lots of database productions or data sources that improve transplantablity of application .so it is a best solution for object persistence based on relational database. this paper issues that when developing web applications developers can integrates struts and object persistence layer, the combination patterns can faster web application development and increase the quality as well as the efficiency. keywords:object persistence, object-relational mapping, design pattern, object persistence layer, performance optimization 重庆大学硕士学位论文 1 绪论 1 1 绪论 1.1 研究背景及意义 自从提出面向对象的概念以来,面向对象技术作为一种优秀的应用开发方法 已经得到广泛的应用,越来越多的个人和组织意识到它相对于结构化的软件开发 方法的优势,使用面向对象模型而不是关系模型来进行系统分析与设计已经成为 大多数应用开发人员的第一选择。因为面向对象模型更能直观的表达和反映现实 世界的事务,具有 “封装” 、 “继承” 、 “多态”等特性,使得系统的可重用性、健 壮性和可扩展性大为提高,也更利于软件维护。 对于面向对象模型的数据存储方式,最直接的理应是面向对象数据库 (oodb)。然而目前市场上面向对象数据库的产品还不够成熟,基于某种 oodb 开发的应用系统不太可能移植到其他数据库产品上,大量的应用系统仍采用产品 成熟、通用性和移植性更好的关系数据库作为底层的数据存储和管理系统。用面 向对象方法分析和设计应用、用关系数据库存储数据,自然就涉及到面向对象模 型与关系数据库的关系模型相互转换的问题,即消除“阻抗不匹配”(impedance mismatch)带来的问题。 “阻抗不匹配”是对象范例和关系范例的主要矛盾1。关系范例是建立在数 学理论基础上的,而对象范例则是基于耦合、内聚、封装等软件工程的一些概念, 并没有关系范例那样严格的数学定义和理论支柱。对象范例侧重于从包含数据和 行为的对象中构建应用程序, 而关系范例则主要针对数据的存储。 使用对象范例, 是通过它们的关系来访问对象; 使用关系范例, 则通过复制数据来连接表中的行。 因此,在应用上使用面向对象模型、在数据存储上使用关系模型就存在这样的问 题:两种模型无法直接“沟通” ,必须进行转换才能共享数据。 对象持久化是指将暂态对象变成持久对象,这是解决对象持久存储的主要方 法和技术。对象持久化主要研究在面向对象的高级程序设计中实现对象持久性, 有效地存储和管理持久对象(persistent object)。 为了消除关系模型和对象模型结合时产生的不匹配问题,设计对象模型与关 系模型之间通用的转换机制、利用关系数据库来实现对象持久化就成为一个可行 的解决方法。一旦建立了通用的对象关系映射机制并实现对象在关系数据库中 的存储,就能大量简化开发者对关系数据库的访问,大大提高开发效率。 1.2 研究现状 在多层应用系统中,应用服务器端的对象模型和数据存储的关系模型之间 重庆大学硕士学位论文 1 绪论 2 存在着模式不匹配,最直接的方法是在应用程序语言中内嵌 sql 实现数据库操 作,它将数据库访问与应用逻辑捆绑在一起,系统的可维护性较差。随着开放的 数据库互连(open database connector, odbc)技术和 jdbc 的广泛使用, 将数据库 逻辑独立封装成为可能,因为 odbc 屏蔽了不同关系数据库之间的差异。 随后微软推出的 uda(universal data access,统一数据访问技术)为关系型或 非关系型数据访问提供了一致的访问接口,为企业级 b/s 应用多层软件结构提供 了数据接口标准。统一数据访问包括两层软件接口,分别为 ado(active data object)和 ole db,对应于不同层次的应用开发。ado 提供了高层软件接口,可 在各种脚本语言(script)或一些宏语言中直接使用; ole db 提供了底层软件接口, 可在 c/c+语言中直接使用。 ejb 作为 sun 公司提出的 j2ee 体系的核心部分,是 sun 所力推的企业级开 发的首选, 而 ejb entity 目前仍然是 sun j2ee 白皮书所最为推荐的 java 持久化技 术。不过作为一个重量级技术,entity bean 的性能不太尽人意,易用性也相对较 差,这成为它备受争议的一个焦点。 目前一些传统的关系数据库厂商致力于在现有的关系数据库上增加一层“包 装” ,使之在形式上表现为一个 oodb。因为关系模型和对象模型是独立存在的, 当涉及到复杂的数据库设计时,会导致严重的性能和操作问题。 另一个研究的热点是在持久对象和关系数据库之间建立一个映射层,它的目 的是将业务逻辑和数据库访问隔离开来,通过这一映射层,可以把业务代码中直 接的对象操作映射成关系型的数据库访问操作。它保护开发者不受数据库或物理 结构变更的困扰, 使得应用的重用性增强。 国外已出现 hibernate、 castor、 toplink 等较为成功的商业产品,国内的这方面研究还相对较差,没有比较成熟的产品。 因此,如何建立起高效又轻量级的持久性框架,快速地应用于 b/s 开发中, 是今后基于关系数据库的对象持久化的研究方向。 1.3 论文的研究内容 在面向对象应用中内嵌 sql 代码或者其他耦合数据库访问代码的数据访问 方式没有考虑到应用和关系数据库的可维护性,这种设计会造成应用系统内在的 脆弱性,因此企业级应用的开发者在设计数据访问组件时,需要考虑以下一些问 题: 1)应用必须能在多种数据库产品上正常运行; 2)用户接口要隐藏复杂的数据库语义; 3)数据访问的过多细节使得应用的代码难以很好编写和维护; 4)数据访问频繁的应用必须要设计数据缓冲机制; 重庆大学硕士学位论文 1 绪论 3 5)多用户访问数据时要解决并发问题。 针对以上面向对象应用中的普遍问题,如何在应用系统中搭建合适的数据访 问组件以支持对象关系映射,使得应用具有支持多数据库产品能力、易于维护 的数据访问代码、良好的数据访问性能成为企业级应用开发的关键之一。这对于 提高开发效率和质量,增加应用的维护性和健壮性大有裨益。 本文以关系数据库的对象持久化为研究的出发点,研究的内容主要包括: 第一,分析对象关系映射的基本理论和实现策略; 第二,讨论三层体系结构框架,并对数据访问层以及其中的数据访问模式、 事务模式和缓存模式进行分析和对比; 第三,结合数据访问层的多种设计模式,提出一种轻量级的对象持久层框架 的设计,并通过轻量级对象持久层框架结合 struts 的 web 应用开发,验证该框架 的有效性和实用性。 1.4 论文的安排 本文由六章构成,整个文章围绕关系数据库的对象持久化研究而展开。 第二章叙述了对象模型和关系模型的各自特点,分析了两种模型不匹配的根 源。 第三章对比了对象持久化的不同存储机制,并重点分析了基于关系数据库的 对象持久化实现方式。 第四章分析了对象关系映射基本理论和实现策略,并对映射策略进行了比 较。 第五章分析和总结三层体系结构中数据访问层的各种设计模式及性能优化策 略。 第六章给出对象持久层框架的设计,并对相关设计细节进行分析和描述。 第七章对本文和相关研究工作进行总结。 重庆大学硕士学位论文 2 关系模型与对象模型 4 2 对象模型与关系模型 2.1 概述 基于关系数据库的对象持久化问题主要包括对象关系映射以及对象在持久 化机制中存取两个方面,涉及到对象模型、关系模型以及两种模型间相互转换的 问题。本章主要描述对象模型和关系模型的基本概念,作为进一步讨论对象关 系映射的基础。 2.2 面向对象模型 面向对象技术最初是从面向对象的程序设计开始的,它的出现以 60 年代 simula 语言为标志,第一次有了类的概念。1970 年前后,kay、goldberg 等人在 xerox 公司设计出了 smalltalk 语言,提出了许多现在成为面向对象核心的概念 (如消息和继承)。面向对象的程序设计技术迅速发展,随之产生了面向对象的软 件工程学。面向对象方法已经成为当今软件开发的主流方法。 2.2.1 面向对象的基本概念 1)对象(object)。对象是对所有现实世界实体的抽象,它可以是任何事物。对 象的定义包含状态和行为。对象的状态由一组属性组成,行为由一组操作构成, 可以理解为对象的服务功能。这是面向对象与结构化最主要的差别,关系模型的 元组只包含数据,而对象却包含了数据(属性)和功能(方法)。 2)类(class)。类是对象的软件抽象,是创建对象的模板34,从类实例出的每 个对象具有相同的结构和行为。 3)封装(encapsulation)。面向对象的封装是将表示属性的状态和表示行为的操 作包装成一个对象类型,对状态的访问和修改只能通过封装提供的接口进行。封 装通常提供信息而隐藏实现方法,封装和信息隐藏使系统具有更多的可维护性。 4)继承(inheritance)。继承是一种资源共享机制,它使得在定义新类时可利用 已有类的一些信息,这些已有的类被称为基类或超类,新定义的类被称为子类或 衍生类。子类可继承基类类的行为(操作方法等)和表示(属性)。一个类仅从一个 类中继承称为单一继承;当类从两个以上的类中继承时称为多重继承。继承是支 持软件复用的一个重要语言机制。 5)多态(polymorphism)。对象根据所接受的消息而产生动作(执行方法)做出反 应。同样的消息被不同的对象接收时可导致完全不同的实现方法,得到不同的结 果,该现象称为多态性。多态是指请求的联编要在一个操作的若干种实现方法之 间做出选择。多态允许操作符的重载,就是说一个操作可以有几种不同的实现方 重庆大学硕士学位论文 2 关系模型与对象模型 5 法,并有不同种类的参数相联系。 6)消息(message)。从源对象到目标对象的请求,消息在目标对象上作为方法 调用实现。对象相互间是通过消息来协作的。 7)对象间的其他关系。多个对象之间除了继承外还可能存在关联、聚合、组 成、依赖关系。 关联关系是对象之间最弱的一种关系,表示对象间的某种联系,使一个对象 知道另一个对象的属性或方法。关联有单向的和双向的。 聚合是关联的一种,是对象间的整体和部分之间的关系。 组成是更强的聚合,组成关系中代表整体的对象负责代表部分对象的生命周 期。在组成关系中,一个部分对象仅属于一个整体对象,并且部分对象通常与整 体对象共存亡。 依赖也是对象之间的一种关系,它表示一个对象依赖于另一个对象的定义。 2.2.2 odmg 面向对象模型 odmg(object data management group)提出的关于永久对象存储的标准(目 前版本是 3.0)是一个涵盖数据库、对象和程序设计语言的标准集,至少从理论上 说,与该标准兼容的软件产品具有很好的可移植性5。遵循这一标准,开发商可 以用 java、c+或 smalltalk 直接将对象存储于 odmg 兼容的关系数据库、对象 关系数据库或对象数据库中。它尽可能地利用和借鉴了已有的标准,如 omg、 sql-92、incits 等,其主要功能部件包括对象模型、对象定义语言、对象查询 语言和 java、c+、smalltalk 语言绑定。 odmg 对象模型扩展了 omg 对象模型,为对象数据库产品提供一个通用的 模型,包括:持久对象、对象特性、特定对象类型、查询以及事务。 2.2.3 对象模型的优势和局限性 对象模型与关系模型的根本区别在于对象模型是面向应用的,更能反映现实 中的事物,它提供了丰富的语义和自然的表达方式,方便地表达应用领域地事物 和它们之间地联系。 与关系模型相比,对象模型的最大局限性是缺乏一个完善的理论指导,还没 有公认的形式化描述。 2.2.4 统一建模语言 uml 1997 年 1 月 rational 公司向 omg(object management group)提交了 uml1.0 标准文本,uml 结合了 booch、omt 和 jacobson 方法的优点,具有完备的面向 对象的符号体系,并从其它的方法和工程实践中吸收了许多经过实际检验的概念 和技术。目前,最新版本为 2.0。 uml 是一种定义良好、易于表达、功能强大的通用可视化建模语言,它统一 重庆大学硕士学位论文 2 关系模型与对象模型 6 了面向对象建模过程的基本概念、术语及图形符号,并溶入了软件工程领域的新 思想、新方法和新技术。uml 是用于对软件进行描述、可视化处理、构造和建立 软件系统制品的文档。它记录了对必须构造的系统的决定和理解,可用于对系统 的理解、设计、浏览、配置、维护和信息控制。uml 包括概念的语义、表示法和 说明,提供了静态、动态、系统环境及组织结构的模型。使用 uml,可以描述一 个系统的静态结构和动态行为。静态结构定义了系统中的重要对象的属性和操作 以及这些对象之间的相互关系;动态行为定义了对象的时间特性和对象完成目标 而相互进行通信的机制6。 组成 uml 有三种基本的单位是事物(things)、关系(relationships)、图 (diagrams)。事物是 uml 中重要的组成部分。关系把事物紧密联系在一起。图是 很多有相互相关的事物的组。 1)事物。 uml 中事物分为:结构事物(structural things)、动作事物(behavioral things)、 分组事物(grouping things)、 注释事物(annotational things)。 这些事物是 uml 模型 中最基本的面向对象的模块。它们在模型中属于静态部分。 结构化事物有以下七种。 (1)类(class),类是描述具有相同属性、方法、关系和语义的对象的集合。一 个类实现一个或多个接口。 (2)接口(interface), 接口是指类或组件提供特定服务的一组操作的集合。 因此, 一个接口描述了类或组件的对外的可见的动作。一个接口可以实现类或组件的全 部动作,也可以只实现一部分。 (3)协作(collaboration),协作定义了交互的操作,表示一些角色和其它元素一 起工作。因此,协作具有结构化、动作化、维的特性。一个给定的类可能是几个 协作的组成部分。这些协作代表构成系统的模式的实现。 (4)用例(use case),是描述一系列的动作,这些动作是系统对一个特定角色执 行, 产生值得注意的结果的值。 在模型中 use case 通常用来组织动作事物。 use case 是通过协作来实现的。 (5)活动类(active class),活动类的对象有一个或多个进程或线程。 (6)组件(component),组件是物理上或可替换的系统部分,它实现了一个接口 集合。 (7)结点(node),结点是一个物理元素,它在运行时存在,代表一个可计算的 资源, 通常占用一些内存和具有处理能力。 一个组件集合一般来说位于一个结点, 但有可能从一个结点转到另一个结点。 动态事物是 uml 模型中的动态部分7。有两种主要的动作事物。第一种是 重庆大学硕士学位论文 2 关系模型与对象模型 7 交互(interaction),交互是由一组对象之间在特定上下文中,为达到特定的目的而 进行的一系列消息交换而组成的动作。 交互中组成动作的对象的每个操作都要详 细列出,包括消息、动作次序(消息产生的动作)、连接(对象之间的连接)。第二种 是状态机(state machine), 状态机由一系列对象的状态组成。 交互和状态机是 uml 模型中最基本的两个动态事物元素,它们通常和其他的结构元素、主要的类、对 象连接在一起。 分组事物是 uml 模型中组织的部分,称为包(package)。包是一种将有组织 的元素分组的机制。结构事物、动作事物甚至其他的分组事物都有可能放在一个 包中。 注释事物是 uml 模型的解释部分。 2)关系。uml 中有四种关系: (1)依赖(dependencies)。表示一个元素(被依赖事物的提供者)的变化将影响到 另一个元素(依赖事物的接收者),或向其(接收者)提供信息。uml 中依赖的形式 是多样的。 (2)关联(association)。关联是关系语义中最弱的一种,代表两个结构元素之 间的某种语义上的连接。 (3)泛化(generalization)。 其实质就是继承, 描述一个较广泛的元素和一个较特 殊元素之间的关系。 (4)实现(realization) 。表示类之间的接口定义和实现的关系。 3)图。从系统模型这一级别上看,uml 的模型元素的图形表示方法由 5 类图 构成,分别是: (1)静态图,包括类图、对象图和包图。类图描述系统中类的结构,包括类的 定义和类之间联系(关联、依赖、聚合等)。对象图是类图的实例。包图用于描述 系统的分层结构。 (2)use case 图,用于从用户角度描述系统功能并指出操作者。 (3)行为图,描述系统的动态模型和组成对象间的交互关系。其中,状态图描 述类的对象所有可能的状态以及事件发生时状态的转移条件;活动图描述满足用 例要求所要进行的活动以及活动间的约束关系。 (4)交互图,描述对象间的交互关系。其中,顺序图表示对象之间的动态合作 关系,强调对象间消息发送的顺序;协作图描述对象间的协作关系。 (5)实现图, 其中包括构件图和配置图。 构件图描述代码部件的物理结构及各 部件之间的依赖关系。配置图定义系统中软硬件的物理体系结构。 重庆大学硕士学位论文 2 关系模型与对象模型 8 2.3 关系模型 关系模型是目前数据库系统中应用范围最为广泛的数据模型。 相对于 70 年代 的网状模型和层次模型,关系模型有严格的数学基础,概念简单清晰,非过程化 程度高,数据具有独立性,更利于数据管理和数据检索。关系模型是由关系数据 结构、关系数据操作以及关系完整性约束三个部分组成2。 2.3.1 关系数据结构 关系模型的数据结构非常单一,其逻辑结构是一张扁平的二维的表。关系成 为描述现实世界的实体以及实体间各种联系的基本手段。关系模型是建立在集合 论基础上的,下面对关系数据结构中的一些基本项进行说明: 1)关系(relation):一个关系对应通常说的一张表,是笛卡儿积的子集。关系 数据库是表的集合,每个表有唯一的名字。 2)元组(tuple): 表中的一行记录即为一个元组。 一个元组可表示一个实体或实 体之间的联系。 3)属性(attribute):表中的一个列称为关系的一个属性,即元组的一个数据项。 4)域(domain):一组具有相同数据类型的值的集合。属性的取值范围。对所有 关系 r 而言,r 的每个属性的域都应是原子的,即不可再分割的。 5)码(key):表中可以唯一确定一个元组的某一属性组。一个关系至少有一个 码,也可能有多个码。在多个码中选一个作为主码(primary key)。如果关系中的 属性或属性组不是本关系的码,而是引用其他关系或本关系的码,则称为此关系 的外码(foreign key)。码是关系的核心。 6)关系模式:对关系的描述。它可以形式化地表示为:关系名(属性 1,属性 2,属性 n)。 2.3.2 关系操作 关系操作采用集合操作方式,操作的对象和结果都是集合。关系模型中常用 的关系操作包括:选择、投影、连接、除、并、交、差等查询操作和增加、删除、 修改等更新操作两个部分。 关系数据操作方式有关系代数和关系演算。关系代数是用对关系的运算来表 达查询要求的,关系演算是用谓词来表达查询要求的。 2.3.3 关系完整性约束 完整性约束是给定的数据模型中数据及其联系所具有的制约和依存规则,用 以限定符合数据模型的数据库状态以及状态的变化, 以保证数据库中数据的正确、 有效和安全。数据模型既要反映和规定数据模型必须遵循的基本的完整性约束条 件,又要提供定义完整性约束条件的机制,以反映具体应用所涉及的数据必须遵 守的特定的语义约束条件。 重庆大学硕士学位论文 2 关系模型与对象模型 9 关系模型中有以下三类完整性约束: 1)实体完整性(entity integrity)。 主码作为元组的唯一性标识, 主码中的属性即 主属性不能取空值。 2)参照完整性(referential integrity)。 参照完整性约束是不同关系之间或同一关 系的不同元组之间的约束。它的基本内容是:外码或者是空值,或者是引用某个 元组的主码值。 3)用户定义的完整性(user-defined integrity)。这一约束是针对某一具体关系数 据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。 2.3.4 关系模型的优势和局限性 关系数据模型具有下列优点: 1)具有坚实的理论支柱,形式化基础好。 2)概念单一,数据结构简单,无论实体还是实体之间的联系都用关系表示。 对数据的检索结果也是关系(即表)。所以数据结构简单、清晰、用户易懂易用。 3)数据独立性强,屏蔽了数据的存取路径,具有很好的安全保密性。 关系模型的局限性表现在: 1)关系模型过于简单,语义表示能力差,不利于表达复杂的数据结构; 2)支持的数据类型有限,一般只提供一些简单的数据类型,不能提供新类型 的定义和生成能力; 3)关系模型不能以自然的方式表达实体之间的联系,缺乏数据抽象。 2.4 本章小结 对比关系模型和面向对象模型,对象模型基于耦合、内聚和封装等软件工程 概念,而关系模型则基于数学理论,特别是集合论。在数据访问方式上,对象模 型通过对象之间的关系遍历对象,而关系模型则是复制数据来连接表中的行。这 是关系模型与对象模型的模式不匹配的关键。 这一章主要介绍了关系模型和面向对象模型各自的特点、优势和局限,并进 一步介绍了统一建模语言 uml。因此,在结合面向对象应用与关系数据库时,首 先要考虑如何将对象模型转换为关系模型,使对象具有持久性。下两章将会详细 分析对象持久化的方法和对象关系映射规则及映射策略。 重庆大学硕士学位论文 3 对象持久化概述 10 3 对象持久化的存储机制和实现方式 3.1 概述 在许多应用中,都需要将业务数据进行永久存储,即使应用程序终止,对象 的属性和状态依然被保留,可以在程序下一次运行时使用,也可以实现不同应用 之间的数据共享。实现对象持久化,必须根据所选择的持久化机制来确定对象持 久化的方法,不同的持久化方法有各自的优缺点,适合于不同的应用业务模式和 系统架构。 3.2 对象持久化的基本概念 持久性是指对象的生存特性。对象持久化主要研究在面向对象的高级程序设 计中实现对象持久性,有效地存储和管理持久对象(persistent object),使程序员按 同一表达式语法访问暂态对象(transient object)和持久对象, 统一暂态对象空间和永 久对象空间8。 对象的持久化是将一个瞬态对象变为持久对象的方法,目前,实现对象持久 化的方式主要是根据不同的持久化存储机制(文件系统、 数据库系统等)形成不同的 解决方案,主要包括利用文件系统的持久化和利用数据库系统的持久化。 3.3 持久化存储机制 持久化存储机制即能实现对象永久保存、访问的系统,文件系统、数据库系统 都是对象持久化存储机制。通过文件系统持久化对象的方式比较简单,它利用基 本的对象序列化技术就可以实现。 此外, 一些将对象与 xml 转换的技术, 例如 java 的 jaxb 技术,可以将对象序列化成 xml 文件。相比之下,数据库是保存数据的更 加高效的手段,实现对象持久化的方式也相对复杂。 3.3.1 对象持久化的理想方式面向对象数据库 面向对象数据库最初是随着cad (计算机辅助设计)、case (计算机辅助工程)、 oa (办公自动化系统)、 超文本及多媒体应用等领域发展起来的。 在这些领域里, 常 常需要处理结构复杂、类型多样的数据,包括图形、图象、影象、声音等, 传统 的数据库在对这些数据进行存储、处理以及在其上的各种查询、检索等方面都不 能很好地支持。为了更有效地管理这些数据,面向对象数据库系统被开发出来。 面向对象数据库系统支持对象数据模型,具有面向对象的特征。这些特征包 括9: 1)支持复杂对象,可以由原子对象(整型、实型、布尔、字符串、字节等) 通 过应用对象构造符(元组、集合、线性表、数组等) 构成对象。 重庆大学硕士学位论文 3 对象持久化概述 11 2)每个对象具有对象标识,它独立于对象的值。 3)元组构造符允许在对象之间定义关系。 4)具有封装性,数据库对象中封装了数据与方法,一个外部运算可以更新或 读取对象的唯一方法是通过方法,从而达到信息隐蔽,也是逻辑数据独立性的一 种形式。 5)支持类型和类的概念,类型概括具有相同特性的一组对象的共同特性,具 有相同内部结构和一组相同的方法的对象可以组成类。 6)支持继承的概念,类可以用增加新的属性、新的关系及新的方法加以特殊 化。 7)支持过载。 同时,面向对象数据库必须是一个数据库管理系统(dbms),具有数据库管理 系统的基本功能。主要包括: 1)持久性,即对数据的持久保存; 2)事务及并发性,保证多个用户并发操作时数据的完整性; 3)故障恢复,提供将数据库从故障后的错误状态恢复到某一正确状态的功能; 4)具有非过程化的、高效的、独立于应用的查询功能。oql语言(object query language)现在已被接受为标准的面向对象数据库查询语言。它支持典型的连接、 选择、投影查询。 除此之外,一些面向对象数据库系统还具备新应用领域所需要的一些特性, 包括模式演化、版本管理、分布式计算、嵌套事务和长事务等。 可以看出以对象模型为基础的面向对象数据库能按照面向对象的思想来管理 对象数据,应当是实现对象持久化最理想的技术。目前,面向对象数据模型最大 问题是没有一个统一的标准,并且缺乏一个完善的理论来指导。尽管有许多商品 化的odbms,但它们在程序设计接口、实现方法(手段)、对查询的支持等方面都存 在许多差异。其次,面向对象的数据库产品在一些方面仍然落后于关系数据库产 品,例如,还没有oodb支持视图机制,并且在这方面的先前研究也未真正展开; 模式化在oodb中更为落后,许多oodb产品仍然停留在类似codasyl风格的模式/应 用编译周期上;oodb与它们的应用程序语言紧密集成,许多系统仅提供一种语言 (大多为c+);除此以外,oodb的鲁棒性、可伸缩性和容错性都难以赶上关系数据 库系统。 面向对象数据库目前仍然是一个发展很不完善的技术,没有象关系数据库管 理系统那样众多成熟的产品,而且各厂商之间的面向对象数据库系统不能通用,使 得应用的移植性大为降低。相比之下,关系数据库以其成熟的产品、良好的通用 性和移植性,能很好实现数据共享,在一段时期内仍将是作为数据库系统的首选。 重庆大学硕士学位论文 3 对象持久化概述 12 3.3.2 关系数据库 e.f.codd 在 1970 年提出了关系数据库的概念、理论和方法,奠定了关系数据 库的理论基础。关系数据库是基于关系模型的数据库。关系数据模型提供了关系 操作的规范和功能要求,但不对 dbms 的语言给出具体的语法要求。用户对关系 数据库的操作是高度非过程化的,不需要指出特殊的存取路径,路径的选择由 dbms 的优化机制来完成。 codd 在发表的一系列论文中论述了范式理论和衡量关系系统的 12 条标准, 用 数学理论奠定了关系数据库的基础。 1974 年, ibm 的 ray boyce 和 don chamberlin 将 codd 关系数据库的 12 条准则的数学定义以简单的关键字语法表现出来,里程 碑式地提出了 sql(structured query language)语言。sql 的实际功能包括数据定 义、数据操纵和数据控制,是一个综合的、通用的关系数据库语言,同时又是一 种高度非过程化的语言,用户只需要指出做什么而不需要指出怎么做。 目前 sql 标准有 3 个版本。基本 sql 定义是 sql-89。sql-89 标准定义了 模式定义、数据操作和事务处理。sql-92 描述了一种增强功能的 sql,包括模式 操作,动态创建和 sql 语句动态执行、网络环境支持等增强特性。在完成 sql-92 标准后,ansi 和 iso 即开始合作开发 sql3 标准。sql3 的主要特点在于抽象数 据类型的支持,为新一代对象关系数据库提供了标准。 rdbms 是关系数据库管理系统,它从功能上划分主要可分为四部分:关系数 据库模式定义语言、关系数据操纵语言、关系数据库系统控制以及关系数据库维 护和服务。 关系数据库通过事务管理和锁机制来控制数据库并发和多用户访问,提供事 务提交、关系数据库转储、日志和日志文件以及检查点等技术保证关系数据库的 恢复;通过对被访问的数据加锁、执行封锁的两段式协议等技术,保证并发事务 调度的正确性。 使用关系数据库持久化对象最理想的方案是通过在关系数据库和应用之间建 立一个数据访问中间件,通过对象关系映射来实现对象持久化,这样直接在应 用中进行对象的存储和访问,使之完全具有面向对象的特性。 使用关系数据库来实现对象持久化,虽然需要在对象模型和关系模型间进行 一次转换,但是关系数据库产品之间良好的通用性和移植性使面向对象应用更能 够适应异构数据库环境,具有更加好的移植性。 3.4 基于关系数据库的对象持久化的实现方法 3.4.1 对象数据访问方式 在使用关系数据库作为数据存储机制的面向对象应用中,对象数据的访问方 重庆大学硕士学位论文 3 对象持久化概述 13 式一般分为以下三种112: 1)内嵌 sql 方法或 sql 硬编码式。这种方法将访问数据库的 sql 代码直接内 置在类的源码(对象方法)中。这种方法的局限性很强,但是设计和开发难度小, 可以快速构建出系统原型。使用内嵌 sql 的缺点是将业务逻辑耦合到关系数据库 上,需要所有业务逻辑类了解底层数据库的模式,使得编写的代码重用性极差, 而且不易于维护且难以扩展。 图 3.1 在业务类中耦合 sql fig.3.1 sql embedded in business classes 2)紧耦合映射方法或代理式。 这是稍好一些的方案,它将业务逻辑类的 sql 语句封装在一个或多个数据类 中,由这个数据类实现业务逻辑类的访问数据库操作。这样,把耦合到关系数据 库的 sql 语句就集中在数据访问类中处理,在一定程度上增强了重用性和可维护 性。但是这种方法仍然需要为不同的业务逻辑类建立与之对应的数据访问类,且 在数据库发生变化是需要重新编译数据类。 图 3.2 创建对应业务类的数据访问类 fig.3.2 business classes access rdb through corresponding data access classes 3)数据访问层方式。这是目前比较理想的方法。通过建立一个数据访问层于 rdb 业务类 sql rdb sql 业务类 数据访问类 重庆大学硕士学位论文 3 对象持久化概述 14 业务对象和关系数据库之间,将业务对象映射到持久化机制中,由数据访问层为 业务对象提供一个统一的数据库访问接口。由于数据访问层是独立于系统的其他 模块,使得业务逻辑类与关系数据库无关,同时数据访问层应该具有通用的持久 化对象的机制,使得数据访问层不绑定在特定的业务逻辑类上。这样就大大增强 了重用性。这种方法的缺点是对系统的性能有一定影响,原因在于存取对象时都 需要先映射,然后才能存取,降低了数据访问的效率。 图 3.3 业务类通过数据访问层访问 rdb fig.3.3 business classes access rdb through data
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年四川绵阳中化集团中化商务有限公司招聘笔试参考题库附带答案详解
- 2025年山东青岛国信海天中心建设有限公司招聘笔试参考题库附带答案详解
- 2025年宜昌美光硅谷生命科技股份有限公司招聘笔试参考题库含答案解析
- 汇丰中学面试题及答案
- 强化母猪护理职业技能的试题及答案
- 如何提升育婴师考试的学习资源整合能力试题及答案
- 2024年信息系统项目管理知识掌握试题及答案
- 促进学习效果的信息系统项目管理师考试多种策略试题及答案
- 2024年初级药师考试知识评测试题及答案
- 咯血呕血区别试题及答案
- 《食品营养与卫生学》课程标准
- 电气设备与线路的安装与调试
- 酒店前厅部沟通技巧
- 达利《记忆的永恒》课件
- 牛顿教学课件
- 车队事故分析报告总结
- 化学药品原料药制造行业报告
- 工业园区的消防安全管理课件
- 2024信息安全意识培训ppt课件完整版含内容
- 互联网数据中心(IDC)业务介绍
- 数学模型姜启源课件
评论
0/150
提交评论