数据访问中间件研究

2024-09-17

数据访问中间件研究(精选4篇)

数据访问中间件研究 篇1

0 引言

随着计算机技术的飞速发展,各种各样的应用软件需要在各种平台之间进行移植,或者一个平台需要支持多种应用软件和管理多种应用系统。软、硬件平台和应用系统之间需要可靠和高效的数据传递或转换,使系统的协同性得以保证。

为了解决分布异构问题,人们提出了中间件(Middleware)的概念。根据著名咨询机构IDC对中间件的分类,中间件包括终端仿真/屏幕转换中间件、数据访问中间件、远程过程调用中间件、消息中间件、交易中间件、对象中间件6大类,而在这几种产品中,数据访问中间件(Data Access Middleware)是随着数据库技术的发展而逐渐兴起的,也是其中发展较早的一类。

对于企业和政府机构来说,拥有很多种类的数据库和数据资源是一种普遍情况,而这些单位又通常需要把所有数据综合利用,以提供对业务的支撑。这个时候,数据访问中间件的作用就会凸现出来。数据访问中间件能够实现对各类数据资源(主要是关系型、复合文档型及对象型)的管理,支持对数据的高级集成,提供统一的访问接口支持对数据集的访问。因此,只要多种类型的数据资源环境存在,数据访问中间件将会一直发挥重要作用。

1 研究工作

数据访问中间件位于客户机服务器的操作系统之上,通过使用同一接口提供对运行在多种平台上的不同数据库的访问。通过使用数据访问中间件,一方面可以解决数据使用的不一致,实现数据的统一管理;另一方面,数据结构的改动,可以最大限度不影响上层应用系统,极大地减少了系统维护的难度,实现数据库对客户访问的完全透明。

数据访问类中间件是在分布式系统中建立数据应用资源互操作的模式,实现异构环境下的数据库连接或文件系统连接的中间件,从而为在网络上虚拟缓冲存取、格式转换、解压等带来方便。该类中间件主要解决以下几个方面的问题:

① 解决管理数据库连接,抽象网络协议。一般由数据库厂商或支持多数据库的中间件提供;

② 支持对数据库存取的编程,可以使用存储过程。对象数据库常为面向对象编程语言如Java/C++提供适应ODMG的接口;

③ 用于数据复制、转换、信息增值。常作为数据仓库解决方案的一部分;

④ 注重对数据的结构进行操作而不是数据本身,读写数据库的分类信息。

数据访问类中间件主要适用于应用程序与数据源之间的互操作模型,客户端使用面向数据库的API以提请直接访问和更新基于服务器的数据源,数据源可以是关系型、非关系型和对象型。这类中间件大都基于SQL语句,并采用同步通讯方式。

2 实现机制

数据访问中间件用于处理业务服务层和数据层之间的交互操作,目的是将用户和数据访问的复杂性相隔离。数据访问中间件设计的主要特点是将与数据库的连接和访问有效地进行管理。通过对数据连接和访问机制的管理,改善网络上多用户访问数据库的性能,优化网络传输,并支持与多种数据库的连接。

2.1 客户端/服务器机制

数据访问中间件主要由服务端和客户端两大部件组成。服务端是数据访问中间件的核心,是连接客户端和数据服务器的中枢,同时具备在本地数据库服务器无法提供服务的情况下,与其他服务端交互的功能;具备判断负载能力,实现多个服务端的负载均衡;实时接收来自客户端的数据请求,并将执行结果反馈给客户端。

客户端以COM组件的形式提供给客户应用程序,客户应用程序通过客户端,根据预先约定的数据访问协议向服务端发送数据访问请求,数据的访问结果由客户端进行解析并以通俗明了的表达方式提供给客户应用程序,方便其使用。数据访问中间件结构如图1所示。

2.2 通用数据访问协议

为了解决应用程序和数据库结构的紧耦合关系,数据访问中间件采取方便用户访问数据的简单通用数据访问协议。

数据访问中间件通过使用同一接口提供对运行在多种平台上的不同数据库的访问,提供给使用者到任意数目数据库的访问接口,包括一些运行在典型的不易访问的环境下的数据库。SQL调用解释成为标准FAP(Format and Protocol)格式。FAP格式通用的客户机和服务器连接,也是异质数据库和运行平台的通用连接。把API调用直接翻译成FAP,把请求传递到目标数据库并翻译以便目标数据库和平台做出响应。

2.3 数据库访问接口

数据访问中间件可支持访问MS SQL SERVER、SYBASE、ORACLE、DB2常见流行的中大型数据库。虽然在Windows平台下有着很多通用的数据库访问接口,如ODBC、ADO、DAO和BDE等。但是考虑到数据访问中间件的跨平台可移植性,比如把在Windows平台下开发的数据访问中间件移植到UNIX平台下,如果开始设计开发采用了ODBC、ADO、DAO和BDE这些数据库访问接口的话,那么移植起来就会要全部推倒重来,移植性非常差。基于这点考虑,在设计数据访问中间件时采用自己封装的接口(即数据库访问接口)。对于访问MS SQL SERVER和SYBASE来说,它们自带有DBLIB接口;对于访问ORACLE来说,它自带有OCI接口;对于访问DB2来说,它自带有CLI接口。DBLIB、OCI、CLI这些接口的API函数功能大致相似,因此,通过封装就可以得到一个具有跨平台可以移植的、通用的数据库访问接口。通过这个接口,在数据访问中间件中统一向数据库建立连接、发送SQL请求、返回数据。

