说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

提高客户机/服务器应用系统性能的一些方法-Delphi资料

HTML文档下载 WORD文档下载 PDF文档下载
提高客户机/服务器应用系统性能的一些方法-Delphi资料

摘 要 客户机/服务器的应用逻辑设计是否合理

直接影响到客户机/服务器方式应用系统的处理性能。本文以Oracle 7服务器为平台提出一些方法

以确定如何划分应用逻辑

使客户机/服务器应用系统有较高的处理效率。

关键词 PL/SQL 触发子 客户机/服务器

一、问题的提出

80年代末到90年代初

许多应用系统从主机终端方式、文件共享方式向客户机/服务器方式过渡。客户机/服务器系统比文件服务器系统能提供更高的性能

因为客户机和服务器将应用的处理要求分开

同时又共同实现其处理要求(即"分布式应用处理")。服务器为多个客户机管理数据库

而客户机发送请求和分析从服务器接收的数据。在一个客户机/服务器应用中

数据库服务器是智能化的

它只封锁和返回一个客户机请求的那些行

保证了并发性

使网络上的信息传输减到最少

因而可以改善系统的性能。在客户机/服务器系统中

应用的处理是分布在网络上的

所以在设计客户机方数据库应用程序时

若把过多的负担加在网络上

没有充分利用数据库的存储过程

没有把网络访问最小化

结果是应用程序要执行过多的网络I/O

使网络饱和

从而降低了整个系统的性能。要开发好的客户机/服务器应用系统

必须搞清楚如何在组成系统的各部分之间分布应用功能。

本文提出一些方法来确定客户机/服务器数据库系统中哪些功能应放在哪里实现。客户机应用程序主要侧重于用某种方便用户的方式表示和(或)分析数据。开发客户机应用程序时

网络传输量是应重点考虑的问题之一。应注意应用程序如何向数据库服务器发送信息或从数据库服务器接收信息以及发送和接收多少数据。通常客户机/服务器系统上网络I/O是应用程序性能的瓶颈

一个应用程序引起的网络上I/O越少

应用及整个系统的运行情况越好。要从一个客户机应用中消除不必要的网络传输量

需要理解和利用SQL命令及数据库上的其它一些特征。

二、一个例子

下面

我们来考虑这样一个例子:一个数据库应用程序完成显示每个销售订单的所有行的金额合计。

一般算法分两步:

(1)每行项目中数量乘以单价=金额;

(2)把每行金额累加。

第一种方法:

每次一行

然后

用应用程序累加

SELECT orderid

quantity

unitprice

FROM item

stock

WHERE stock.id=item.id

ORDER BY orderid

结果为:

orderid quantity unitprice

1 1 6.03

1 1 21.4

1 4 87.12

2 2 8.97

2 3 21.4

采用这种方法

若业务量增大

则其网络的传输量相应增大。

第二种方法:

让数据库服务器进行计算

然后只把结果从网上取过来

即:

SELECT orderid

SUM(quantity *unitprice)

FROM item

stock

WHERE item.id=stock.id

GROUP BY orderid

ORDER BY orderid

结果为:

orderid SUM(quantity*unitprice)

1 265.87

2 82.14

如上所示

由于第二种查询使用了一个SQL的组合

即一个SQL函数(SUM)以及一个GROUP BY子句

让服务器来执行计算。因此

只需从网上传输较少的数据。

这个简单例子说明:

1.在客户机/服务器环境中如何用SQL函数减少网络上的传输量;

2.开发人员必须完全熟悉SQL才能做出好的客户机数据库应用程序。

三、提高性能的方法

下面我们介绍几种提高性能的方法。

1.使用完整性约束

所有客户机应用程序必须遵循一系列预先定义的数据完整性规划及业务规则

以保证所有数据库数据是合法的。可以使用两种方法来实施一个简单的完整的规则:让应用程序执行完整性检查;使用Oracle7的完整性约束。

(1)让应用程序执行完整性检查

例如

任何一个订单( orders)的顾客号必须是客户机表( customer)中的顾客户机号。这是一个最简单的引用完整性

