数据访问接口(精选8篇)
数据访问接口 篇1
0引言
当前, 电力系统自动化的发展趋势是各级主站以EMS和变电站自动化系统 (SAS) 为基础向全局自动化发展, 以保证整个电网安全经济高效地运行。因此, IEC委员会TC57工作组制定了针对能量管理 (EMS) 的IEC61970标准, 标准中给出了高速数据访问 (HSDA) 的组件接口 (CIS) 规范性要求, 但是在实现上没有给出具体的规定, 因此, 不同厂商自定义数据格式, 各种应用系统之间存在异构性, 造成相对封闭的“自动化孤岛”, 不利于电力系统自动化向全局性发展。
XML技术的出现解决了数据交换方式问题。XML简单易读, 可以标注文本和二进制数据。异构系统之间采用XML作为通信媒介, 可解决系统差异带来的影响, 在现已普及的Internet上应用XML, 可进一步降低系统成本, 并大大提高系统的可扩展性。本文介绍如何在HSDA中应用XML技术来实现统一的数据格式。
1XML技术概述
XML即可扩展标记语言, 它与HTML (HyperText Markup Language) 一样, 都是SGML (Standard Generalized Markup Language) 标准通用标记语言。XML是Internet环境中跨平台的、依赖于内容的技术, 是当前处理结构化文档信息的有力工具。
XML包括3种常见的定义XML文档语法的方法:DTD (文档类型的定义) 、XML Schema (XML模式定义文件) 、RDF (资源描述框架) 。其中RDF和XML Schema具有很大的潜力[4]。
RDF实现了为机器建立可理解的交换文件的功能, 定义了一个用命名的属性和值的方法来描述资源间的关系的简单的模型, 并引进了用XML表达的用于编码和传输元数据的语法规则。RDF定义了数据本身, 也就是语义。
RDF被引入用来实现基于HSDA模型的数据交换。XML在数据中附加标记来表达数据的逻辑结构和含义, 解决了数据的统一接口问题。而基于HSDA模型的RDF语法定义规范了相应XML文档的结构/标记定义, 使其在不同的环境下能得到一致的理解。使用RDF语法的XML可以生成一个文件来交换所需数据的一部分或全部。因其支持多重混合标准和特定领域对象, RDF格式正被许多EMS供应商用来解决不同应用间、不同系统间数据交换的问题。
2XML在高速数据访问中的应用
2.1 HSDA数学模型及接口的实现
为了快速浏览服务器上数据, HSDA服务对数据访问服务器上的资源进行组织, 形成TC57视图。在HSDA数据模型中引入节点 (Node) 、项 (Item) 、类型 (Type) 、性质 (Property) 等对象。HSDA数据模型描述了透过HSDA接口所看到的数据在服务器组织情况, 数据模型如图1所示。
其中节点对应于现实世界中的一个对象, 如一个变电站, 或一个变压器设备。通过节点将服务器上的对象组织为如图2所示的层次结构, 在这个层次结构中每一个节点只有一个父节点, 它可以是有一个或多个子节点的枝节点, 也可以是没有子节点的叶节点[5]。每个节点包含了项的信息, 项是可用HSDA访问的数据值, 它必须属于某个节点。类型是节点的元数据, 说明节点对应的CIM类。性质是项的元数据, 说明项所对应的CIM属性或关联。
根据数据模型, 服务器和客户端的接口如图3所示。
图3中的接口可以分为如下几组:
(1) 服务器与会话接口, 即IServer和ISession。客户端通过IServer接口创建会话对象, 获取服务器的状态, 了解IServer接口所支持的功能和服务器所支持的视图;客户端通过ISession接口了解会话的状态, 并注册ShutDown对象。
(2) 浏览接口, 包括INode、IItem、IType和IProperty。客户端使用INode查找在HSDA服务器内部实例化的节点数据对象, 使用IItem接口查找一个节点对象中存在的Item值。使用IType查找与HSDA服务器上节点数据对象有关的元数据, 使用IProperty查找与HSDA服务器上的项数据有关的元数据。
(3) 组管理接口, 即IGroup和IGroupManager。客户端使用IGroup接口对组进行查询、创建、筛除, 使用IGroupManager接口在组中对项进行增加、筛除和校验以及对组进行克隆。
(4) IO接口, 即IGroupManager和ISimpleIO。客户端使用IGroupManager接口进行在组上数据访问操作, 包括同步方式和异步方式的读、写以及订阅;使用ISimpleIO可以在不创建组的情况下进行读、写以及带质量码的写。
(5) 客户端接口ICallBack。为了支持异步调用和订阅, 客户端为每一个会话对象实现一个具有ICallBack接口的回调对象[4]。
2.2 CIM到HSDA的映射
HSDA接口中的对象来自CIM中, 因此, 要把CIM的每一个对象映射到HSDA接口中, 具体如表1 所示。
2.3 XML描述HSDA视图
客户端访问服务器主要是浏览与数据交换两方面。把CIM中的每个对象和数据, 按照TC57视图模式, 加载到浏览接口上, 形成一棵多叉数结构。由于树形结构上的节点存在增加或筛除, 因此, 节点是变化的。用链表方式描述树形结构是困难的, 而XML格式为树形结构, 因此, 利用XML优点来描述HSDA视图, 达到结构简单, 语言通用性, 可跨平台的特点。下面是用XML描述HSDA视图模式一个示例, 如图4所示。
3结语
由于XML具有开放性和描述复杂数据的能力, 使得各种信息都能够通过XML这种格式进行统一的描述, 因此, 它在高速数据访问接口中的应用也在尝试之中。它使得高速数据访问接口结构简单, 数据格式统一, 兼容性强, 为实现变电站与控制中心、控制中心与控制中心的无缝通信提供了基础。
参考文献
[1]IEC61970.Energy Management System ApplicationProgram Interface (EMS-API) Part 301:CommonInformation Model (CI M) Base (Final Draft, October2003) [S].IEC TC57, USA, International ElectroTechnical Commission (IEC) , 2003.
[2]刘东, 张沛超, 李晓露.面向对象的电力自动化[M].北京:中国电力出版社, 2009:126-137.
[3]IEC61970.Energy Management System ApplicationProgramInterface (EMS-API) Part 404:High SpeedData Access (HSDA) Base (Final Draft, December2007) [S].IEC TC57, USA, International ElectroTechnical Commission (IEC) , 2007.
[4]张晓非, 冯冠, 张银鹤, 等.XML基础教程与实验指导[M].北京:清华大学出版社, 2008:26-43.
[5]孙碧玲.基于IEC61970标准的电力系统高速数据访问服务研究及实现[D].济南:山东大学, 2006.
试对数据库访问技术进行研究 篇2
关键词:数据库访问技术;ADO.NET;安全性
中图分类号:TP311.13 文献标识码:A文章编号:1007-9599 (2011) 15-0000-01
Database Access Technology Research
Li Bin
(Guangdong Gaoyao People's Hospital,Zhaoqing526040,China)
Abstract:At present,along with the WWW growing,database access technology has gradually become the focus of the IT technical staff,understand and master the technology of database access,help to better the technology application.This article first elaborated the database access technology development,and based on the ADO.NET data access techniques are studied, for reference only.
Keywords:Database access technology;ADO.NET;Safety
一、数据库访问技术的发展
Web进入编程时代以前,在大部分IT人员眼里,数据访问仅仅是一个相对而言的问题,即需要使用到的所有数据都是自己事先准备好的。大多人关心的问题是如何选择性能好、价格低的数据库服务器,并且系统中涉及的全部模块必须和服务器兼容,其中客户机和服务器的应用是这种两层模型较为典型的范例。
在很短的时间内,三层系统模型发展成了Windows DNA,即Microsoft.NET服务器系统。该系统主要是利用统一的模型进行数据访问,其注重的是内容,而不是存储媒介及数据格式,具体的表达方式完全是建立在UDA的基础上的。为了提供一种通过VB方便访问OLE DB功能的途径,Microsoft设计了ADO。
ADO提供了对脱机记录集、服务器端游标和XML的支持,不仅增强了访问功能,同时还提高了访问效率。为了便于在Web环境下进行数据传输,Microsoft对ADO进行了优化。但是随着人们对可伸缩性以及协同工作能力要求的不断提高,ADO已经渐渐无法满足这一要求,ADO.NET随之出现。
二、ADO.NET数据访问技术
.NET框架是由微软公司推出的一个应用平台,在该平台中ADO.NET是Windows Forms和ASP.NET应用访问数据的标准服务,通过ADO.NET能够访问由.NET提供的不同类型的数据源。ADO.NET可以有效地从数据操作中把数据访问分解成若干个單独使用的组件。ADO.NET可以直接处理检索到的结果,或是将结果放入DataSet对象,并以特殊的方式向用户公开。
(一)ADO.NET的特点。ADO.NET是采用高度分布、松散的应用程序进行设计的,这类程序通常使用HTTP在逻辑程序连接中通信,XML便成为在该连接中交流数据的最佳选择,这是因为文本XML格式较为适合HTTP,当全部连接都处于同一网络时,XML通信提供了最大的灵活性。ADO.NET数据访问具有以下特点:1.不依赖于连续的活动连接。由于被打开的数据库连接会占用一定的系统资源,在正常情况下,数据库仅能维持少量的并发连接,并且维持这些连接会使应用程序的总体性能有所降低。而使用ADO.NET进行数据访问则是以较有节制使用连接的结构作为中心设计出来的,从而使应用程序连接到数据库的时间足以更新和获取数据。在这样的情况下,数据库未被大部分的时间空闲连接所占用,因此,能够为大量的用户提供服务。2.数据能够被缓存到数据集中。较为常见的数据任务是从数据库检索数据随后在对数据进行某些操作,例如显示及处理数据,或是将数据发给别的组件。但很多情况下,应用程序若是在每处理一条记录就返回一次数据库,显然是不切实际的,所以最佳的解决方法就是将从数据库中检索到的记录进行临时存储,然后再对该临时集进行使用,这就是数据集的概念。数据集其实是数据源检索到得记录的缓存,其工作方式好比虚拟的数据存储区。数据集里面的数据一般是数据库中内容的精简版本,可以采用和操作数据类似的方式对数据集进行操作,操作时数据集能够保持与数据库的不连接状态,从而使数据库可以自由执行其他任务。使用数据集最便利的地方在于组件能够按照需要交换数据集。因此,组件不必分别查询数据库。3.数据集独立于数据源。虽然数据集是从数据库中获取数据的缓存,但是两者之间却并没有任何实际啥关系。可以将数据集看作是一个容器,填充这个容器的主要内容是从数据适配器执行的SQL命令或存储过程。由于数据集并没有直接绑定在数据源上。因此,数据集则是来自于多个源的数据的集成点。
(二)ADO.NET数据访问技术的安全性研究。1.安全的ADO.NET连接。为了确保应用程序的安全,首要目标就是保护对数据源的访问,而要想保护对数据源的访问,就必须保持用户的密码、标识以及数据源名称等连接信息的私密性。应避免用纯文本的形式存储用户的密码和标识。因为这样做会造成严重的安全漏洞。用户的密码和标识属于源代码的一部分,如果源代码的安全受到威胁,那么用户的密码和标识则很容易遭受攻击,即便向外部源提供的代码是编译后的版本,也很有可能会被反汇编,从而导致用户的密码和标识被公开,所以说用户的密码和标识绝对不能用纯文本的形式存在于代码中。因此,在连接到Microsoft SQL Server时,可以使用集成安全性,这是因为集成安全性使用的是当前活动活动的标识,而不是传递用户的密码和标识。2.安全的ADO.NET编码。确保应用程序的安全还包括编写安全的代码,而代码则必须只公开客户端代码所需的信息和功能。通常在ADO.NET中最常见的攻击是SQL Insertion攻击,攻击者主要是通过在数据源位置插入其他的SQL语句来达到攻击的目的,这些命令不但能够破坏会修改数据源位置的信息,而且还可以检索用户的私人信息。为了防止SQL Insertion攻击,必须对来自外部源的输入进行验证,并传递列值作为参数,而不是串联这些值来创建SQL语句。
三、结论
总而言之,ADO.NET数据库访问技术具有不依赖于连续的活动连接、数据能够被缓存到数据集中和数据集独立于数据源等优点,必将得到广泛的应用。但在具体使用中必须对其安全性加以注意。只有在确保其安全的基础上,才能更好地发挥该技术的各种优点。
参考文献:
[1]吉占占.基于DataSet和ADO.NET的文献检索列表转换软件设计[J].计算机应用与软件,2009,6
[2]王丽芳.基于ADO.NET的O/R Mapping中间件的研究[N].西北工业大学学报,2010,6
数据访问接口 篇3
RS-232-C是在数据终端设备(DTE)和数据通信设备(DCE)之间进行二进制交换的接口标准,本文要讲的DTE就是个人计算机(PC机)、DCE就是全站仪。PC机(笔记本电脑)RS-232-C接口为9针,徕卡TPS系列全站仪RS232接口有5孔,如下图所示:
其联线方式为:2(RXD)--5(TH_TXD);3(TXD)--4(TH_RXD);5(GND)--3(地)。
1)联络控制信号线
6#:DSR(Data set ready)--数据装置准备好;4#:DTR(Data set ready)--数据终端准备好;7#:RTS(Request to send)--请求发送;8#:CTS(Clear to send)--允许发送;9#:RI(Ringing)--振铃指示。
2)数据发送与接收线
3#:TxD(Transmitted data)—发送数据;2#:RxD(Received data)—接收数据。
3)地线
5#:GND—信号地。
在很多情况下,传送设备一方需要知道接收设备一方是否作好接收准备,用来表示接收设备是否准备好的信息必须从接收设备送回来。这个信息被称为流量控制(flow control)或握手(handshaking)。握手有两种类型:硬件握手和软件握手。软件握手信号是由特殊字符组成的,所以传送这些字符使用数据电路,而不使用握手电路(徕卡TPS系列全站仪使用软件握手方式)。为了构成硬件握手,至少还要增加一条传送握手信号的电路。据此,为了完成单向通信需要有三条电路:传送数据线,信号地线,握手线。
2 PC机通过RS232C接口与徕卡TPS系列全站仪联接访问其内存
我们公司工程测量工作使用PC-RS232C接口与徕卡TPS系列全站仪联接采用三种方式:1)野外作业中,每测一点立即存入全站仪RS232C接口并通过PC-E500保存处理数据;2)野外作业中,每测一点立即存入全站仪RS232C接口并通过笔记本电脑的RS232C接口,中断调用地形图电子平板软件绘图;3)野外作业中,当天观测数据直接存入全站仪内存,收工回到驻地通过全站仪专用通信线连接笔记本电脑的RS232C接口与全站仪RS232C接口后,再运行笔记本电脑安装的徕卡survey office软件直接查看操作全站仪内存中存贮的全部测量外业数据。
3 问题的发现及处理
我们单们新购入一批联想昭阳K41A笔记本电脑,首次使用即发现survey office软件不能联通全站仪,当时以为此台电脑有故障,但连续试用另外三台K41A结果仍一样。
我们首先怀疑预装的WINDOWS XP有问题,但换一版本重装后问题依旧,证明不是系统软件的问题;于是怀疑K41A笔记本电脑RS232C硬件接口,于是关机插上老式RS232接口鼠标,开机进入XP后鼠标使用一切正常,证明笔记本电脑RS232C硬件接口也没问题;又将全站仪与PC-E500接上,全站仪下载内存数据,此时PC-E500能接收。最后将全站仪与笔记本电脑接上,观测数据存入全站仪RS232C接口,此时笔记本电脑上运行的地形图电子平板接收数据正常。通过多次试验说明,只是不能通过徕卡survey office软件直接查看操作全站仪内存,其它一切正常。
我们的思路只好转到联接线缆上,是否新的笔记本电脑对RS232C线缆接法有新的要求?拆开刚才用过的鼠标,发现它只用了2#、3#、5#、7#4个引脚;拆开PC-E500用线缆,发现它只用了2#、3#、5#3个引脚;又拆开徕卡全站仪专用线缆,发现它只用了2#、3#、5#3个引脚联线,6#、7#、8#3个引脚短接在一起。
通过应用RS232C接口原理对上面试验情况进行反复分析,采用软件握手进行异步通信现有电缆是没有问题的。我们又用以前用过的USB转RS232C插件试用,问题依旧。利用排除法推知:问题可能出在新笔记本电脑的BIOS上,于是我们与联想技术服务人员取得联系,联想总部对其BIOS软件进行修改,刷新后问题得以圆满解决。
4 结束语
现在的测量仪器均为电子仪器,且集观测、数据处理、通信等功能于一体。特别是GPS,在野外测量中常因线缆接触不良、电台通信干扰等影响工作。这就要求我们这些测量技术人员应当是具备必要的电子、电脑、通信和测绘专业知识的复合型人才,只有这样我们在野外工作中遇到问题才能及时有效解决。特别是单位领导,在抓生产的同时,千万别忘了员工知识更新及技术的超前储备。
摘要:该文主要通过PC机RS232C接口与徕卡TPS系列全站仪联接访问其内存实践中发现的异常情况进行分析研究直至解决问题的全过程,向读者展示了PC机RS232C异步通信技术在工程测量中的应用一角。
关键词:RS232C,TPS,全站仪,内存访问
参考文献
[1]刘乐善,叶济忠,叶永坚.微型计算机接口技术原理及应用[M].武汉:华中理工大学出版社,1996.
[2]Peter W.Gofton.精通串行通信[M].王仲文,薜荣华,巴雪静,译.北京:电子工业出版社,1995.
[3]李鹏.计算机通信技术及其程序设计[M].西安:西安电子科技大学出版社,1998.
数据仓库中数据存储与访问的实现 篇4
数据仓库的概念自出现后,首先被应用于金融、电信、保险等传统数据处理密集的行业。国外许多大型的数据仓库在1996-1997年建立。随着工业竞争的加剧,数据仓库已成为营销的必备武器----一种通过更多地了解客户需求而保住客户的途径。
1 数据仓库研究现状
OLAP (On-line Analytical Processing) 是面向特定问题的联机数据访问和分析,它主要用于支持目标明确但比较复杂的查询分析操作[1]。目前数据仓库数据存储的实现主要有三种模式,一是单纯的关系数据库存储即ROLAP (Relational OLAP) ,二是多维数据库存储即MOLAP (Multidimensional OLAP) ,三是关系数据库和多维数据库的混合型存储[2]。第三种模式在国内已经开始广泛应用,但还存在存储效率低,访问权限难以控制等问题。
目前,我国很多商业银行都尝试构建了应用于某一方面的数据仓库系统,数据仓库的构建几乎都是基于ROLAP来实现的,绝大多数是用Microsoft SQL Server完成的。对于汇总数据和历史数据的访问及访问速度的要求,还是有些欠缺。
2 一种高性能的技术--HOLAP
根据OLAP的自身特点,它主要就是对用户请求的快速响应和交互式的操作,多维分析则是OLAP的核心所在。OLAP系统在具体实现时首要解决的是如何存储数据的问题。数据的存储有三种方式,即ROLAP、MOLAP和HOLAP (Hybrid OLAP) ,HOLAP是对他们的良好折中。它得益于ROLAP较大的可伸缩性和MOLAP的快速计算。MOLAP的查询性能很好,它可以很好地解决对于历史数据和汇总的查询问题,它的分析能力很好,这正是数据仓库应用系统所应有的特点。MOLAP多数用于存储那些历史的、聚合的数据,当要查询一些细节数据时,就要选择ROLAP这样才能满足需求,更好地完成查询分析任务。
3 改进后的存储模式
在考虑到实际应用和用户需求的基础上,可以基于关系数据库和多维数据库共同来搭建企业级的数据仓库。实现的方法是把聚合的、历史的数据存储在多维上,明细数据存储在关系数据库中,各取所长,达到事半功倍的效果,基于这两种存储方式实现的即HOLAP。
与之前的应用模式不同的是数据平台的数据仓库是用关系数据库和多维数据库共同组建的。关系数据库选择了由IBM DB2 UDB完成,多维数据库则选择了Essbase/DB2 OLAP Server来完成。数据展现平台用Java实现,基于MVC设计模式实现,并将该平台分为Web层、服务层和数据访问层。由于要访问不同的数据库系统,所以要区别对待,访问关系数据库数据则采用开源的Ibatis框架,将各种SQL语句存放在配置文件中进行统一维护通过JdbcDao访问关系数据库;对于多维数据库数据, DB2 OLAP Server的多维数据集访问的脚本语言的接口也提供了Java接口,由于数据展现平台是用Java开发的,所以我们可以直接访问多维数据库。但是在实践过程中证明,通过这种方式访问多维数据库的速度是相当的慢,之后尝试使用我们最熟悉的C,采用Java原生接口来实现对多维数据库的访问,它是通过Essbase/DB2 OLAP Server的C接口访问多维库的。使用C后效果则截然不同,如果将采用Java访问多维库的系统称为原有系统,将采用C访问多维库的系统称为改进系统。
4 结束语
本文对于我国的数据仓库的应用模式提出了将历史的、聚合的数据存放在多维库中,将细节数据存放在关系库中的存储方式,并采用C接口访问多维数据库,采用Ibatis框架访问关系库的改进方案。改进后更适合于对汇总数据及历史数据的查询,并提高了数据访问速度。
摘要:从分析国内外的数据仓库应用现状入手, 指出银行在应用数据仓库过程中存在的存储效率低, 访问权限难以控制等问题。然后基于对数据存储的分类, 提出关系数据库和多维数据库混合存储的方法, 测试表明该系统达到节省存储空间和提高访问速度的效果。
关键词:数据仓库,商业银行,联机分析处理
参考文献
[1]颜石专, 李战怀.基于数据仓库和OLAP的商务决策系统[J].微电子学与计算机, 2006, 23 (2) :64-67.
通用数据安全访问模型 篇5
本文提出了一种通用数据安全访问的模型CDSA, 它实现数据的抽象访问与同步, 帮助工程师们管理好系统软件的数据, 保持数据的一致性和完整性。基于此模型可以实现远程过程调用 (RPC) , 其机制、原理和标准的RPC调用以及分布式计算原理完全相同, 不同之处在于这种调用方式可用于跨进程、跨系统、跨计算机边界、跨平台等复杂的环境中。
1 通用数据安全访问模型
首先, CDSA模型把各种系统软件对公用数据的访问划分为高级访问 (调用者需要理解数据以及各参数和返回的含义) 和原始访问 (调用者无需理解数据以及各参数和返回的含义) 。高级访问针对数据应用, 原始访问针对数据传递过程。
(1) 原始接口:输入和输出为数据流, 不理解协议本身以及任何应用数据结构, 供通讯使用。
(2) 高级接口:输入和输出为实际应用数据, 理解协议本身以及应用数据结构, 供业务使用。
其次, 考虑到一般的系统软件中数据的传递过程分为进程组内部数据传送 (交换) 和远程数据交换, CDSA模型规定进程组内的数据传送通过消息队列进行通讯, 在进程组外的数据传送, 主要通过SOCKET进行通讯。CDSA模型还约定这两种数据传输均通过原始模式进行, 不需要理解数据的含义以及输入和返回。
(1) 对于本地应用进程 (服务器进程) , 通过消息队列和主进程进行通讯, 达到数据读写的目的。为什么这样处理呢?主要是因为CDSA模型支持保存复杂的数据结构, 而共享内存只能适用于简单的数据结构, 如果采用复杂数据结构, 必须实现空间管理, 这非常复杂且可移植性不强。
(2) 对于其他进程, CDSA选用SOCKET作为通讯的手段, 通过抽象和复用代码等方法完成完整的数据通讯和交换过程。既达到RPC的效果, 又降低系统复杂程度, 同时满足了高效数据通讯的需求。
(3) CDSA模型规定, 服务器启动后, 主进程负责将全部的数据加载到内存, 主进程有义务通过消息队列或SOCKET等方式为其他服务进程 (包括远程管理进程、客户端进程) 提供数据共享, 并惟一直接操作数据库, 以维持数据的统一性。
(4) 如果系统软件有独立的远程管理进程, 由于多次远程读取数据需要耗费大量的带宽和时间, 所以CDSA模型规定管理端进程与服务端连接后, 首先下载并且维护一份和远程服务端一致的数据, 如此一方面保证本地数据和服务器数据的一致性, 一方面降低数据读取的消耗。
(5) CDSA为了保证数据的一致性, 采用了读取共享、写入独占的方式。具体来说, 本地应用进程在系统启动后自动获取数据库的修改权限, 第一个连接进入的管理进程可以抢占该写入权限, 直到该进程退出后, 如果系统中已经存在有一个管理连接, 后连接进入的进程将只能获取读取的权限, 并不能剥夺第一个管理进程的写入权限。
最后, CDSA模型定义数据访问的触发 (回调) 机制, 用于在设置变更或读取的状态下做出某种响应 (如配置系统、数据同步传递、数据重读、数据更新等) 。
2 CDSA模型的实现
CDSA模型存取的数据可以是数据库, 可以是配置文件、系统环境等。对数据库的操作没有定义专门类, 需要各系统软件自行考虑。对配置文件、系统环境等的存取, CDSA模型定义了实现IBoot DBIPlugin接口的Csvr Cfgtor类。通过这个专门类去处理实际的数据存取, 该专门类还支持调用IAdvBootDBI接口, 以便远程重新获取数据、远程修正数据。
CDSA模型还定义了两个实现IRaw Boot DBI或者IAdv BootDBI接口的类, 用于完成对数据的存储和数据格式的转换。
(1) 数据直接访问类
完成数据的直接访问, 对数据库进行直接操作, 通过IBoot DBIPlugin接口调用Csvr Cfgtor类来完成数据的存储以及存储的事件通知。
该类实现了IRawBootDBI、IAdvBootDBI这两个接口。其他进程可以通过这两个接口调用来存取数据。
(2) 数据中继访问类
完成数据的转换, 可以将复杂的数据结构转换为标准的数据流, 或者将数据流还原成复杂的数据结构。这些数据流包括两个部分:输入流和输出流, 通过这两个部分完成参数的传递和返回值的获取。
该类实现了IAdvBootDBI这个接口, 支持调用其他类的IRawBootDBI接口去传递、存取数据。其他进程可以通过这两个接口调用来存取数据。
(3) 客户端SOCKET类 (数据通讯模块)
数据通讯模块本身即为一个基于IRawBootDBI的对象, 他们完成的工作即将输入流送入其他服务进程或者服务器端, 然后等待其他服务进程或者服务器端返回一个输出流。一个CBootDBRelay的对象可以成功地将高级的数据转换为 (序列化) 流格式, 然后调用通讯模块的接口IRawBootDBI, 等待通讯模块完成数据请求后, 将返回流还原成 (反序列化) 高级格式, 返回给调用者。
数据通讯模块对数据的序列化与反序列化是成对出现的, 如果有多对序列化的格式, 就要分配协议号以示区别, 协议号本身被序列化成流格式的第一个字节, 反序列化时先读取第一个字节, 了解序列化的格式, 再对后续的流格式进行反序列化。
3 CDSA模型中数据访问的流程
模型中涉及配置数据的各进程对数据访问的逻辑示意如图1。
(1) 数据服务进程的直接数据访问
数据服务进程负责数据库的管理, 是数据的直接处理进程, 该进程通过消息队列实现数据的对外共享。
如图1所示, 在请求到达后, 该进程通过CBootDBDirect访问数据, 并同时完成系统配置:[消息队列服务器端]->IRawBootDBI (CBootDBDirect) ->DB (->IBootDBIPlugin (CSvr Cfgtor) ->系统配置) 。
(2) 本地进程间的数据访问
本地应用进程是本地的数据消费者之一, 该进程不能直接访问数据库的数据, 但可以通过高级访问接口存取数据:[本地应用进程]→IAdvBootDBI (CBootDBRelay) ->IRawBootDBI (消息队列客户端) 。其过程如图2所示。
(3) 远程进程间的数据访问—服务端
远程管理进程的服务端是数据的转发层, 对外衔接网络, 对内衔接数据服务进程。
[远程管理进程的服务器端]->IRawBootDBI (消息队列客户端) 其过程如图3所示。
(4) 远程进程间的数据访问-客户端
如图4所示, 远程管理客户端进程为数据的消费进程, 存在两种访问数据库的方式:
本地缓存数据:[管理]->IAdvBootDBI (CBootDBDirect) ->CacheDB
远程数据:[管理]->IAdvBootDBI (CBootDBDirect) ->IBoot DBIPlugin (Csvr Cfgtor) ->IAdvBootDBI
(CBootDBRelay) ->IRawBootDBI (SOCKET客户端)
4 CDSA模型的应用
图5说明了一个无盘站引导服务系统使用CDSA模型进行数据访问的实际情况。
说明:
(1) 图中数据守护进程不但是主无盘站引导服务软件的主进程, 还是数据服务进程, 它直接进行数据访问, 通过消息队列实现数据的对外共享。
由于系统软件本身功能不同, 操作的数据类型肯定也不同, 这就要根据实际需要去定义具体的实现类。图5中定义了无盘配置数据, 系统数据, 系统配置数据, 缓存数据等类。
(2) 图中DHCPBINL服务进程和TFTP守护进程对应了本地应用进程。
D H C P B I N L和T F T P守护进程是本地的数据消费者, FTFP还会fork出新的进程进行数据消费, 这些进程通过高级访问接口存取数据。
(3) 图中的管理服务器进程对应远程进程的服务端
管理服务器进程是数据的转发层, 对外为管理工具提供数据, 对内向数据服务进程取得数据。
(4) 图中的管理工具进程对应远程进程间的客户端
管理工具进程是数据消费进程, 刚建立连接时, 把数据从服务端请求到本地缓存, 以后的操作在缓存内进行。操作完成后, 如果缓存数据被修改过, 就调用CsvrCfgtor类的IBoot DBIPlugin接口回写数据。也可以通过IBoot DBIPlugin接口从远程取得最新的数据。
摘要:本文提出了一个称为CDSA的数据安全访问模型, 该模型可以被用在各应用软件中保证服务端与客户端数据的一致性, 也可以用在本地进程间通信、远程进程间通信等领域, 保证共享数据的一致性。
关键词:数据存取,数据一致性,回调
参考文献
数据访问接口 篇6
软件开发中,数据库往往是信息系统的基石,即便是最简单的信息系统中都会涉及到数据的持久性和数据的访问。而JAVA作为一种可以撰写跨平台应用软件的面向对象的程序设计语言,被广泛的应用与当前的各种信息系统开发。但对于用Delphi及.Net开发过应用系统的开发人员大多都使用过数据集组件来连接数据库并操作数据库表数据的功能。这些功能使用很方便,同时有强大的数据操纵能力,可以对各种数据库进行统一操纵,数据组件会根据不同数据库的语法要求自动生成新增(insert)、修改(update)及删除(delete)等DML语句对数据库记录进行操纵。在JAVA环境中没有与之对应的数据集组件,JAVA主要依靠JDBC接口[1]来操作数据库数据,但JDBC属于一个较低层次的接口,虽然功能强大但需要较多的编程量,所以使用并不方便。有些JAVA持久层框架[2(]如Hibernate)基于JDBC做了一些包装并提出了OR映射的概念,通过操作对象的方式间接操作关系数据库中的记录,由OR映射框架自动将对象的新增、修改、删除等操作自动转换成特定关系数据库的DML语句。这种方式在JAVA世界中应用很多。但OR映射需要许多手工配置,且在涉及大数据量且表间关系复杂的情况时容易出现性能问题。并且对习惯SQL及数据集操作的程序员来说,对于对象的操作不如对记录行的操作直接和灵活。针对这些框架的问题,IBM和BEA设计了SDO(Service Da-ta Object)[3],方便了数据访问和操作。该文借鉴了SDO的方法及Delphi、.Net数据集的设计理念[4-7],应用软件设计模式方法[8-9],结合实际的开发经验,设计一种基于JDBC的JAVA通用数据集数据访问框架。
2 总体设计
整个框架设计的目标包括:
1)通用性,实现一种通用的关系数据库访问机制,能够独立于数据库,采用一致的数据集的方式访问及操作各种关系数据库。
2) 方便性,充分利用数据库的元数据功能,无需配置就能根据数据集的状态,自动生成某种数据库的DML语句,尽量减少编程量。
3) 扩展性,能支持现存或未来出现的各种关系数据库系统。
设计思路:
为达到以上设计目标,考虑将通用数据集框架主要分为2个大的部分来实现:
第一部分是独立于数据库的,这一部分里,所有操作的实现对数据库来说是完全中立的,无需考虑数据库的差异性;
第二部分是数据库相关的,这一部分里,所有操作的实现都要考虑特定数据库的差异,并通过接口及抽象类使这种差异对第一部分屏蔽。
3 独立于数据库的部分设计
独立于数据库的部分主要是数据表(Data Table)对象,其中包括数据列管理器(Data Columns)、数据列(Data Column)、数据行管理器(Data Rows)、数据行(Data Row)、数据字段(Data Field)等对象。对于开发应用开发者来说,主要是对这些部分的对象进行操作。以下对这些对象的功能进行介绍。
3.1 数据表对象(Data Table)
Data Table数据表,实现IData Table接口,负责在内存中保持及操作数据集,并自动记录数据集及记录行的状态等信息。
IData Table接口定义如下:
数据表(Data Table)对象主要依靠所包含的数据列管理器(Data Columns)、数据列(Data Column)、数据行管理器(Data Rows)、数据行(Data Row)、数据字段(Data Field)等对象来实现数据集的操纵功能。
3.2 数据列管理器对象(Data Columns)
数据列管理器对象(Data Columns)实现接口IData Columns接口,是管理数据列对象(Data Column)的容器。
IData Columns接口定义如下:
3.3 数据列对象(Data Column)
数据列对象(Data Column)实现接口IData Column接口,主要记录表字段的属性信息。
IData Column接口定义如下:
3.4 数据行管理器对象(Data Rows)
数据行管理器对象(Data Rows)实现接口IData Rows接口,是管理数据行对象(Data Row)的容器。
IData Rows接口定义如下:
3.5 数据行对象(Data Row)
数据行对象(Data Row)实现接口IData Row接口,主要用于管理记录行。
IData Row接口定义如下:
3.6 数据字段对象(Data Field)
数据字段对象(Data Field)实现接口IData Filed接口,主要用于管理数据字段。
IData Filed接口定义如下:
public interface IData Field {public IData Table get Table();public IData Row get Row();public IData Column get Column();public Object get Value() throws Exception;public void set Value(Object value) throws Exception;public boolean is Null() throws Exception;public boolean is Empty() throws Exception;public boolean is Change() throws Exception;}
4 数据库相关的部分设计
数据库相关的部分主要包括数据源(Data Source)、元数据(Meta Data)、数据适配器(Data Adapter)及命令生成器(Data Command)三个对象。以下对这些对象的功能进行简要介绍。
4.1 数据源对象(Data Source)
数据源对象需实现接口IData Source,主要封装了JDBC中的数据库连接对象(Connection)。负责连接到数据库,提供数据库级别的事务控制,并根据数据库的类型创建元数据(Meta Data)对象、数据适配器(Data Adapter)对象及命令生成器(Data Command)对象。
接口IData Source定义如下:
IData Source接口最主要的目的就是管理数据库连接及本地事务控制。各类数据库都应实现该接口,在现实中一般会提供一个实现IData Source接口的抽象类Data Source,该类将实现一些数据源对象的公共操作,然后特定数据库的数据源类则继承Data-Source抽象类,并实现其特定的功能。如:Oracle的数据源类Oracle Data Source,Sql Server的数据源类Sql Server Data Source等。
4.2 元数据对象(Meta Dat)
段、视图、存储过程、触发器等)。元数据对象,实现IMeta Data接口,负责提供统一格式的数据库元数据。可由此对象获取当前数据库中的所有对象(如:表、字
IMeta Data接口定义如下:
接口最主要的目的就是获取表及其字段的信息,表各类数据库都需实现这个接口。在现实中一般会提供一个实现IMeta Data接口的抽象类Meta Data,该类将实现一些元数据的公共操作,然后特定数据库的元数据类则继承Meta Data抽象类,并实现其特定的功能。如:Oracle的元数据类Oracle Meta Data,Sql Server的元数据类Sql Server Meta Data等。
4.3 数据适配器对象(Data Adapter)
数据适配器对象,实现IData Adapter接口。特定于某种数据库,负责实现对数据库的读写操作,能够从数据库加载数据到数据表,以及执行DML语句,将数据的变化写入数据库。
IData Adapter接口定义如下:public interface IData Adapter {
IData Adapter接口最主要的目的就是实现对数据库的读写操做,表各类数据库都需实现这个接口。在现实中一般会提供一个实现IData Adapter接口的抽象类Data Adapter,该类将实现一些数据适配器对象的公共操作,然后特定数据库的数据适配器类则继承Data Adapter抽象类,并实现其特定的功能。如:Oracle的数据适配器类Oracle Data Adapter,Sql Server的数据适配器类Sql Server-Data Adapter等。
程序员一般不需直接使用数据适配器对象,在Data Table对象需要加载数据(如调用open Sql方法)或写入数据(如调用execute方法)时,Data Table内部会使用Data Adapter对象来读写数据,并将数据填充到Data Table对象中,同时更新数据的状态。
4.4 命令生成器对象(Data Command)
命令生成器对象,实现IData Command接口。特定于某种数据库,根据数据表的变化状态生成DML语句。
IData Command接口定义如下:
IData Command接口最主要的目的就是生成更新数据所需的SQL语句,主要是Insert、update、delete语句。各类数据库都需实现这个接口。在现实中一般会提供一个实现IData Command接口的抽象类Data Command,该类将实现一些命令生成器对象的公共操作,然后特定数据库的命令生成器类则继承Data Command抽象类,并实现其特定的功能。如:Oracle的命令生成器类Oracle Data-Command,Sql Server的命令生成器类Sql Server Data Command等。
程序员一般不会直接使用命令生成器对象,在Data Table对象中的数据新增、修改、删除后,在调用Data Table对象的执行方法时,Data Table内部会使用Data Command对象来自动生成SQL语句。
5 使用样例
在java环境下,使用本框架来访问关系数据库,本身无需任何配置。只需在J2EE应用服务器上配置好JDBC数据源,使用标准的SQL语言即可访问任何数据,更新数据时无需拼凑SQL语句。如下所示,程序员只需在服务器上配好JDBC数据源,使用该配置的jndi Name即可操纵数据。
IData Source ds = Oracle Data Source“(jndi Name”);//创建一个Oracle数据源
ds.open(false);//打开数据源,并设置为不自动提交事务
try {
摘要:考虑使用数据集组件来连接数据库并操作数据库表中数据在软件开发中的方便性,其具有强大的数据操作能力,在很多开发环境中都提供了相应的数据集组件,但在JAVA语言的开发环境中没有与之对应的数据集组件,一般采用JDBC接口或者OR映射的方式完成数据的操作,其中JDBC接口因其属于较低层次接口需要大量的编程,而OR映射在涉及复杂数据关系及大量数据访问是容易出现性能问题,在借鉴其他环境中数据集的设计理念的基础上,以实际开发要求为目标,设计一种基于JDBC封装的JAVA通用数据集数据访问框架。
银行海量数据访问优化途径 篇7
海量数据库系统是一个可以动态调整的系统, 它的内存区域的大小、服务器进程的响应模式、后台进程的多少和种类都可以根据需要进行调整。这样一个可以动态扩展的数据库系统为不同的应用规模、软硬件平台提供了一个表现的空间, 它可以让不同的系统在不同的平台上发挥最佳的系统性能。同时, 也正是这种灵活性, 为银行海量数据访问的性能优化带来了一定的挑战。
一、数据访问优化的基本思路
银行海量数据访问优化是银行数据大集中后的一个重要研究课题。它将应用系统的数据访问任务在应用软件和DBMS之间作最优分解, 采用一定技术对大型数据库的数据结构设计、参数调整和数据访问方式等3方面优化进行有机结合, 从而有效减少搜索空间, 同时提高数据访问的效率, 完成数据访问优化工作。同时在数据库管理层次, 可以根据不同交易对数据访问的特点, 进行数据库的配置和优化设计, 充分发挥数据库管理数据的优势。如果两类数据库存放在不同的物理主机上, 可以发挥多主机并行处理的最大优势。在应用程序层次, 进行联机交易处理时, 严格控制每笔交易的处理时间, 杜绝其它业务处理进程 (如大数据量查询交易和长事务交易等) 对联机交易处理的影响, 使联机交易类数据库保持最小的数据集合, 提高交易响应速度, 便于对数据进行快速的联机备份。应该最大可能地实现7×24小时不间断业务, 日终、季末、月末、年末的批量处理尽量不要影响联机交易业务持续进行。数据访问优化的基本思路如下所述。
(一) 减少无关和重复的计算
采用适当的数据访问语句, 减少无关的数据运算和操作运算。针对影响重复计算的原因, 如用户在所提供的规则中对数据的重复计算或在迭代计算中同一事实多次计算等, 改进应用程序逻辑或数据访问算法。
(二) 参数调整
根据软、硬件的资源情况和数据库的实际运行状况, 调整数据库SGA内存区的大小和PGA区的大小, 调整操作系统数据缓冲区的大小、每个进程所能使用的内存大小等参数, 同时可以调整数据库存储过程, 提高系统的整体性能。
(三) 数据分布调整
可以将组成同一个表空间的数据文件放在不同的物理存储上, 即采用数据的分区技术, 调整数据库系统的I/O性能。例如, 银行的户主账表原来设计成一张表, 虽然可以方便程序的设计与维护, 但经过分析发现, 由于数据量太大, 会影响数据的迅速定位。如果将户主账表分别设计为活期户主账、定期户主账及对公户主账等, 并放在不同的分区上, 则可以大大提高查询效率。
(四) SQL语句计算优化
SQL语句运行的时间越长, 占用系统资源的时间也越长。因此, 尽量使用优化过的SQL语句以减少执行时间。比如, 不在查询语句中包含子查询语句, 充分利用索引, 合理进行分组、合并及汇总等。
(五) 连接优化
指数据库中存在的临时关系的优化和长连接优化。前者指数据库系统查询中, 会产生大量仅含少量元组的临时关系, 要尽量减少这种临时关系;后者指逻辑数据模型中常出现一条规则含有多个子目标时, 该规则的计算中所包含的较多数目的连接操作。连接操作是一种十分费时的操作, 在数据库的连接操作中, 尤其是长连接查询中连接操作数目多、搜索空间大, 对长连接最好进行优化。
(六) 并行优化算法
指将并行算法引入逻辑数据模型, 以提高系统的处理效率。对含有递归规则的逻辑数据语言来说, 采用并行策略, 由于存在规则的迭代计算, 上一次计算的结果要作为下一次计算的输入, 这就需要将计算结果在系统间进行多次传递, 即并行计算将带来高额的传递代价, 因此, 需要采取查询并行优化算法减少这种计算结果的传递。
二、数据访问优化主要技术
通常一个基于海量数据的应用优化应在3个阶段有针对性地进行:应用程序开发阶段、应用程序部署阶段、应用程序调整阶段。不同的阶段优化的内容也不一样, 只有做好3个阶段的优化工作, 才能最大限度地使整个应用系统 (软件、硬件、网络) 高性能地运行。
(一) 数据索引技术
使用数据索引可以极大地提高数据操作效率, 特别在联机交易处理时, 尤其应该注重充分发挥数据库管理器利用索引进行数据操作的效率。数据表索引在建表时创建, 但在应用时的使用情况由应用自身决定。通过使用索引定位取代顺序扫描, 能够提高查询速度, 提高数据排序速度, 同时保证被索引字段的唯一性, 当仅仅查询索引字段时, 避免读取记录全部字段内容。但是建立索引后, 插入、修改、删除记录时增加系统的开销, 索引将占用额外的系统存储空间。因此应用开发时, 应该认真设计数据表的索引。
索引的建立原则为:对连接 (join) 字段建立索引, 对于连接操作, 至少对连接表达式的一个字段建立索引, 否则数据管理器要么在连接之前自动建立临时索引进行“sort merge join”或者“nested loop join”, 要么顺序扫描数据表进行“hash join”;对选择性过滤 (selective filter) 字段建立索引;对排序 (order) 字段建立索引;避免对高重复率 (highly duplicate) 的字段建立索引;利用组合索引 (composite indexs) 降低索引重复率;建立组合索引时, 应该将重复率低的字段放在前面, 重复率高的字段放在后面;控制索引字段对比数据表字段不能过长;运用聚集索引 (clustered index) 提高查询速度, 聚集索引的建立将使被索引的表记录在物理存储上严格按聚集索引的顺序存放, 也就是聚集索引记录与数据记录的存储顺序一致, 查询时扫描的数据量较普通索引减少了, 所以对于经常查询, 很少增删的表可以充分利用聚集索引的优点提高查询速度;数字字段的索引查找速度较其他类型字段 (如字符串字段等) 的索引快;一个数据表的索引不应该过多, 索引过多, 数据插入、数据删除、数据修改速度一定程度上会受影响;利用“部分键查找” (partial key search) 提高索引利用率, 例如, 建立在表tab上的一个索引idx (f1, f2, f3, f4) , 当对tab按照 (f1, f2, f3, f4) 或者按照 (f1, f2, f3) 或者按照 (f1, f2) 或者按照 (f1) 条件查询时, 索引idx (f1, f2, f3, f4) 都可以被利用;为了提高索引查询的效率, 索引应该与数据存放在不同的表空间。
(二) 数据分区技术
当创建一个数据库时, 把数据库分成称为表空间 (tablespace) 的多个逻辑区段。为了使大型数据库的管理更方便, 减少数据查询时引起的I/O冲突, 提高查询效率, 可对数据量比较大 (50 000条记录以上) 、访问频繁的数据表进行分区存放, 分区分为以下方式。
1. 范围分区
如果要在某个数据表中存储大量记录, 可能希望将该数据表的行分到多个表空间中。若要按范围划分表的记录, 可使用creat table命令的partition by rang子句, 这些范围确定存储在每个分区的值。例如:
该数据表实现了将数据按季存放在不同的物理表空间。
2. 散列分区
散列分区通过对分区键值执行一个散列函数来确定数据的物理位置。在范围分区中, 分区键的连续值通常存储在同一分区。在散列分区中, 分区键的连续值不必存放在同一分区。散列分区在比范围分区更大的分区集上分配一个记录集, 从而减少了I/O冲突的可能性。创建一个散列分区, 使用partition by hash子句, 例如:
3. 列表分区
列表分区是基于值列表划分行而不是使用值范围划分行。当基于值列表划分表时, 只能在partition by list子句中指定一个分区键值, 不能指定maxvalue作为列表分区值。例如:
将各个省分行的数据按照业务量的大小进行搭配, 均匀地分配到多个物理空间。
4. 混合分区
混合分区是指把散列分区和范围分区结合起来使用, 从而创建范围分区的散列分区。对于非常大的表, 这种组合分区可能是把数据分成可管理和可调整部分的有效方法。例如:
将历史数据根据交易日期按季进行范围分区, 在范围分区内以账号为键值建立散列分区。
(三) 数据库设计和查询优化技术
1. 表的设计
当在表中添加字段时, 应该选择长度最小的数据类型, 这样表在内存中每页可以存储更多的记录。如“姓名”字段一般设置为TEXT类型, 一般长度为10就够用, 则比默认值255要好得多。整型Integer的长度是2, 在使用整型Integer可以解决问题时不要使用Single, Long, Double, Currency, 因为它们的长度分别为4, 4, 8, 8 (都比2大) 。在建立表后一定要建立索引, 可以大大提高查询速度。
2. 压缩数据库
数据库的查询优化是有代价的, 随着数据库的不断扩大, 优化将不再起作用。压缩数据库会改变数据库的状态, 并重新优化所有查询。同时, 随着数据库的增大, 会产生很多碎片。而压缩数据库可以把一个表中的数据写到硬盘中连续的页里, 提高了顺序搜索的速度。
3. 避免多余计算
当查询的结果作为另外一个查询的数据源时, 可能引起查询优化问题。在这个时候第一查询尽量避免大量的计算。如果在查询输出中实在无法避免计算式的话, 尽量把计算式放在最外层, 不要放在最内层。在建立查询时, 仅返回需要的字段, 这样可以节省不必要的开支。如果某个字段不需要的, 在查询语句中不要出现。用SELECT INTO建立工作表, 尤其是结果集用于几个查询时, 尽量使用中间结果表。在查询前做的准备工作越多, 查询速度越快。
4. 分组、合并及汇总
这里要说明的主要是合并, 当你需要把2个表合并, 就是说, 要根据“Customer Name”对2个表进行合并, 要肯定GROUP BY field (Customer Name) 和汇总 (Sum, Count, and等) 的字段是来自同一张表。在合并表时, 尽量使两边的字段都设置索引。这在执行查询时, 查询优化器可以更多地使用sophisticated内部合并策略。如果要在合并中使用表达式约束一个字段的数值, 需要测试表达式放在合并的一侧还是其他地方的速度。在一些查询中, 表达式放在合并关键词join一侧反而比较快。
SQL语句中分组 (GROUP BY) 的字段越多, 执行查询的时间越长。在GROUP BY子句中尽量用aggregate函数来减少字段的数量。在合并之前嵌套GROUP BY子句。如果要合并2张表, 而且只在一张表中分组, 以查询分为2个SELECT语句要快得多。例如:
可改为:
查询1
查询2
5. 使用可优化的表达式
重新构造查询语句, 以便于Rushmore技术可以对其进行优化。Rushmore是一种数据访问技术, 使用可以提高记录集的查询速度。使用Rushmore时, 若在查询条件中使用具体类型的表达式, 查询速度将非常快。Rushmore不会自动加快速度, 必须按照具体的方法修改查询语句, 以便于Rushmore可以优化它们。
使用COUNT (*) 代替COUNT (Column Name) , 因为Count (*) 计算所有的行, Count (Column Name) 计算所有Column Name非空的行。在变量中避免使用LIKE, 由于在查询完成的时候变量的值不确定, 所以无法使用索引, 这样建立的索引就失去了意义, 而且严重制约查询速度。避免LIKE和通配符同时使用, 如果要把LIKE运算符同通配符一起使用, 为了使用索引, 必须把通配符放在后面。避免SELECT子语句和NOT IN同时使用, SELECT子语句和NOT IN同时使用很难优化, 取反嵌套的查询或OUTER JOINs影响很大。
(四) 并行查询技术
随着功能强大的计算机的问世, 可以利用多个处理器来执行事务处理和查询。一个数据库的查询工作可以通过多个相互配合的处理器来完成。在多处理器间分配工作量可以提高事务处理及查询操作的性能。Oracle等大型数据库的并行查询选项 (PQO) 结构允许将几乎所有的数据库操作并行化。可以利用PQO优势的操作包括create table as select, create index, insert, update, delete和全表扫描、索引扫描、排序、大多数查询。数据库所使用的并行程度由这些命令中使用的paraller关键字degree和instances参数决定。并行查询最适合以下的情况。
●通过搜索非常大表 (通常1 000 000行) 来处理访问大量数据的查询。
●处理连接非常大的表查询, 当数以百万行计的表一起进行访问并汇集查询结果时, 使用并行处理所得的效果特别明显。
●处理建立大索引、大容量数据装载、汇总计算以及对Oracle对象间大量数据拷贝等作业。
●处理在SMP (对称多处理器) 或MPP (大规模并行处理) 群和聚合 (多个机器一起工作, 访问同一组盘和主数据库) 的机器上的查询。
●处理存放在多个数据文件且在不同盘驱上的数据查询。
●对于CPU工作明显不足或间断使用CPU的机器处理。一般是按平均利用率不低于40%来检测CPU的使用效率。
●处理需要大量辅助内存的工作, 比如分类的查询。
●应用系统开发人员应与数据库管理员协同工作, 合理利用资源, 以保证并行处理的进行。
三、海量数据访问优化技术发展及展望
计算机技术发展日新月异, 数据访问优化技术也层出不穷, 当前的优化技术必须具有一定前瞻性, 不但要满足当前的应用要求, 还要考虑未来的业务发展, 同时必须有利于扩展或增加应用系统的处理功能, 同时对数据访问优化技术发展方向, 也要作必要的了解和有益的探讨, 为数据大集中时代数据的更好利用不断拓展途径。目前, 数据访问优化最新技术有以下几个方面。
(一) 逻辑数据语言
采用逻辑数据语言、逻辑数学模型和递归查询计算模式, 在扩大数据库的查询功能和提高数据库的推理能力方面发挥重要作用。如逻辑数据语言可以表达递归查询, 这是关系数据语言所不具备的。它通过构造函数符号的引入来表达复杂对象, 突破了关系数据语言1NF的限制, 同时克服了关系数据库中存在的阻抗不匹配问题。逻辑数据语言及模型具有说明性语义和较强的语义表达能力, 而且采用基于规则的表达方式, 十分符合人的思维方式, 尤其是近年来通过对逻辑数据模型及其计算语义、演绎数据库的各种递归查询算法及计算模式进行大量研究, 数据库的理论和实践方面已取得较大的进展, 并越来越适合用来开发各类基于决策的应用系统。然而, 作为智能数据库初级阶段的演绎数据库迄今尚停留在试验和原型化阶段, 随着进一步的技术进展, 商品化的演绎数据库和知识库系统将问世。
(二) 数据感知的调度
任务负载调度器是网络应用系统中数据访问的一个重要组件, 它通常在把作业分发到分布式数据库上, 进行执行时并不考虑数据的位置。只有在提供最好的数据访问性能的资源上执行作业才更有意义, 因此当前发展的一种趋势是, 调度器正在开始考虑所需要的数据的位置。这需要采用一些方法来将所需要的数据 (输入或输出) 及其位置关联到给定的可执行文件或作业上。网络感知应用程序有望成为一种新的概念, 其中应用程序能够了解网络的状态, 从而可以适应不同的环境来达到可接受且可预测的性能。由于分布式数据库的网络会不断变化, 在应用程序中应用网络感知方面的智能就变得有意义。这种方法的问题是采用什么编程模型以及能够实现何种程度的简化, 从而让应用程序开发人员可以简单地在自己的应用程序中集成网络智能。
(三) 智能检索
智能检索指用AI技术解决大存储容量数据库的优先存取问题, 它通常由AI和数据库2种技术的有效结合来实现, 亦即根据智能数据库或知识库中的事实和知识演绎出正确的答案, 进而推理, 以实现对数据库的智能检索。同时将含有函数项的一阶谓词逻辑用关系演算来表达, 并使其具有较高的计算效率。目前, 引入简单的函数项已不能满足新应用领域的需求, 如现已提出将集合引入逻辑数据语言以及将面向对象数据库和演绎数据库相结合等优化算法与途径。通常, 实现智能检索, 数据库系统应具有以下功能。
●能理解自然语言, 允许用户直接用自然语言提出各种询问。这通常需要引入AI中的自然语言理解技术, 通过建立基于自然语言或类自然语言的人机接口来实现。
●具有推理能力, 能根据存储的事实和知识来推理、演绎出所需的答案。
●系统拥有一定的常识性知识, 以补充学科范围的专业知识, 并能根据这些常识, 演绎出基于一般询问的某些答案来。智能检索涉及自然语言用户界面接口、逻辑演绎算法和语义数据模型等方面的研究, 近年来在这方面已有所突破。
参考文献
[1]唐汉明, 翟振兴, 兰丽华.深入浅出MySQL:数据库开发优化与管理维护[M].北京:人民邮电出版社, 2007.
[2]牛新庄.DB2数据库性能调整和优化[M].北京:清华大学出版社, 2009.
数据访问中间件研究 篇8
随着计算机技术的飞速发展,各种各样的应用软件需要在各种平台之间进行移植,或者一个平台需要支持多种应用软件和管理多种应用系统。软、硬件平台和应用系统之间需要可靠和高效的数据传递或转换,使系统的协同性得以保证。
为了解决分布异构问题,人们提出了中间件(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.