2.4 负载均衡

定时器实时检测数据访问中间件服务器的负载情况,依据负载均衡计算规则将客户请求队列的请求转发给特定的服务器请求队列。

3 关键技术

3.1 元数据的构建

所谓元数据,就是“描述数据的数据”或者“描述信息的信息”。数据和元数据的划分不是绝对的,有些数据即可以作为数据处理,也可以作为元数据处理。

元数据库资源可以理解为数据访问中间件进行分布式访问所需要的信息。在一个通常的数据访问中间件中,这些信息主要是对于数据库和数据库中的表的描述。

随着信息技术的发展,尤其是计算机网络技术的出现,数据的管理和使用已经从集中式转变为分布式,在新的系统环境中,为适应对分布在多个网络节点上的、多种内容、多种类型的数据库的管理和使用,促进数据共享,通过建立不同等级的、与数据库实体链接的元数据库,可以规范数据管理,使数据具有继承性,达到管理数据、说明数据、了解数据和获取数据的目的,从而使信息共享成为可能。

3.2 数据库连接池技术

数据库连接池的功能主要是提供一套对数据库物理连接的分配和使用策略,最终实现连接的高效、安全复用。

数据访问中间件的重要功能就是根据用户请求,对数据库进行操作,然后将结果返回给用户。频繁的建立和关闭数据库连接是非常耗时的。因为建立一个数据库物理连接,数据库服务器要进行一系列的动作,它们分别是建立连接、检验有效性、检查权限、分配私有缓冲区等。在断开这个连接时,服务器要做许多后续工作,如释放缓冲区、释放连接所用的许多资源。为了解决这个问题,数据访问中间件系统在数据库的连接中应用连接池的实现技术。这对于改善整个系统的性能,特别是数据访问中间件的性能而言,是非常重要的。

对于资源共享,有一个很著名的设计模式—资源池。该设计模式主要是为了解决共享资源频繁分配、释放所造成的问题。将该设计模式应用到数据库连接管理领域,就是数据库连接池。其原理就是建立一个管理所有数据库连接的连接池,用户访问数据库时从数据库连接池取得连接,执行数据库操作,然后释放这个连接,但连接池并不关闭这个连接,而是把该连接置为空闲状态并放回连接池,继续提供给其他的客户使用。

数据库连接池是一个存放数据库连接的缓冲区,由一个监视线程维护。在系统初始化时,根据配置,在连接池中预先建立一定数量的数据库连接,以后所使用的连接都从该连接池中获取。连接池建立之后,需要定义一套分配和释放连接的策略。当用户请求数据库连接时,首先看连接池中是否有空闲的连接,如果有空闲连接则将连接分配给用户,并做相应处理。主要处理策略就是设置该连接为已分配状态;若连接池中没有空闲连接,则先看该连接池是否已达最大连接数,若未达到则创建新连接并设置其为已分配状态即可,若已达到则只能等待其他线程释放连接后再获取,超过允许的最大等待时间则此次请求无效。当用户释放数据库连接时,就放入到连接池中,并设置其为空闲状态,而不是关闭。正是这种策略,保证了数据库的有效复用。另外,针对数据库连接池中到底要放置多少个连接,连接用完后该如何处理的问题,需要一套配置策略,根据具体的应用需求,确定一个初始的连接池中连接的数目以及一个连接池可以建立的最大连接数目。

4 结束语

数据访问中间件技术在降低开发成本、提高工作效率上起着独特的作用。但是大多数数据访问中间件都是把数据访问的部分封装起来,真正适应性强的数据访问中间件并不多。因此,构建适应性强的数据访问中间件将是数据访问中间件技术未来发展的一大方向。

大型数据库系统在企业级信息应用中正扮演着日益重要的角色。随着分布式应用的发展,数据库上的信息流量迅速增长,以至于服务器极容易在某个小的时间段内超负荷,尤其是现有的Web服务器以及各种应用服务器。数据访问中间件则能够在解决上述问题上发挥很好的作用。

本文针对数据访问中间件的重要性,对数据访问中间件的研究工作、实现机制及关键技术进行了详细论述,并对其未来的发展方向进行了展望。

摘要:数据访问中间件是在分布式系统中建立数据应用资源互操作的模式,实现异构环境下的数据库连接或文件系统连接的中间件,该类中间件在所有中间件中是应用最广泛、技术最成熟的一种。全面而系统地介绍了数据访问中间件的研究工作、实现机制及关键技术。对数据访问中间件进行了展望,指出了数据访问中间件的未来发展方向。

关键词:中间件,数据访问中间件,客户端/服务器

参考文献

[1]洪志全,徐琳.分布式数据服务中间件实现技术研究[J].计算机应用研究,2003,12(1):46-48.

[2]李翠,蒙科知,张露.反射式中间件研究[J].软件导刊,2008,7(4):3-4.

[3]SCHMIDTD.Towards Adaptive and Reflective Middleware for Network-centric Combat Systems[J].Crosstalk,2001,16(2):42-45.

[4]李敏,周园春,李淼,等.基于DCOM的领域数据访问中间件的研究与实现[J].计算机应用研究,2004,6(2):130-131.