可以用应用程序本身执行完整性检查。

DECLARE

flag INTEGER;

BEGIN

SELECT id INTO flag

FROM customer

WHERE id=3

FOR UPDATE OF id;

IF SQL%FOUND THEN

INSERT INTO orders

VALUES(5

3

SYSDATE

null

null

'F');

-- 其他应用逻辑

COMMIT;

END IF;

END;

这个过程只是在应用程序内部用于实施引用完整性规则的一种方法

但可以看出

为实施一个简单的完整性规则

应用程序要花大量的时间通过网络来请求和发送数据。(2)使用Oracle 7的完整性约束

CREATE TABLE orders

(

id INTEGER PRIMARY KEY

customer id INTEGER NOT NULL REFERENCES customer

orderdate DATE NOT NULL

shipdate DATE DEFAULT SYSDATE

paidate DATE DEFAULT SYSDATE

status CHAR(1) DEFAULT ‘F' CHECK(status IN(‘F'

‘B'))

);

实施简单完整性规则(如引用完整性)的更好方法是使用Oracle 7的完整性约束。该方法的好处是明显的:

①定义一个表的同时

方便地建立完整性约束

开发人员不需为实施一个简单的完整性规则而创建测试、排错复杂的数据完整性逻辑

提高了工作效率;

②用集中化的方法实现完整性规则;

③无需任何网络I/O

客户机/服务器系统也就不会因为网络访问而降低性能。

2.使用数据库触发器

应用程序经常需要实施复杂的业务规则

这些规则无法用完整性规则表示

所以最好不要按照常规思路在应用程序中实施完整性规则;而是用数据触发子(triggers)来实施业务规则。其优点是容易创建

可集中进行规则实施

避免不必要的网络I/O。利用数据库触发子可以使其他一些应用程序集中化和自动化。比如

计算item 表中的total 列的值是所订零件的数量乘以零件的单价

而零件单价存放在stock表中

当插入一个新的行项目时

应用程序计算total列的值有两种方法。

方法一:让应用程序通过SQL命令执行这个操作

DECLARE total REAL;

BEGIN

SELECT unitprice*quantity INTO total

FROM stock

item

WHERE id=4;

INSERT INTO item VALUES(...);

END

应用程序通过网络发出请求

取得某一些零件单价

然后插入这个含有该行计算值(tota l)的行。修改item表中某行数量值

应用程序需要包含相似的逻辑来计算。此外

多个用户还可能同一时刻插入和修改订单。总之

用这种方法来计算total 列时会在客户机/服务器系统中产生大量的网络传输。

方法二:用数据库触发子

从一个行项目自动导出total 的值

当用户在item表中插入新行或修改quantity时

无需任何网络访问。

CREATE TRIGGER Linetotal

BEFORE INSERT OR UPDATE OF quantity

stockid

ON item

FOR EACH ROW

DELARE

itemprice REAL;

BEGIN

SELECT unitprice

INTO itemprice

FROM stock

WHERE id=:new.stockid;

:new.tolal:=new.quantity*itemprice;

END linetotal;

当创建触发器linetotal后

应用开发人员在编写应用程序时就不需考虑保持total列为最新值的问题

而且网络数据库上所有应用都会因此受益。

3.利用过程和包优化性能

这里主要讨论如何利用完整性约束和数据库触发器把应用逻辑移到数据库服务器中执行以便减少网络I/O

提高性能。

其它类型应用处理逻辑分布到数据库服务器亦可以减少客户机/服务器应用中的网络I/ O

应用程序不必再用包含多个网络操作的SQL语句去执行数据库服务器操作

而是简单且有效地调用存储过程。包是一种用来把多个有关的过程在数据库中封装起来的方法。

下面是用SQL和用存储过程例子的差异:

例如要插入某些行项目的订单

用SQL实现过程:

INSERT INTO orders VALUES(...)

INSERT INTO item VALUES(1

..)

UPDATE stock SET onhand=...

INSERT INTO orders VALUES(...)

INSERT INTO item VALUES(2

..)

UPDATE stock SET onhand=...

