简单的虚拟数据库系统设计与实现_第1页
简单的虚拟数据库系统设计与实现_第2页
简单的虚拟数据库系统设计与实现_第3页
简单的虚拟数据库系统设计与实现_第4页
简单的虚拟数据库系统设计与实现_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 简单的虚拟数据库系统设计与实现简单的虚拟数据库系统设计与实现 摘要摘要 近年来 科学技术迅速发展和信息化的推进 数据的采集 存储 处理和 传播的数量也与日俱增 由于实施数据管理系统的阶段性 技术性以及其它的 因素 以至于即使在一个单独的企业或部门 每个单位就是一个数据源 每一 个数据源都可能是异构的 这样使得在企业或部门中存在大量的异构的数据库 为了访问这些异构数据库实现信息共享与集成 因此 需要一种新的系统框架 来解决多个数据库异构的问题 本文是基本基于 XML 平台无关性 易扩展 交 互性好 语义强等特性 以对象作为数据表示与交换的基本单元 建立一个统 一的 虚拟化的数据库管理和访问平台 从而实现用户透明访问异构数据库 关键字关键字 XML 虚拟化 异构 数据库 Abstract In recent years the rapid scientific and technological development and the advance the number of data collection storage processing and dissemination is also increasing due to the implementation stage of data management systems technical and other factors so that even in a single enterprise or sector each unit is a data source for each data source is likely to be heterogeneous which makes a large number of heterogeneous database in the enterprise or department In order to access these heterogeneous databases to achieve information sharing and integration therefore need a new framework to solve the problem of heterogeneous multiple databases This is the basic XML based platform independent easily extensible interactive semantic features data representation object as the basic unit of exchange the establishment of a unified virtualized database management and access to the platform in order to achieve transparent to the user access to heterogeneous databases Keywords XML virtualization heterogeneous database 1 异构数据库问题的分析异构数据库问题的分析 目前 在企业或部门中存在着大量的异构数据库 这些数据源就像一个孤 立 的 信息岛 相互访问存在困难 因此 解决异构数据库共享访问 主要面临 2 的问题表现在如下几个方面 系统异构 数据所依赖的应用系统 数据库管理系统或操作系统之间不同 模式异构 数据在存储模式上的不同 通常的数据存储模式主要包括层次 模式 网状模式 关系模式 面向对象模式 当前 关系模式主流的存储模式 同一类存储模式 它们的模式结构也可能存在着差异 如 Mysql Oracle Sql Server 所采用数据类型并不完全一致 语义异构 是指对同一现实世界事物进行描述时 数据在表示方式或内容 显示上不同 主要包括概念级语义异构和值级异构 2 实现异构数据库共享的解决方案实现异构数据库共享的解决方案 当前 实现异构数据库共享方法有很多 并且各不相同 但总体上而讲 可归为两类 数据仓库法和虚拟数据库法 数据仓库法 建立一个数据仓库 将参加集成共享的各数据源的数据副本 按照一个集中 统一的视图要求 转换成符合数据仓库的模式 并存入数据仓 库 同时 系统将提供对数据仓库的查询机制 这种方式的优点是既可用于数 据集成共享 又可用于决策支持 缺点是数据更新不及时 数据重复存储 比 较适用于简单的系统中 使用的技术主要涉及如何有效的加载数据 增量维护 数据等 结构如图 1 所示 数据转换 1 用户 全局查询 数据仓库 数据转换 2数据转换 3 数据源 1数据源 2数据源 3 3 图 1 数据仓库系统结构图 虚拟数据库法 也称为中间件法 在这种方式下 数据存储位置保持不变 集成共享系统提供一个虚拟的数据库平台以及在这个平台上查询 增加 删除 修改数据 用户访问操作异构数据时 只需要指定所需要的数据 而不关心数 据模式 数据抽取 数据合成以及这些数据获取等细节 通过这种方法 用户 能够透明的访问异构数据库 这种方法优点是不需要重复存储大量数据 数据 更新及时 数据存储访问负载均衡 比较适合于高度自治 集成数量多且更新 变化数据系统 缺点是系统结构复杂 实现难度大 且查询访问等其他操作相 对较慢 本文采用虚拟数据库法作为解决异构数据库问题方案 虚拟数据库系 统结构如图 2 所示 图 2 虚拟数据库系统结构图 3 3 虚拟数据库实现虚拟数据库实现 虚拟数据库是一个虚拟的 现实不存在的 统一的数据交换视图平台 用 用户接口 对象操作 虚拟数据库 对象解析器 数据源连接池 数据库 1数据库 2数据库 3 数据源 SQL 适配器封装返回值 对象合成 4 户能透明地访问 其主要的工作模块包括虚拟数据库访问接口 对象解析器 数据源适配器 数据源连接池 对象封模块 对象合成模块等 3 1 虚拟数据库访问接口虚拟数据库访问接口 虚拟数据库访问接口作为用户或应用程序访问异构数据库的通道 它只需 用户或应用程序提供指定数据 不必关心底层实现细节 最终返回所需的结果 在本系统中 定义的访问接口如下 public boolean insert Object obj public boolean update Object obj public boolean delete Object obj public boolean insert Object obj String databaseName public boolean update Object obj String databaseName public boolean delete Object obj String databaseName public Object select Integer id Class cls public List select Class cls String where int first int end 以上的接口中 obj 为指定的数据操作对象 databaseName 是指定的数据源或数 据库的名字 当没在指定时 系统自适应匹配数据源或数据库 id 为对象的唯 一编号 对应关系模式中的主键 cls 为数据操作对象按指定的方式注册生成 的字节码 where 是查询语句的条件 first 是查询记录的起始位置 end 是查 询记录的结束位置 此外 以上的接口的访问方法都是以对象作为基本单元 并且这些对象都是基于 XML 的 DOM 它们与 XML 文档之间能够相互转换 但使 用 Java 语言实现虚拟数据库时 以面向对象的操作方法更为便利 3 23 2 对象解析器对象解析器 对象解析器主要实现将用户或系统程序传入接口中的对象进行分解 获得 对 象的属性以及对应的值 属性与属性值之间的关系 为数据源 SQL 适配器生成 对应的 SQL 语句做准备 关键代码实现如下 解析对象 BeanInfo beanInfo Introspector getBeanInfo obj getClass PropertyDescriptor pds beanInfo getPropertyDescriptors if pds null int k 0 int size pds length 获得对象属性与属性值 String properties new String size 1 Object values new Object size 1 beanInformation new BeanInformation for int i 0 i size i properties k pds i getName if properties k equals class continue 5 values k pds i getReadMethod invoke obj k beanInformation setProperties properties beanInformation setValues values 3 33 3 数据源数据源 SQLSQL 适配器适配器 不同数据库不仅在存储模式上存在差异 而且在数据 的类型也可能不同 例如 Mysql Oracle Sql server等 因此需要一个特定的数据源SQL适配器生 成对应的SQL执行语句 屏蔽底层细节 数据源SQL适配器主要包括指定数据库 数据类型转换生成 执行语句谓词生成等 本系统采用注册方式来实现数据源 SQL适配器 首先系统实现了一个公共的数据类型和公共SQL语句生成的类 而 特定的数据库通过继承公共类重载或覆盖成员来产生特定的数据类型或SQL语句 然后扩展出对不同数据库的支持 最终实现数据源SQL适配器 关键代码如下 注册公共数据类型 private static List typeList new LinkedList static typeList add int class typeList add float class typeList add double class typeList add Integer class typeList add Float class typeList add Double class typeList add String class 生成公共删除对象记录SQL语句 BeanInformation beanInformation parseObject obj if beanInformation null int j 0 String properties beanInformation getProperties Object values beanInformation getValues int length properties length 1 for int i 0 i length i if properties i toLowerCase equals id j i break sql delete from getTableName obj where properties j values j 6 3 43 4 数据源连接池数据源连接池 对于每一个数据库对应一个数据库连接 而且每个连接建立 释放占据大 部分时间和资源 因此 建立一个数据源连接池来提高系统运行效率 数据源 连接池可以同时管理和维护多个数据库连接 当系统需要建立数据库连接时 不是直接与数据库建立连接 而是查看数据源连接池中是否存在连接 如果有 则从数据源连接池中取出 否则 直接与数据库建立连接 当系统不需要连接 时 不是直接释放连接 而是查看数据源连接池中是否有空间可以存放 如果 有则放入其中 否则关闭连接并释放所占用的资源 在本系统中应用程序可通 过上Hash键值索引从数据源连接池中获得数据库连接 并在数据源连接池空间 不足时 使用LUR 最近最少使用 算法进行连接替换 同时 对不同数据库连接 支持通过类似数据源SQL适配器的注册方式进行动态扩展 关键代码如下 初始化Hash并发连接池 connections new ConcurrentHashMap 通过key value将连接放入连接池 public void put String key ConnectionProvider cp if key null ConnectionPool connectionPool connections get key if connectionPool null if connectionPool isFull cp closeConnection else connectionPool put cp getConnection else connectionPool new ConnectionPool connectionPool put cp getConnection connections put key connectionPool 通过key从连接池取出连接 public Connection take String key ConnectionProvider cp Connection connection null if key null ConnectionPool connectionPool connections get key 7 if connectionPool null if connectionPool isEmpty connection cp getConnection connectionPool put connection else connection connectionPool take cp setConnection connection else connection cp getConnection if connection null return connection 3 53 5 对象封模块对象封模块 由于使用SQL语句进行查询 所得结果是结构化的记录 而系统中操作与返 回集都是面向对象的形式 因此 需要对象封装器将结构化记录转化成一个具 体的对象 对象封装器采用对象解析器逆向过程 具体实现如下所示 protected Object generateObject ResultSet rs Object obj if rs null 获得查询结果元数据 ResultSetMetaData rsmd rs getMetaData int colums rsmd getColumnCount for int i 1 i 0 size end first list new ArrayList 对象集合 while rs next ret generateObject rs ret if ret null list add ret 对象合成 size 4 4 测试结果 测试结果 由于本系统重点在实现逻辑业务处理上 没有进行可视化界面设计 它将 以测试结果的形式展现系统实现效果 系统总体结构如图3所示 9 图3 虚拟数据库系统结构图 虚拟数据库系统数据库配置文件如图4所示 图4 数据库配置文件 虚拟数据库

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论