[5]杨金玺,柏文阳.基于XML异构数据访问中间件的设计与实现[J].软件天地,2005,5(8):7-9.

数据访问中间件研究 篇2

关键词:ADO.NET; 数据库; DataSet; DataReader; DataAdapter

中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)15-30614-02

Research of Database Access Technology Based on ADO.NET Method

LI Yan

(Jingdezhen Ceramic Institute,Jingdezhen 333001, China)

Abstract:For the sake of much better and flexible developing the database application's softs, we need to study ADO.NET about database access mechanism and understanding the ways of the use of ADO.NET about the aspect of connecting to a database,operating and accessing data. ADO.NET has added many new objects and programming interface such as Dataset, DataReader,DataAdapter. It makes the operation of database simpler. This article introduces database access technology using ADO.NET method by explaining the principle of data exchange and the use of the model for data access object.

Key words:ADO.NET; Database; DataSet; DataReader; DataAdapter

1 引言

数据库应用软件在计算机应用领域占有相当大的比重,其应用范围已经越来越广泛,无论是办公自动化、生产流程控制、局域网、Intranet/Internet以及各种各样的管理系统都离不开数据库。

在对一个数据库应用程序进行开发时,从开发者的角度而言,首要的技术环节就是要解决如何访问数据库。只有解决好这个问题,我们才能更加方便高效的使用数据库应用软件。

但是当今数据库种类众多,几乎每一种数据库都有自己的数据格式,要想访问这些数据就必须依靠特定数据格式的驱动程序,而这些驱动程序在使用上的千差万别,又为数据库应用软件的开发带来了不少麻烦。

为了解决这个问题,微软开发出了ADO,这是一组COM(Component Object Model)组件。它通过一个易于使用的封装类提供对底层数据的访问,从而使得对数据库的操作更加简单。ADO.NET则是在ADO基础上开发出的数据访问框架的最新产物,它是.NET框架的一部分,ADO.NET比ADO的功能更加强大,是在.NET代码中访问数据库的最好工具。深入研究ADO.NET的数据库访问技术对于数据库应用软件的开发具有十分重要的意义。

2 ADO.NET的体系结构

就其本质而言,ADO.NET是支持数据库应用程序开发的数据访问中间件。ADO.NET建立在.NET Framework提供的平台之上。它是使用Microsoft .NET Framework中的托管代码构建的,这意味着它继承了.NET执行时环境的健壮性。ADO.NET主要是用来解决Web和分布式应用程序的问题,它由.NET Framework(提供了对.NET应用程序的数据访问和管理功能)中的一组类或命名空间组成。

ADO.NET是用来处理基于Web应用程序所需的无连接计算环境。无连接的设计支持ADO.NET方便地伸缩企业应用程序,因为在每个客户机系统和数据库之间并没有使用开放连接。而是在开始客户端连接时,暂时打开一个到数据库的连接,从数据库服务器中检索需要的数据,然后关闭连接。客户端应用程序然后使用与数据库服务器所维护的数据存储完全独立的数据。客户端应用程序可以定位数据的子集,修改该数据,并将该数据一直缓存在客户机中,直到应用程序指示将所有变化传回到数据库服务器。这时会暂时打开一个到服务器的新连接,对客户端应用程序所作的所有修改都被传回到更新批处理中的数据库,同时关闭连接。

支持这种无连接环境的核心ADO.NET组件是DataSet。DataSet本质上是一个缩小的内存中数据库,它的维护独立于后台数据库。只有在填充DataSet或者将DataSet中的数据变化传回到数据库时,才会打开到数据源的连接。这种无连接的计算环境将系统开销最小化,并改进了应用程序的吞吐量和可伸缩性。ADO.NET DataSet提供的内存中数据库提供了在成熟的数据库中可以找到的许多功能,包括支持数据关系、创建视图的能力、支持数据约束以及外键约束。

在ADO.NET设计中,支持无连接的、基于Web的应用程序是其中一个重要特性,然而,这并不是ADO.NET的全部功能。无连接模式也可以用于Web应用程序,但它并不是客户端/服务器和桌面应用程序的最佳模式。当在连接方式下运行时,可以更好更高效地实现这些类型的应用程序。为了支持这种连接风格的计算,ADO.NET提供了DataReader对象。DataReader主要使用连接方式提供了快速只向前的游标风格的数据访问。虽然DataSet提供了无连接的Web应用程序的基础,但DataReader支持桌面和客户端/服务器应用程序所需的快速连接风格的数据访问。

3 ADO.NET访问数据库的模式

Windows平台下的ADO.NET主要有3种访问数据库的模式,分别为OLEDB模式、ODBC模式和SQLCLIENT模式,另外还有其他数据访问模式,如对Oracle数据库的访问可以使用专用的Oracle模式。

3.1 OLEDB模式

OLEDB模式主要用于访问OLEDB所支持的数据库。OLEDB是Microsoft公司开发的一种高性能的、基于COM的数据库访问技术,OLEDB和其他Microsoft公司数据库技术的不同之处在于其提供通用数据访问的方式。OLEDB数据提供程序通过OLEDBConnection对象提供了使用OLEDB公开数据源的连接,以及与Microsoft SQL Server的连接。

3.2 ODBC模式

ODBC模式主要用于访问ODBC所支持的数据库,它是Windows平台的一种通用数据访问方式。一般在Windows平台下存在的数据库都可以通过建立系统DSN来实现对数据库的调用。