INSERT INTO orders VALUES(...)

INSERT INTO item VALUES(3

..)

UPDATE stock SET onhand=...

COMMIT;

要创建一个新销售订单并插入它的三个行项目

应用程序必须用7个不同的的SQL语句来实现

每个语句都要通过网络传输数据

要减少这些SQL语句在客户机/服务器系统中产生的网络传输量

可以创建两个简单的过程来插入订单及行项目。

CREATE PROCEDURE placeorder(custid IN INTEGER) AS

BEGIN

INSERT INTO orders

VALUES(orderseq.NEXTVAL

custid

SYSDATE

null

null

‘F

');

END placeorder;

CREATE PROCEDURE placeitem

(itemid IN INTEGER

partid IN INTEGER

quan IN INTEGER)

AS

BEGIN

INSERT INTO item(id

orderid

stockid

quantity)

VALUES(itemid

orderseq.CURRVAL

partid

quan);

UPDATE stock

SET onhand=onhand-quan

WHERE id=partid;

END placeitem;

应用程序只需简单调用这几个过程。

Placeorder(3);

Placeitem(1

3

2);

Placeitem(2

8

1);

Placeitem(3

9

3);

当一个应用程序调用存储过程时

通过网络发送的数据只有过程调用及参数。本文提出的提高客户机/服务器应用系统性能的方法

主要是采用合理分布处理逻辑于客户机端与服务器端

并充分利用数据库服务器来提高执行速度。该方法的有效性

已在我们开发的多项客户机/服务器应用系统中得到证实。此外

在提高性能的措施和方法中

SQL语句的查询优化问题也不可忽视。综合上述两种方法

才能从根本上提高

客户机/服务器应用系统的性能。

参考文献

1 Steven M.Bobrowski. Mastering Oracle7 & Client/Server

Computing

SYBEX I nc. 1995.

2 Michael J. Corey etc. Oracle数据库性能优化技术

学苑

出版社

1994.

启动控制面板命令大全 -VB资料 VB取得 DOS 环境变量 VB取得并设置双击间隔时间 VB取得磁盘序列号、卷标和文件系统类型 VB取得短文件名 VB取得和设置计算机名 VB取得和设置系统颜色 VB取得计算机名 VB取得目前所有的输入法 VB取得应用所在的目录 趣味撞球——VB应用程序一例 缺省值和可选参数 -VB资料 确定当前 WIN95 的启动状态-VB资料 让TextBox的输入具备overwrite(覆盖)的功能 -VB资料 让密码轻松显示 -VB资料 让文本框输入完后,直接跳入下一行 -VB资料 VB如何编制带有不定个数参数的过程。 VB如何充分扩充VB功能 VB如何传递不固定个数的叁数? VB如何打开和关闭光驱门 VB如何导出收藏夹到文件或者导入文件到收藏夹 VB如何得到磁盘上剩余空间的值 VB如何得到应用程序的资料! VB如何调用chm格式的帮助文件 VB如何调用控制面版中的应用程序 VB如何动态更新数据报表 VB如何改变 NT 预设的打印机? VB如何改变 Windows 预设的打印机 VB如何关闭其他程序 VB如何过滤键盘录入 VB如何获得Windows95已经运行的时间 新年快乐!之五(bigface_guo) 在IDL把接口写在library里和写在外边有什么区别?看例子 什么时候会出现index is read only的错 一个问题,不知道VB能不能实现,大家请进,如果VB不能解决,我就觉得VB不如DELPHI COM高手:关于COM中的内存释放? 请问一下,小弟用W2000有个小问题。小弟有2000做了个路由,方便同一网段的机器上internet,但有个问题,像新浪的搜索用不了,sohu的校友录进不去等等,我改用链接共享后也不行,请问有什么办法可以搞定吗???谢谢 如何才能让输入框自动获得焦点? 祝大家圣诞快乐!新年快乐!送分! 救命呀!怎样把LINUX环境下SYBASE数据库中数据倒入POSTGRE数据库中??????? apache配置问题 asp中调用存储过程,其中传递的一个输入参数为sqlserver 的text型,这个参数该如何写?? 求救高手(关于VC中的cmscomm的问题) 我在网上看数据库课程习题的参考答案,发现许多E/R图下载回来是*.ps文件,请问如何打开? 在win2000系统下,如何让asp文件中显示小数点前的那个零? 为什么有这么一个问题.... 有人愿意收一个一般菜,但又不是很菜的人为徒吗?? 求救VC中的关于串口通信的问题,想请请看,急急急急急急急急急急急 ZDataGrid For VB & VB.Net 如何将界面做成如xp的样子 请教关于游戏平台的问题。。。 今天不是鬼节啊?怎么这么多早就作古的人都出来了? 超级菜的问题(关于WINNT安装)想要分的快进 怎么写dll文件 怎样插入当前时间和日期到Access数据库中 下面为什么出错了? 有人愿意收一个一般菜,但又不是很菜的人为徒吗??? TADOTable如何实现记录定位?——求救! 谁知道怎么让WEBLOGIC中消息驱动BEAN的例子MESSAGE跑起来?.. 請問各位為何javabean在suse linux的調用問題 请问如何在weblogic中设置一个jms topic?. 请教关于游戏平台的问题!! 使用QuickVxD不能生成 .h ,.cpp .mak文件,那里不对? 请问:框架(Frame)为什么不能动态生成两次 ????????????? 在win2k下有人知道ActiveReports报表怎么自定义打印纸张大小 大家讨论一下运算符重载的问题!!!! 位操作问题?欢迎各位朋友讨论! data控件能连接sqlserver数据源么? 有没有办法使重复的值只显示一个,空值不显示也不要占位置?(急呀!!!) 用TURBO C2.0能不能写32位的软件? 如何设置WN98中的硬盘驱动器盘符 SOS pekie 请教啦! 投影仪投出的图像中间部分呈粉红色,是不是投影仪坏了? 在MYSQL中我想修改root密码,可是总报错说user表是read only,如何把只读的属性去掉? 关于开发网络麻将游戏需求的问题。。谢谢。 关于jsp或applet调用本地DLL的问题 在BCB中如何添加自己的类? 关于APPLET从服务器下载图片的问题! 建议下一次改版的时候考虑一下这个问题:CSDN 的很多页面好像用NetScape不能浏览? 我不用IE很多年了, 因为太容易死机 有没有做股票的朋友? 急!!!50分求购一个在程序中实现按下按钮功能的小程序,多谢了 三角形=圆圈+圆圈+圆圈 圆圈+圆圈=80吨 三角形+圆圈=( )吨 14除以47等于多少? 分数与除法的关系:被除数相当于分数的(),除数相当于分数的(),除号相当于(),商相当于()分数与除法的区分;分数是一个(),而除法是一种(). 150道(谁答的多必给好评),只要题. E=MC2是什么意思啊? .在分数除法中,如果商大于被除数,那么除数一定是 爱因斯坦的主要成就是什么? 利润的计算公式 在分数除法中,如果商大于被除数,那么除数一定是什么? 爱因斯坦的能量公式是啥?、 1666667除以24约等于多少yue 填空题:分数中的分子相当于除法算式中的(),分母相当于除数算式中的()20张“海包”贴纸,平均分给5个小朋友,每个小朋友分到它的(),每个人分得()张;如果平均分给4个小朋友,每 圆形+四方形=91,三角形+四方形=63.三角形+圆形=46.求圆形.四方形和三角形各是多少 对E=mc2的理解今天学的这个方程很是不理解,E=mc2中的E是不是物体所包含的所有能量?如果是,那么当物体吸热时,物体的质量并没有变,如果按照质能方程来看,因为质量没变,则E应该不变.可是事 2100年有多少天A 364天还是366天还是C 365天 化简√1-sin^2100° 如何理解E=mc2中单位换算? 下列说法正确与否:1、把一根2米的绳子平均截成5段,每段占全长的5分之2;2、公元2100年有366天 y=-10x²+110x+2100怎么化简 X三次-X-1=0 求X的值X立方-X-1=0 求X的值 数学问题解答把被除数308错写成368,结果商增加了5,而余数恰好相同.求这道除法算式除数和余数? 如何化简 设x-3y+2z=0,试证明x^2-9y^2+4z^2+4xz+2100为定值 小学数学除法中如何取余数特么的都怪倒霉的初中,在初中三年里我基本还没动过余数,不过现在我因为接触了程序,需要一些数学运算,只是该死的初中让我三年都只接触了小数与分数,现在是 圆形+圆形+三角形+三角形+三角形=8.8 圆形+圆形+圆形+三角形+三角形=9.7圆形+圆形+三角形+三角形+三角形=8.8 圆形+圆形+圆形+三角形+三角形=9.7 圆形=()三角形=() 1+x+x^2+x^3+...+x^2005 =0,求x^2006的值 已知一个长方体的长、宽、高分别为(x+5)cm,y cm,(x-5)cm 1、求长方体的表面积 2、当x、y满足何种条件时,不论x,y怎样变化,长方体的表面积始终是一个定值? 为何2月只有28天? 边长分别为6,7,8的三角形的内接圆的半径为 48,61,100除以自然数n(n>1)得到相同余数,问余数是多少 二月为什么只有28天? E=mc2是什么意思 质量守恒定律与质能公式的矛盾根据爱因斯坦的质能公式物质所拥有一定的质量则会拥有一定的能量,所以质量与能量在数值上有一定的比例关系,而在化学变化中往往会产生大量的热量,根据 判断题:1.公元2001年2月有28天.() 2.2100年全年有366天.() 3.边长为2分米的正方形的周长和面积相判断题:1.公元2001年2月有28天.()2.2100年全年有366天.()3.面积单位比体积单位小.()4. 圆+圆+圆+三角形+三角形=6.4,三角形+三角形+三角形+圆+圆=7.1问三角形和圆各是多少? 求2006个1除以13所得的余数 2100年的上半年有( )天,合( )星期零( )天. 麻烦鄂 7200除以210用简便方法怎么算 2003年的第一季度有( )天 上面7个三角形,下面8个圆,是什么成语? 质能守恒定律是不是指质量守恒定律和能量守恒定律已经不单独成立了?考虑到现代科学的思想,不要只局限于经典.虽然我也不知道这个问题是否预示着我仍然受经典的束缚…… 分数除法 再求一个数是另一个数的多少时 怎么算 E=mc2 为什么会这样? 质能守恒是指“质量和能量总量守恒”还是“质量守恒定律”+“能量守恒定律”?有点糊涂...“质能守恒”、“质量守恒”、“能量守恒”是彼此独立的吗?还是存在联系? 爱因斯坦的质能方程阐明质量就是能量这话对吗 如图所示,圆O内切于三角形ABC,切点分别为D,E,F.若AM=7,BC=8.AC=9求AF,BE的长 爱因斯坦的质能守恒定律与质量守恒定律和能量守恒定律相违背不? 根据爱因斯坦质能方程质量越大,能量就越大吗,地面上的一桶水是不是比飞机上的一杯水能量要大?一直不是很理解 解方程:x/2+(4800-x)/3=2100怎么解,仔细! 15×320×2的简便计算是什么? 2100年是( )年,它有( )个星期零 ( )天.2100年是( )年,它有( )个星期零 ( )天.劳动节是几月几日 方块加三角形加圆形等于76,方块加圆形等于54,三角形加圆形等于26,问方块等于多少,三角形等于多少,圆形都等于多少 解方程:x*2+x=2100,求x? 15×2÷15×2四年级简便计算用四年级简便计算写, 圆圈加方块等于45,方块加三角形等于53,三角形加圆圈等于62,圆圈是?,方块是?圆圈是? x-1/2[x-1/2(x-1)]<2/3(x-1) 65+320/(20-15)简便计算 圆圈加方块等于42,三角形加方块等于60,三角形加圆圈等于86,圆圈等于多少?方块等于多少?三角形等于多少? 如何计算二分之一X+三分之一Y=2100 四年级简便运算20*118*15
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn