通用数据访问接口中间件的设计与应用
2016-07-23石宾
石 宾
(中国电子科技集团公司电子科学研究院 预警机系统研究所,北京100041)
通用数据访问接口中间件的设计与应用
石宾
(中国电子科技集团公司电子科学研究院 预警机系统研究所,北京100041)
摘要目前,不同的数据库系统在高级语言的开发接口上存在较大差异,需要针对数据库系统编写相应的代码。当数据库改变时,应用代码也要相应的修改,系统灵活性会变差。针对上述问题,采用分层思想,在应用层和数据库访问层间增加中间层,即数据库访问接口中间件。通过对应用层和数据库访问层的抽象,实现应用接口与数据库访问控制分离,可至少减少20%的程序开发代码量,提高了系统的扩展性和可维护性。
关键词数据库;分层;通用数据库访问;中间件
在计算机技术高速发展的今天,作为信息系统的基础,数据库的应用领域也越来越普遍。有许多产品化或商用化的数据库系统软件,每个系统有其特殊的访问方法,使得应用程序直接依赖于数据库系统,系统的灵活性明显不足。受到分层思想的启发,通过定义一个标准数据库访问接口,并以此为基础,开发通用的数据库访问接口层,为顶层应用提供了统一、透明的访问数据库方法。
1数据库访问接口应用状况
数据库系统API(如:Oracle、MySQL、PostgreSQL等):该方式是应用程序与数据库之间,通过数据库API进行访问连接。优点是提高了数据库访问性能,但也限制了系统的灵活性[1-4]。
ODBC:开放数据库连接,为异构数据库和不同的数据库管理系统之间的互操作性带来方便。但不能应用在一些嵌入式操作系统中,且访问性能比数据库API差。
2GDBAI中间件的设计与实现
2.1设计思路与技术特点
图1表示通用数据库访问接口 (GeneralDataBaseAccessingInterface,GDBAI) 中间件的总体实现架构。GDBAI主要设计思路是通过拆分应用系统与数据库之间的紧耦合度和相互之间的依赖关系,实现当底层数据库变化时无需对业务应用层进行更改,调用层只需关注业务层的逻辑,增加了调用层的相对稳定性。
图1 中间件总体架构
(1)总体设计思路。1)GDBAI中间件主要包含数据存取应用访问模块、信息转换处理模块及数据库设计访问模块3个模块,其核心是信息转换处理模块。数据存取应用访问模块实现与业务应用之间的通信,完成接收处理应用请求,为应用提供统一的信息存取接口;信息转换处理模块是核心处理模块,其实现了应用信息接口到数据库SQL语句转换,其次,实现根据应用系统应用的不同平台、数据库等提供统一的接口,应用程序可无需关心数据库类型和平台类型;数据库设计访问模块实现了形成统一标准的SQL语句,与数据库进行交互,实现对数据库中的数据进行存取访问,为信息转换处理模块提供数据库操作结果数据[5];2)依据软件设计中模块化设计的思想,GDBAI对业务应用层提供统一的API接口,为不同应用,同类信息的存取提供统一的存取访问接口,实现应用系统中同一功能的模块化设计,减少不必要的重复开发,增强系统的可维护性,一致性[6];其次,隔离应用与数据库之间的关联,使得应用系统在设计时,只需考虑持久存储的应用层数据信息内容;对于底层数据库设计应用而言,主要考虑数据库对象中关系模型,优化、设计数据库中的表格、视图、索引及存储过程等,提高数据的访问和存储性能[7];
(2)技术特点。1)提供给不同平台、不同应用统一的C++调用库(静态库或动态库);2)使用该中间件时,无需安装其他第三方库(ODBC除外);3)实现跨平台可移植,不依赖于一种平台,可在多个平台的应用系统中提供统一的数据库访问接口[8];4)不依赖于特定的数据库,可根据实际应用需求快速、快捷地更换数据库[9];5)模块化的设计,使得系统某一部分的更改不影响其他模块的应用,减少因更改变动带来的成本费用及不必要的开发时间,其次,增强了系统的可维护性。
2.2GDBAI的实现
(1)数据存取应用访问模块。实现与应用系统之间的交互,接收和处理应用数据,为应用提供统一的接口,主要完成应用数据的增、删、改、查及数据的导入导出等功能需求;根据应用存取信息的不同,数据存取应用访问模块提供了不同的处理接口类,应用层的每一类信息,都对应有一个处理类,在处理类型包含对该类信息的增、删、改、查等功能,例如I_MapInfoDAO类,该类主要完成接收并处理应用中对地图信息(MapInfo)的操作功能。MapInfo是业务应用层与GDBAI之间的接口,I_MapInfoDAO是GDBAI提供的方法,应用若有对地图信息的操作,可以直接调用GDBAI提供的I_MapInfoDAO的相关方法即可,数据存取应用访问模块中各种处理类主要包含的方法如图2所示;
图2 数据存取应用访问模块接口
(2)信息转换处理模块(GDBAI的Core)。GDBAI的Core通过解析配置文件的方式,选择对不同数据库的访问。对于同构数据库应用系统,应用在选择访问方式时,可选择API调用方式,也可以选择通过ODBC调用访问方式,利用调用API方式访问数据库,应用可无需安装数据库的客户端及第三方的工具包,访问存取速度要大幅优于ODBC调用方式,特别是对于一些嵌入式应用平台,采用API调用方式是必须的,目前ODBC在一些嵌入式应用平台上是不适用的;其次,对于异构数据库应用系统中,选择ODBC调用方式,标准ODBC接口提供了统一的接口。GDBAI的Core是GDBAI中的重要模块,在设计实现时,主要考虑数据的并发访问,即采用多线程模式进行处理,利用连接池方式访问数据库,连接池中最大连接个数通过配置文件可配置,采取此种方式可减少系统与数据库的交互,提高应用响应速度;其次,在执行应用的每一个操作时,均采用先转换成与数据库设计访问模块之间信息交互的接口,传递给数据库设计访问模块模块,GDBAI的Core与数据库设计访问模块之间的接口信息主要包括:操作对象类型(表、视图)、操作对象名称、操作的动作(增、删、改、查)、操作执行结果信息;其主要包含的方法,如图3所示;
(3)数据库设计访问模块。实现信息底层数据库设计,通过对要存储的数据E-R图分析,统一规划设计数据库中的表格、视图和存储过程;其次,把GDBAI的Core需要提供的操作转换、拼接组成通用SQL语句再执行,对于Core的每一个请求,均采用一个事务的提交方式拼成SQL语句,然后提供给GDBAI的Core进行调用[10]。底层元素抽象为统一结构体RESET_VALUES,定义如下:
typedefstruct_ELE_LIST{
unsignedshortintele_type; //数据元素类型
charvalue[1024]; //数据元素值
}ELE_LIST;
typedefstruct_RESET_VALUES{
unsignedshortintopInfoType; //操作的信息类型(表、视图)
unsignedshortintopAction; //执行操作类型(增、删、改、查)
charopObjectName[256]; //操作表或视图名称
std::vector
}RESET_VALUES;
数据库设计访问模块主要包含的方法,如图4所示。
图3 信息转换处理模块接口
图4 数据库设计访问模块接口
3实践与应用
GDBAI中间件通过在应用系统和数据库管理系统之间建立关联,降低了应用系统与数据库管理系统之间的耦合度。一方面上层应用系统设计时只需关注特定业务流和基于事务性的操作,即其是一个完全的、面向对象的设计方式[11]。应用系统只需与GDBAI中间件层提供的接口保持统一,无需考虑数据在数据库中的组织、存储方式,而且也是独立于特定的数据库系统,增强了系统的灵活性和可扩展性[12];另一方面抽象数据库访问操作,屏蔽数据库之间的差异性,这意味着抽象数据库访问操作的数据类型、语句类型的统一。同时对于数据库操作提供基于ANSI-SQL的数据库语言标准接口[13],所以GDBAI中间件从设计思想上可支持目前主流的数据库系统。
GDBAI中间件已实现了在多个项目中的运用,在项目开发过程中作为一个独立的开发模块来设计,使得应用系统不依赖于某个特定的数据库系统,从而保证一旦数据库系统发生更改时不会影响到应用系统调用层[14]。GDBAI中间件也大幅减少了项目中数据库访问相关功能的开发工作,缩短了开发周期,提高了系统的鲁棒性[15-16]。经过在多个项目中应用情况统计,使用GDBAI中间件可以缩短至少10%的开发周期,节省20%的系统后期维护成本,从而在可行性上验证了GDBAI中间件在实际项目中的应用效果。
4结束语
数据库访问中间件有多种,第三方提供的也有许多,但在实际应用时由于操作系统的限制、应用平台的限制等诸多因素,制约对其的应用。为此,本文设计并实现的中间件应用更灵活、更方便,在项目应用中减少了开发成本和时间,使得项目软件在质量上也得以提高,本位的设计实现可为其他有同种需求的业务,提供了良好的借鉴。
参考文献
[1]王珊,萨师煊.数据库系统概论[M].4版.北京:高等教育出版社,2006.
[2]荆德国.基于开源数据库的电力SCADA系统[D].天津:天津大学,2007.
[3]赵宝献,秦小麟.数据库访问控制研究综述[J].计算机科学,2005,32(1):88-91.
[4]JeffreyDUllman,JenniferWidom.Afirstcourseindatabasesystems[M].Beijing:ChinaMachinePress,2011.
[5]祝玲.C语言访问数据库[J].计算机光盘软件与应用,2012(14):5-17.
[6]严波.基于组态王的SCADA系统设计及数据库访问接口技术[D].武汉:华中科技大学,2012.
[7]俞建,张燎军.数据库访问技术研究[J].计算机与现代化,2004(10):29-31.
[8]文必龙,邵庆.开放数据库互联ODBC技术与应用[M].北京:高等教育出版社,2007.
[9]王珊,陈红.数据库系统原理教程[M].北京:清华大学出版社,1998.
[10]HectorGarcia-Molina,JeffreyDUllman,JenniferWidom.数据库系统实现[M].2版.杨冬清,吴愈青,包小源,等,译.北京:机械工业出版社,2010.
[11]吴沧舟,兰逸正,张辉.基于MySQL数据库的优化[J].电子科技,2013,26(9):182-184.
[12]哈尔平.信息建模与关系数据库[M].北京:电子工业出版社,2004.
[13]叶建位,苏宏业.实时数据库系统关键技术及实现[J].计算机应用研究,2005,22(3):45-47.
[14]田芯安.实时数据库前端系统设计与实现[D].成都:电子科技大学,2013.
[15]沙先军.内存数据库的研究设计与实现[D].合肥:安徽大学,2011.
[16]张弛.实时数据库系统VegeBam2.0的关键技术研究与实现[D].西安:西安科技大学,2011.
General DataBase Accessing Interface Middleware’s Design and Application
SHIBin
(ResearchInstituteofEarlyWarningSystem,ElectronicScienceResearchInstitute,China
ElectronicTechnologyGroupCorporation,Beijing100041,China)
AbstractNowadays, there is big difference of the developing interface provided by database system of the high-level language(for example: C++), We need to write the corresponding code for the specified database. While database is changed, the code should be modified accordingly, the flexibility of the system becomes worse. In view of the above problems, adopting the layered thought, that is, inserting the middle layer between the application and database access layer, called general database access interface (GDBAI) middleware. By abstracting the application and the database access layer, the application and the database access control are separated, and the amount of code is reduced at least 20%, and the ease of use and maintainability are improved.
Keywordsdatabase; layer; GDBAI; middleware
收稿日期:2016- 04- 04
作者简介:石宾(1986-),男,助理工程师。研究方向:软件开发与集成。
doi:10.16180/j.cnki.issn1007-7820.2016.07.019
中图分类号TP311.132
文献标识码A
文章编号1007-7820(2016)07-064-04