3.3 SQLClient模式

SQLClient只用于访问MS SQL Server数据库,是ADO.NET中比较特殊的组件。当然,MS SQL Server也是OLEDB和ODBC所支持的,因此也可以通过OLEDB和ODBC模式来访问MS SQL Server,但实验证明对访问MS SQL Server来说,采用SQLClient模式比OLEDB和ODBC模式效率更高,所以使用MS SQL Server作为数据库开发应用程序时,最好使用SQLClient模式访问。

4 ADO.NET的主要对象

ADO.NET中有很多重要的对象。这些对象主要实现两个主要的功能:(1)数据访问:用于访问数据库中数据和操作数据库的类型;(2)数据表示:用于包含数据库数据(如数据表)的类型。这两种类型之间联系密切,在数据库开发中两种类型都会用到。

ADO.NET包含很多重要的对象,其中Connection,Command,DataReader, DataAdapter是数据访问类,其他的如:DataSet,DataTable, DataView等是数据表示类。通过使用这些对象,使得对数据库的操作更加简单。

4.1 Connection对象

在 ADO.NET 中,使用 Connection 对象连接到特定的数据源。使用的 Connection 对象取决于数据源的类型。创建Connection对象时,应在连接字符串中提供与DBMS通信必要的信息,如数据库的位置、用于认证的用户名和密码以及要访问的DBMS中的数据库。

所有其他ADO.NET数据访问类都依靠Connection与数据库进行通信。

数据库连接只在传输数据时才打开,因此创建Connection实例时并不自动连接数据库。Connection定义了Open()和Close()方法,用于控制连接何时可用。

4.2 Command对象

Command对象提供与数据库交互的主要方法。可以用Command对象来执行SQL语句、运行存储过程等。

要使用Command对象执行命令,有三种选择,有些命令不返回结果,这种情况下就可以使用Command.ExecuteNonQuery()方法;有些命令返回一个结果,就需要使用Command.ExecuteScalar()方法;如果是返回多行命令,就应用Command.ExecuteReader()方法。

对于不同的数据库调用模式,使用的Command是不同的,对应的Command要与其对象模式相对应。

4.3 DataReader对象

使用DataReader可以从数据库返回一个只读的、仅能向下滚动的串流(Stream),而且当前内存中每次仅存在一条记录。

在程序开发的过程中,开发人员经常需要执行一些简短的操作,比如访问单独的用户名和密码。在执行这些操作时,就可以直接使用DataReader对象。

使用DataReader对象时,首先必须调用DataReader.Read()方法选择结果集中的一行,再不断调用该方法来移动DataReader,获取数据信息。获取到一行时,Read()方法返回True;否则返回False。

4.4 DataAdapter对象

在ADO.NET的核心数据访问对象中,最后一个是DataAdapter。

DataAdapter用于从数据源检索数据并填充到DataSet中的表,它还将对DataSet的更改解析回数据源。DataAdapter使用.NET Framework数据提供程序的Connection对象连接到数据源,并使用Command对象从数据源检索数据以及将更改解析回数据源。

DataAdapter最常用的两个方法是DataAdapter.Fill()和DataAdapter.Update()。Fill()方法从数据库中获取数据;Update()方法更新数据库中的数据。这两个方法都可以用于数据集或单个数据表。

4.5 DataSet对象

DataSet是ADO.NET的核心,它是从数据源中检索到数据在内存中的缓存,处理从数据存储中读出的数据,并以离线方式存在于本地内存中。可以使用相同的方式来操作不同数据来源取得的数据。不管底层的数据库是SQL Server还是Oracle,DataSet的行为都是一致的。

在DataSet中可以包含任意数量的DataTable,且每个DataTable对应一个数据库。一般来说,一个对应DataTable对象的数据表就是一组DataRow与DataColumn的集合。可以使用这些对象与DataRelation对象互相关联。

DataSet可将数据和架构作为XML文档进行读写。数据和架构可通过HTTP传输,并在支持XML的任何平台上被任何应用程序使用。开发人员可以使用WriteXmlSchema方法将架构保存为XML架构,并可以使用WriteXml方法保存架构和数据。若要读取既包含架构又包含数据的XML文档,可以使用ReadXml方法。

5 ADO.NET的运行模式

ADO.NET的运行模式主要分为以下几个步骤:(1)用户通过Web方式查寻数据库时,调用一个ASPX过程;(2)在ASPX网页的代码中使用ADO.NET的Command对象对数据执行查询操作;(3)对数据库的访问首先建立在连接并执行查询命令,然后从数据库中读取数据;(4)数据被存放在DataSset对象中,从数据库返回的是只读的信息;(5)将这些信息显示在页面上;(6)断开与数据库的连接。

6 结束语

ADO.NET集合了所有用于数据处理的类,是.NET数据库应用程序最终的解决方案,正在成为现今数据库开发的一种潮流,并代表了未来技术发展的方向。由于目前网络数据库是主流,ADO.NET在其运行效率、存取速度以及网络负载平衡等方面的均衡表现,使得它具有顽强的生命力。在进行数据库应用软件开发中,使用ADO.NET可以极大的帮助你以一种更加高效的方式来构建并完成任务。

参考文献:

[1]David Sceppa. ADO编程技术[M]. 北京:清华大学出版社,2001.

[2]张跃廷,韩阳,张宏宇. C#数据库系统开发实例精选[M].北京:人民邮电出版社,2007.6.

数据访问中间件研究 篇3

随着信息化建设和无纸化办公的不断深入,已有相当数量的企业和科研机构积累了大量的以不同形式数据库管理系统存储的数据,并且为了存储和管理这些数据持续不断地继续投资。但是这些数据库系统各成体系,不能实现彼此之间的资源共享。因而迫切需要建立一个集成系统,将异构数据库联合起来使用,来实现不同数据库之间的数据资源共享。中间件技术可以屏蔽底层分布式环境的复杂性和异构性,为上层的应用软件提供运行与开发环境。正是由于这些原因,我们选择中间件技术来实现对异构数据库进行访问。

1 XML技术

XML是W3C于1998年提出的数据文件格式标准,和HTML一样是SGML的一个子集。XML是继HTML之后发展起来的新一代Internet技术,它将SGML的丰富功能和HTML的易用性结合到WEB应用中,以一种开放的、自我描述的方式定义了数据结构,它在描述数据内容的同时能突出对数据结构的描述,并且可以体现数据之间的关系。XML语言的可扩展性、结构性和自描述性使它在异构集成系统中具有很好的应用,它不仅与平台无关,而且与厂商无关。因此我们可以使用XML作为中间语言来转化不同数据库系统之间的差异。

XML作为数据传输的中介格式,使异构数据源之间可以保持相互透明,而不需要知道对方内部存储格式,某个数据源内部的变更不会影响到其他数据源,因此XML可以为异构数据源提供一个理想的缓冲。使用DTD和Schema来对数据库模式进行映射,可以将数据源的类型映射到XML支持的数据类型,从而实现数据类型异构的集成[1]。

2 数据库中间件技术

中间件是一种独立的系统软件或者服务程序,分布式应用软件借助中间件在不同的技术之间共享资源,其程序接口定义提供了一个相对稳定的应用环境,不管底层的计算机硬件和系统软件怎么更新换代,只需将中间件升级更新,并保持中间件对外接口定义不变,应用软件几乎不用修改。

数据库中间件是所有中间件中应用最广泛、技术最成熟的一种,它处于前端客户机和后端数据库之间,负责接收客户端的数据请求,然后把请求传递给相应的后端数据库服务器,进行数据处理,最后把结果经数据库中间件返回给客户端。常用的数据库中间件技术有:微软的ODBC和OLE DB、SUN的JDBC等,以上三种最常见的数据库中间件各有其优缺点,到目前为止,数据库中间件还没有一个统一的标准,因此我们有必要继续研究数据库中间件的理论知识和相关技术。

3 CORBA技术

CORBA是一种通用的对象请求代理体系结构。它把各种对象的操作和属性封装在不同的接口之中,通过对象请求代理来调用接口中的操作,完成指定的功能。

由于CORBA的操作平台无关性、编程语言无关性及其网络协议无关性的特点,使得它渐渐被人们所重视,并且成为中间件技术的主流平台。而通用数据库访问中间件正是建立在CORBA分布式平台基础上的,由CORBA客户端根据用户的需求提出远程调用,CORBA服务端则根据请求来访问各种异构数据库。由于CORBA技术本身就是一种中间件[2],所以本文中提到的通用数据库中间件系统就是建立在CORBA中间件基础上的一种综合中间件。

4 基于XML的数据库中间件的设计与实现

本文在不改变异构数据库原始数据存储和管理方式的前提下,集中为异构数据源提供一个高层检索服务,以XML为资料转换的中介格式,将来自多个数据库的资料整合在同一个接口输出,以解决使用者必须在分布式的数据库中搜索,再手动式将所得信息拼凑的问题[3]。

本文中使用的基于XML的异构数据库访问中间件处于业务逻辑层,异构数据源处于数据层,应用程序处于表示层,如图1所示。

4.1 系统架构

本文采用XML、CORBA、Java等技术开发系统,以XML作为公共的数据模型,为用户提供统一的查询接口,最终将查询得到的结果以XML格式输出。系统的整体框架如图2所示。

4.2 系统的工作流程

本文系统中数据库中间件的工作流程分为先后两个过程:初始化过程和运行过程。

· 初始化过程 主要完成的任务是生成元数据信息。从中间件系统角度引入两类角色,中间件管理员和各数据库管理员。中间件管理员首先登录中间件定义数据的全局描述。各数据库管理员登录中间件注册自己的数据库信息以建立连接,并定义共享的内容。

系统的运行流程如图3所示。

· 系统运行过程 由CORBA客户端通过与Web服务器通信模块接受业务处理系统的请求,将请求命令存放在请求命令缓存模块中,系统根据元数据信息对请求命令进行解析和分解,分解为针对具体数据库的子查询,并调用CORBA服务器端的对象连接和操作数据库的方法,CORBA服务器端对CORBA客户端的子查询命令进行合法性验证和解析后,调用数据库访问模块,将查询后的结果转换为XML文档,并发送给CORBA客户端。CORBA客户端将多个子结果进行合并封装后,通过Web服务器通信模块交给业务层并显示在页面上。

4.3 系统的主要模块设计

由图3中我们可以看到本文系统的模块组成和具体的工作流程。在此重点介绍系统几个重要模块,包括元数据与局部数据映射模块、查询分解模块、CORBA客户端和服务器端这几个模块。

4.3.1 元数据与局部数据映射

局部数据库管理员登录系统后显示系统从元数据表存储的位置读取元数据表列表,根据数据源表名和表中字段的字面描述和详细描述判断自己的数据库中是否存在具有相同业务类型的数据表,如果存在的话,就申请注册到该元数据表对应的XML文件中。该XML文件以元数据表名命名,主要包括以下几部分内容:与该元数据表对应的局部数据表表名、该表所在数据库系统使用的IP地址、端口号、用户名、密码、数据库系统使用的驱动程序类型,以及与元数据表中字段所对应的局部表表名等项。如表1所示。

4.3.2 查询分解模块

该模块将接收到的全局查询语句分解为各个子查询语句。依据元数据中全局数据与局部数据的映射关系,将全局查询语句的字段名映射为局部数据的字段名,并获得对应的数据库的具体信息,如IP、端口、用户名和密码等,这样就将全局查询分解成了针对不同数据库的子查询。

查询分解模块得到SQL语句中的元数据表表名,然后查询系统初始化阶段生成的以元数据表表名命名的XML文件,从中查询到与业务处理系统处理的业务类型相同的局部数据库表,将SQL语句中的元数据表字段对应为相应的局部数据表字段,然后为元数据表的XML文件中每个局部表合并成一个子SQL语句,并且验证每个SQL语句的合法性。最后将它们放到子查询请求队列中,由CORBA客户端与CORBA服务器端通信接口依次发送到相应的服务器端。

4.3.3 CORBA客户端

CORBA客户端主要将业务处理系统提供的参数通过查询元数据表,由查询分解模块分解为几个子查询,通过,CORBA服务器端通信模块提交到相应数据库的CORBA服务器端,并且把CORBA服务器端返回的XML文件合并后,返回给业务处理系统。

4.3.4 CORBA服务器端

CORBA服务器端主要是为CORBA客户端的远程调用提供实现,提供多个数据库连接以满足业务处理层查询的要求,并将数据库查询得到的结果返回给客户端,以供客户端进行下一步的处理。

由于系统中可能存在大量客户进行访问,需要频繁建立和关闭连接,这样会极大地降低系统的性能,所以对连接的使用可能会成为系统的瓶颈。这里的CORBA服务器端对于数据库的访问采用了数据库连接池技术。数据库连接池的数据请求流程图如图4所示。

5 实验结果

本文中设计的异构数据库中间件系统以一个毕业生信息查询系统为例来模拟整个运行过程。每个学校都在自己的数据库里存储了本校毕业生信息,若要对全省的毕业生信息进行统一的查询,利用本文设计的数据库中间件来访问各个学校的数据库便可得到所有符合查询要求的毕业生信息。在本实验中,利用三个不同类型的数据库来模拟三个学校的数据库,设计了一个统一的查询界面。用户通过浏览器输入查询条件,数据库中间件将查询分为各个子查询并访问数据库,将得到的结果呈现给用户。实验结果证明,系统的设计是切实可行的,具有一定的应用价值。

6 结 论

本文结合目前比较流行的XML、Java和CORBA技术提出了一种异构数据库访问中间件解决方案。用户看到的只是一个全局数据库,该全局数据库由XML文档存储。实际的用户查询被系统分解为针对各数据源的子查询,子查询结果再由系统汇总返回给用户,同时,各子系统都保持自治性,具有其本地的不为全局所知的事务运行。由于CORBA的操作平台无关性、编程语言无关性及其网络协议无关性和XML的可扩展性和自描述性等优点,使该系统达到了即插即用、实现简单和可扩展数据源的目标。

本文中进行的仅仅是一些初步的研究,存在一些问题和考虑不周的地方。下一步的研究主要是对于面向对象数据库和XML数据库,全局查询语言和局部查询语言之间转换的优化和数据安全验证等方面。

参考文献

[1]张驰.基于XML的异构数据库数据交换技术研究[J].数据库与信息管理,2008,3(8):1637-1639.

[2]Oznsoy C R,Zayegh A,Kalama.AInteroperable CORBAMiddleware de-sign for substation communication systems[C].Eight IEE Internationalconference,2004.

数据访问中间件研究 篇4

.NET 提供的数据库访问组件ADO.NET[1]功能非常强大,与DataSet类对象配合,可以映射出一个完整的数据库。同时.NET还提供了功能强大的列表控件类DataGridView类,给类数据库管理的可视化编程带来了极大的方便。但这种编程模式,界面、数据集,数据访问组建等之间的耦合性太强,大大局限了数据库应用程序的开发,失去了灵活性,不利于模块化和团队开发。另外,开发人员需要对界面、数据关系、数据集、数据访问组件进行全面的了解掌握,这对开发人员的要求太过于全面,这样会增加人员成本。针对上述问题,本文利用数据库访问组件建立中间层,将核心开发和数据开发分离,减少开发中各部件中的耦合,简化开发过程,提高开发效率。

1 构建数据类库的原则

这是一个将项目从物理层面,抽象成数据层面的过程。事先,必须对所需控制和计算的对象进行深度的了解,使得构造的数据模型更接近现实。期间,只需要完成2件事,一是构造出所需的类和它们的成员;二是各类对象之间的关系。类和类对象关系的集合,就是所需要的类库。数据类库是整体类库的一部分,这里的讨论研究只涉及到数据访问部分。

