|
Open Data Services 和Socket
的应用研究
———数据库服务器与应用程序间网络通信接口模块的设计
张 玮
(上海工程技术大学,上海 200336)
摘 要:
在数据库应用系统开发时常遇到的问题是如何合理的设计外部进程访问数据库的时间控制方案,在满足设计要求的响应时间的前提下,把握好系统与网络负载同系统事务响应处理速度之间的平衡关系。但在实际开发过程中对于某些类型数据的响应处理缺乏有效率的解决途径。此类数据采用通常的处理方式往往不能较好地得到解决。基于此,开发了1种由ODS
API和 Socket编程的数据库ESP扩展方法,由应用系统主动查询方式变为数据库系统主动通知或推送的方式,从而提供了1种高效率的解决方案。
关键词:
开放数据服务 数据库 触发器 存储过程
中图分类号:P409;TP393.09
文献标识码:A 文章编号:1007-9033(2004)01-0033-04
1 问题的由来及部分概念和原理简介
1.1 问题的由来
在数据库应用系统的开发中,设计者时常遇到的问题是如何合理的设计外部进程或程序访问数据库的时间控制。对于不同时间分布特征的数据表有不同的设计方案,设计的原则不外乎在满足设计要求的响应时间的前提下,把握好系统与网络负载同系统事务响应处理速度之间的平衡关系。但在实际开发过程中,对于某些类型数据的响应处理缺乏有效率的解决途径。该类数据有2个方面的特征:一是数据表记录的变化事件在时间分布上具有高度随机性,二是对于应用系统响应时间有很高的要求。
此类数据采用通常的处理方式显然不能较好地解决频率控制问题。如果应用系统对数据库的查询频率太高,则加重系统或网络的负担,增加大量无效的系统开销,甚至影响到系统整体的工作效率;而查询频率降低又将导致系统响应时间不能满足设计要求。导致上述问题的关键就在于这种处理工作方式上存在的先天缺陷:数据库系统被动地接受应用系统的查询请求而导致查询的盲目性。
解决这个问题的方法非常简单,即改变应用系统的处理运行模式,由应用系统主动查询,变为数据库系统主动通知或推送的方式(文中所涉及的数据库若无特别陈述,一般指Microsoft
SQL Server)。
1.2 部分概念简介
1.2.1 存储过程
存储过程是存储在SQL服务器上预先编写并且预编译的1组语句,由SQL语句和流程控制语句组成。它的功能包括:接受参数;调用另一过程;返回1个状态值给调用过程或批处理,指示调用成功或失败;返回若干个参数值给调用过程或批处理,为调用者提供动态结果,在远程SQL
Server中运行等。可以把它看成是一段程序或函数,在SQL
服务器中作为数据库对象保存。存储过程的执行是在服务器端而不是客户端。它具有5个方面的特点:一是执行速度快;二是减少网络传输量,加快了系统响应速度;三是存储过程存在如C语言子函数那样的被调用和返回值的方便性,可以接收参数并调用其它过程;四是在开发大型应用程序过程中,可以将一些标准功能逻辑模块作为存储过程放在数据库中,使得模块化程序开发的结构更加清晰,而且易于维护;五是提供了数据访问的一种安全机制。
1.2.2 扩展存储过程(Extended Stored Procedures)
SQL Server 7.0 和 SQL Server 2000 提供了对用诸如 C 或 C#
等编程语言编写的扩展存储过程的支持。这些存储过程对于用户来说,看上去和普通的存储过程一样,也能像普通的存储过程那样被调用和执行。在默认情况下,SQL
Server 7.0 和 SQL Server 2000 装载了一些扩展存储过程,以用来实现多种有用的功能。
扩展存储过程提供了1种数据库开发者通过C/C++/C# 等高级语言开发自己的外部过程,以扩展MS SQL Server
功能的途径。这些过程对使用者而言,看起来就象普通的存储过程一样,并且可以以同样的方式执行,其参数可以传递到扩展存储过程,同时结果和状态也能被返回。
扩展存储过程通过SQL Server,可以动态加载和执行的动态链接库的形式存在,并直接运行在SQL
Server的地址空间。可通过SQL Server的 Open Data Services API函数编写扩展存储过程。
1.2.3 开放数据服务(ODS :Open Data Services)
开放数据服务是1个在服务器Net-Libraries 与基于服务器的应用(程序)的接口。通过它可以开发下列应用:
(1) 用以扩展Transact-SQL 与 Microsoft SQL ServerTM的功能—扩展存储过程。
(2)开发接收和处理从客户段应用发送的Transact-SQL语句的服务器应用(SQL
Server就是1个ODS的应用实例)。ODS 的应用程序接口包含有用于C/C++开发ODS服务器应用的函数调用和宏。ODS运行在服务器端,服务器的
Net-Libraries接收客户端的 TDS包,并传递给ODS。ODS将TDS包转换成事件,然后通过回调API函数传递给服务器应用。服务器应用时使用另一套ODS
API函数将回复返回给SQL 的客户端。SQL Server 是作为ODS的1个应用而实现的。当启动SQL Server时,ODS就被自动启动了。
客户开发的ODS应用的主要类型是扩展存储过程。SQL
Server的这一特性使得可以实现直接用Transact-SQL语句调用C/C++编制的函数。扩展存储过程可以向调用它们的SQL
Server装置建立1个连接,或连接到远程的SQL Server。ESP可以包含绝大多数Microsoft Win32 和COM
应用的特性,并扩展Transact-SQL 的功能。
早期ODS还被用于开发服务器应用,如连接到其它数据库系统的网关。目前这一类应用大多数已经被更新的技术所取代,如:可以支持多种数据库和其它数据源的Database
API—OLE DB and ODBC;在SQL Server 7.0版本中支持引入异种分布式请求,使得Transact-SQL
请求可以从任意OLE DB数据源获取数据,而不需借助特殊的服务器应用;MS DTC允许将事务分布到多个数据库的Windows
NT组件服务,用于运行中间层应用逻辑。
1.3 系统的工作原理
(1) 当数据库对象(数据表)事件,如insert、 update、delete发生时,定义在表上的触发器被触发,从而调用预先定义的存储过程。
(2) 数据库服务器执行存储过程,其中调用到我们开发并在系统中注册的扩展存储过程-DLL模块。SQL
Server将DLL加载到其地址空间,传递存储过程中设置的参数并且执行。
(3)
DLL函数通过TCP/IP协议建立与应用程序的Socket连接,将接收到的参数根据预先的设计传递给应用程序。这样应用程序便可以在第一时间获知数据表的变化甚至直接获取数据。这种方式大大降低了应用系统反复对数据库进行查询的系统与网络开销,提高了系统效率和响应速度。
2 数据库服务器与应用程序间网络通信接口模块的实现
根据系统设计,我们在MS SQL
Server平台下开发了1套SQL服务器功能扩展模块—数据库服务器与应用程序间网络通信接口模块。该系统的编程实现环境有:Borland C++
Builder 5.0、ODS Package和Windows 2000 Server /MS SQL Server
7.0。在系统的开发过程中使用的技术有: C++ Builder环境下DLL的编程,C++ Builder环境下Winsock编程的实现,C++
Builder环境下ODS API的应用编程,扩展存储过程的建立,Stored Procedure 的编程。
我们在MS SQL Server平台上用C++语言,应用ODS API和Winsock
API技术编写数据库服务器与应用程序间网络通信接口动态链接模块。该模块作为SQL Server的扩展存储过程由数据库系统调用,如Trigger
和Stored Procedures。
在模块的设计中,充分考虑到不同系统的应用要求,采用2种Winsock连接方式:面向连接的流方式和无连接的数据报方式。前者数据传输的可靠性高,但相应系统开销大,并且一旦远端的应用程序不能连接时,对数据库系统相关数据表的响应速度影响较大。后者数据发送速度快,但不保证数据到达的可靠性,因此在相对系统设计条件宽松、对数据表响应要求相对高的应用情况下更具优势。
3 开发过程中应注意的一些问题和部分程序片段
3.1 开发过程中应注意的一些问题
(1) 扩展存储过程动态链接库函数的调用方式与不同DLL函数的调用方式不同,区别在于参数的传递与获取方式上。
(2) 编程实现上要使用到<srv.h>和opends.lib库。
(3)
在实际的系统实现上应采取如下设计:编写1个接口函数,负责ODS的参数传递和处理,而其它模块的设计按照常规DLL方式处理,这样可使得系统开发中的实验调试变得直接有效。
3.2 程序片段
3.2.1 ODS API接口函数
其中xp_Send ACK就是我们定义的扩展存储过程名。该触发器在数据表插入新记录时被执行,将记录中的手机号与短信传递到地址为172.xx.xxx.xxx、端口号为xxxx的应用程序。
Application Study Of "Open Data Services"
And "Socket"
ZHANG Wei
(Engineering Technology University of Shanghai, Shanghai 200336,China)
Abstract : Issue that meet when database
application system is developed is how reasonably devise scheme of time
control that outer course call on database.To satisfied its response time
that device need,balance relation of system and net bearing to system
response dealing speed is deal with .But in actual developing process,
response dealing of some type data is not available way. Therefore ,we
must develop a database ESP extended way by program in ODS API and
Socket.By changing from application system initiative inquiring to
database system initiative informing or imparting ,hence a high efficient
scheme is offered.
Key words: Open data service database trigger saving process
____________________________
收稿日期:2003年07月20日
第一作者简介:张 玮(1969-),男,高级工程师,主要从事信息网络管理工作。 |