1.1 建立类库结构

在建立类库之前,需要对数据进行梳理、归纳。即将公共数据、属性、方法定义到一个基类中。必要时,可建立数据抽象类,这个抽象类只负责数据定义,不负责数据操作,将读写等具体的数据操作交给子类去完成。这样做的好处是,在对多种数据类对象操作时,不需为每一个数据类建立对象。而只要建立一个父类对象,由父类对象指向已建立好的子类对象,可完成实际子类对象操作。这种情况在面向对象程序设计中,被称为多态。为了完成这样的多态,父类中必须建立虚拟的方法和属性,子类中重载自己需要处理的方法和属性。在不同的程序设计语言中,设计虚拟和重载的方法都是大同小异的。例如在C#中,虚拟的方法和属性用关键字virtual说明,而重载的方法和属性用关键字override 说明。

例如:现有4个题型类,即填空题、单选题、多选题和判断题。虽然差别很大,但也有很多相同的部分,如分值、难度系数、出题、判分等。鉴于此,可以在这4个类的上面建立一个父类,在其中定义共同的方法和属性,将4个类中同名不同内容的方法和属性,定义成虚拟的,而具体的内容实现则放入4个子类中重载实现。

图1是一个远程机房监控数据类库结构示意图。

1.2 理清对象关系

类数据或属性成员,一般是数据在类对象中的映射。如果一个成员所代表的不是一个单一数据,而是另外一个类对象,就表明一个类和另一个或几个类之间发生了关联。这种类和类之间的关系属于类库的一个重要组成部分,如图2所示。

当一个类对象和同一个类的多个对象发生关联时,应该为被关联类建立一个集合对象,由这个集合类对象来管理被关联的类对象,使得宿主能专心做更专业的事。上图显示了部分类对象之间的关系,Elements中含有一个C2PointCollection类对象C2Points,它是关于C2Point类对象的集合。也就是说,Elements中可以包含很多个C2Point类对象,由C2Points负责管理。C2Point类包含一个C2PointTable类对象C2PT和一个C2Point_CurTable类对象C2CT,分别负责对2个数据表进行访问。

2 建立数据库,统一访问标准

在定义好类库结构和类对象关系之后,总数据结构也明确了,可以进行数据库设计了。这里只强调设计数据库时需要注意的问题,即统一访问标准。

当数据表设计好之后,程序中对数据的访问,一般限于对数据的读写操作。为简化数据访问类库的设计,必须规定统一访问标准。现在并没有这种标准的规范,一个单位或机构应该规范一套标准,根据从简到繁定义几个规范。主要包括过程或函数名称、过程或函数类、参数类型、参数长度、返回值、错误处理以及触发器使用等方面的规定。下面举例说明这种规范概略构成:

(1) 为每一个数据表写一个行写入存储过程,名称由 “表名” + “_Write”构成;

(2) 为每一个数据表写一个行修改存储过程,名称由 “表名” + “_Modify”构成;

(3) 除特殊要求,不为数据表提供独立的行删除存储过程。若提供过程名称,则由“表名” + “_Delete”构成;

(4) 每个存储过程通过参数@ErrCode返回错误代码,错误信息需查阅相关的错误信息列表;

(5) 写存储过程通过参数@ID返回行标识;

(6) 略。

类库中应包含一个或多个访问的基类(对应数据库);若干个数据表类(对应各数据表);根据数据表数据含义,定义枚举类型和结构类型等,则需根据需要具体确定。

3 建立数据访问基类

在上面一系列结构和关系建立后,便可以进行具体的类库建立了。在建立类库的过程中,结构或关系可作适当调整,但必须慎重。

数据访问基类是建立连接数据库的实体类,是执行数据库操作命令的容器类,是数据表类的基类。所起的作用是接受连接信息,建立与数据库的连接;测试连接是否正确,返回错误代码和错误信息(如登录、访问权限);建立命令执行平台,供所有命令使用;接受、执行数据查询命令,并以数据表形式返回;建立虚拟的读写虚拟方法,完成基本读写功能;建立终极读写命令,完成实际数据的读写操作;数据表名称、数据行ID、错误代码、错误信息的定义;数据类型转换,数据库数据类型和编程数据类型之间的相互转换;负责错误报告和错误清除。图3表说明了一个基类的概要信息[1]。

读者可能已经注意到,连接串定义成静态属性。这样做的优点在于只需要为类库提供一次链接信息,所有的类对象都可以使用,不需要每次为每个对象提供链接信息。但当同时对多个数据库访问(多个链接)时,会带来诸多问题。

解决此问题有2个方案:

一是将连接串属性改为非静态属性,届时为每个访问类对象赋予不同的连接串,可实现对不同数据库的访问。但带来了一个问题,使用类库编程时每次必须为每一个类对象赋予正确的连接串,给编程者带来诸多的不便,且容易出错。

二是将做好的访问基类作为顶级基类,并删除其静态属性ConnectionString。然后,在其下派生几个次级基类(几个数据库),为每一个次级基类建立一个静态的连接串,数据表访问类分别从这几个次级基类继承。这样,只要为不同的数据库次级基类赋予相应的连接串即可。

4 建立数据表访问类

数据表访问类原则上是与数据表一一对应的,主要针对一个数据表的读/写。也可以针对几个关系密切的数据表,建立一个数据表访问类,不过,这样一来基类中的一些方法就必须重载和重写。当多个数据表的结构基本相同时,可以考虑建立共同的基类。建立的数据表访问类是数据访问类的一个子类,对应一个或几个数据表,或者是其他数据表访问类的基类,是执行SQL读/写命令[2]的环境容器。该数据表访问类所起的作用是每次负责一个数据行的操作;建立与数据表字段相对应的数据变量或属性;接受程序类型值,并转换成SQL类型;给出字段值之前负责将SQL类型转换成程序类型值;添加一行数据,并返回行表示ID;根据ID检索一行数据;根据ID修改一行数据;负责特殊字段(图片)的读写。下面以一个点在不同视图中的位置为例,说明数据表访问类结构,以及类和表的关系,如图4所示。这个表只负责记录点在视图中的位置关系,其他属性有另外的数据表负责。从图上可看出描述一个点与视图的关系,需要3个要素,分别是视图、点、位置。C2View数据表设计[2]如表1所示。类中的字段名称与表中的字段一一对应,指向同一数据,却不是同一对象。即类中的字段是数据表的某行数据在类对象中的映射。这里将名称统一,只是为了方便记忆和编程。

5 使用数据库访问类

以上类库封装成DLL文件后,写出类库的使用说明,就可以下发给小组其他程序设计人员了。其他的程序员无需关心数据库的读写细节,只关心数据进出,任务就单一多了。下面叙述数据库访问类的使用步骤。

依据数据表建立访问类如图5所示。

(1) 项目引用包含类库DLL文件;

(2) 为数据库类指定连接串信息,如:

DataBase.ConnectionString = CreateLinkString();

CreateLinkString是一个假设的产生连接串的函数。第一次程序运行时,可由对话框从用户处获取,加密后保存(一般存于注册表)。以后运行程序直接取出使用。

(3) 构建数据表类对象。如:构造数据表C2View的访问类C2ViewTable对象C2V。

C2ViewTable C2V = new C2ViewTable();

(4) 写表操作。为C2V的每个必要属性或字段变量赋值,然后执行C2V的Write方法,返回数据行ID。执行以下操作可插入一个坐标为(100,200)的数据行到表C2View中。

C2V.X = 100;C2V.Y = 200; …; C2V.Write();

(5) 读指定行数据。为C2V指定读取数据行的ID,然后执行C2V的Read方法后,相应的字段变量值为可用数据。执行以下操作可实现读出标号为100行的数据, 读出之数据在C2V的成员变量中。

C2V.ID = 100;C2V.Read();

(6) 修好一行数据。与写数据相似赋值,不过同时需要指定被修改数据行ID,然后执行Modify方法。执行以下操作可实现可将标识为100数据行的坐标修改为(50,100)。

C2V.ID = 100;C2V.X = 50; C2V.Y = 100;C2V.Modify();

(7) 删除一行数据。只需指定被删除数据行ID,执行Delete方法。删除标识为100的数据行,执行以下操作。

C2V.ID = 100;C2V.Delete();

当然,特殊数据(如图像、文件等)应予特殊处理,但对于在使用者来说,使用方法也一样简单。

6 结 语

本文主要研究了对ADO.NET的二次封装,主要说明了中间类库构建的方法。这种封装介于通用封装和专用封装之间。构建时需注意几个方面:中间类库必须是一个相对完整的体系;尽量简化访问接口;尽量减少内外耦合;统一所有的接口形式;建立独立的测试手段;建立详细的类库文档;为使用者提供详细的使用文档;最重要的是必须保持类库、数据库、项目版本的一致性。

摘要:为了使数据设计和程序开发完全分离,减少二者间耦合,达到项目便于分割,任务便于独立,提高效率,减少错误的目的。采用构建数据库访问类库的方法。本方法已在理论考核系统、远程辅助教学系统等多个系统中做了实验,并验证了其效果的良好性。得到了一个结论,有了这样一个中间层,项目主程序的开发者,可以完全不需要了解数据的细节,只需要构建这个类库的对象,通过对这些对象的读写操作,就可以完成对数据库的操作。

关键词:数据库访问,中间层,类库,封装

参考文献

[1]Microsoft Corporation.MSDN library:visual studio[R].US:Microsoft Corporation,2000

[2]Microsoft Corporation.SQL server联机丛书[M].US:Mi-crosoft Corporation,1998.

[3]顾兵.数据库技术与应用(SQL Server)[M].北京:清华大学出版社,2010.

[4]DATE C J.SQL与关系数据库理论[M].北京:清华大学出版社,2010.

[5]KROENKO D M,AUER D J.数据库原理[M].北京:清华大学出版社,2008.

[6]HOFFER J A,PRESCOTT M B,MERFADDEA Fredd.现代数据库技术[M].北京:清华大学出版社,2008.

[7]桑国珍.数据库访问技术的研究[J].现代电子技术,2010,33(20):82-83.

[8]陈友良,盛可军,王阳阳.基于ASP.NET三层结构软件的研究与开发[J].现代电子技术,2010,33(6):58-60.

[9]叶安胜,周晓清.ADO.NET通用数据库访问组件构建与应用[J].现代电子技术,2009,32(18):102-104.

上一篇:高中美育教育下一篇:健身作用