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

提高客户机/服务器应用系统性能的一些方法-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如何利用程序拉下 ComboBox? VB如何让窗体右上角的X失效? VB如何使Form的背景图随Form大小改变 VB如何使Text文本框的属性只读? VB如何使窗体右上角的"X"无效? VB如何使窗体最小化并消失 VB如何在VB和Delphi中快速实现立体化窗口显示 VB如何在VB中实现绘图区的大十字光标 VB如何在VB中制作不回显的文本框 VB如何制作浮动式窗口 闪烁的Label-VB资料 设定StatusBar的文字成不同的颜色-VB资料 设计一个可中断循环的按钮-VB资料 设置“执行无用户界面”-VB资料 生成一个透明窗体 -VB资料 实现窗体内部的左右移动 -VB资料 实现鼠标移到窗口上时变大,移出窗体时变小(如《东方快车》)-VB资料 实现图片平铺于窗体中-VB资料 使程序的标题条闪烁 -VB资料 使窗口总在最前 -VB资料 使窗体右上角的X按钮失效 -VB资料 VB使用 WIN95 的选择目录对话框 使指定窗口总处于其他窗口之上 -VB资料 通用对话框专辑(全) -VB资料 透明的Form上显示背景透通图 -VB资料 图像在图片框中的滚动 -VB资料 拖动无标题窗口-VB资料 拖动无系统标准标题栏的窗口-VB资料 文本框中光标位置的获得-VB资料 无关联程序时开启“打开方式”窗口 -VB资料 显示 Combo 的下拉条 -VB资料 追加数据 打印数据窗口 送分的菜问题!小弟我第一个servlet程序就没运行起来! 怎么样抓屏,然后把它保存成一文件! 想问一下用过jsp就会的问题!!! 两条sql语句的写法 wltsui(前途未必光明,道路一定曲折!) ,,xxx94x(岁寒三友) ,,jnxulei(石头)近来接分 这个错误怎么改阿,大家帮帮我吧 请问怎样将一个*.DLL文件,翻译成源码,谢谢/ 机器上有两个网卡(2个IP),如何使tomcat在某一个网卡的80口上运行 请问:soure inside 诗作什么的。具体功能是什么? 获取串口后数据的实时曲线绘制 请教WIN CE 与 PC 通过SOCKET进行通讯的问题(紧急) ==>Server.Transfer 和 response.rdirect 有新打开页面和控制ie显示(工具栏、地址栏)的功能吗? 输出是怪码,为什么 錯誤代碼:0x80040E4D,錯誤信息:使用者登入失敗.(ASP中出現此錯誤,VB中是可以的),急!! 请问怎样在SQL中组织一临时表?(立即给分) 关于asp和SQLSERVER2000问题!郁闷之中..... 使用showModalDialog遇到的问题,再线等候!!!!!!!! 我使用jbuilder做的软件系统包括servlet,jsp,applet,打成了war包,可是却始终不能运行applet。 ***内核的networking问题*** 讨论:大家都用什么工具进行数据库比较 ? 我的鼠标提示刷新的速度不是很快,谁能给在下提供一些好的建议? 发短信的web service 请教一个服务端和客户端交互的问题? 高手帮忙 请问谁又对第三方控件imgscan.ocx操作的例子,发给我bit_hj@163.com。小弟不胜感激 肯请各位帮忙! 应该是简单问题,求高手帮忙,100分相送,绝不食言,一下午都没弄出来,太灰心了..... linux下,mysql数据库密码怎么找回?(在线等) 新手求救:关于8086和80386的中断类型号上的冲突? sleep函数 网络难题,跨网段传输 恢复数据库 有谁的信誉分比我低阿!!我送给他50分阿!! 谁能提供一个切实可用的“防止刷新页面重复提交表单”的方法 Web安装项目中的managed.msm和stdole.dll是何东东,何用?? java中字符串操作函数在哪?java中分解字串的函数(如asp中的:split)在哪个类中? 为何ACCESS出现“#已删除的”的记录? 欲交Java良师益友,愿伸援助之手请进。 关于复选框的初始问题(100份在线4:00-8:00 怎样在asp中把一个文件变成临时文件?? 求解奇怪问题,非常奇怪,分不够再加! 高分求IPMI开发资料 如何用Jtree将一个xml文件显示出来? 招聘系统分析员(北京) 深圳兼职电脑维护,哪个有兴趣? 求购 产品进销存源代码 VB or c# +SQL SERVER @@@@@@ 不送分而送现金!!!!! 谁能教我配置PHP服务器啊? 帮我看一下, 紧急求救!!!jsp的出错信息! 下面这道题如何解,同类型题的步骤一般是什么? ---will your sister go to HongKong Diisneyland this this vacation?---if I don't go,___A.so will she B.so she doesn't C.neither she will D.neither will she 黄鹤一去不复返,一的意思 请大家给出具体的定义或说明,再附加一道例题. 请问一下什么东西最快?除了光速和火箭之外, 一会东北地区还能不能发生地震6月10日 求范围内的最大值~ 设全集U=R,A={x||2x-3| 若二次方程kx2-(2k-1)x+k-2=0没有实数根,在k取最大整数时,求代数式根号25-10k+k2-绝对值k-2的值 几道初三英语题求解,答案和解析是啥?1.—Linda, how is your classmate, Lisa?—She never says anything ________ her friends. She’s the kindest girl I’ve ever met.A. for B. to C. with D. again 有数学期望这个概念么 设全集U=R,A={X||X-1|<4},B={X|X^2-2X≥0} 求①A∩B ②A∪B ③A∩CuB ∫x/(4+9x^2)dx 现在急求一篇中等长度的英语笑话或者小故事...不要太长也不要太短,要有中文翻译和3个小问题~ 陈寅恪魏晋南北朝史讲演录 一束光线从点A(3,3)出发,经过y轴上点C反射后经过点B(1,0)则光线从A点到B点经过的路线长是( )A.4 B.5 C.6 D.7 死字拆开怎么打啊,谁帮我打一下 求—阅读《中国,只有一个陈寅恪》答案 1.有一个等腰三角形的周长是48厘米,且其中两边之差为6厘米,则这个等腰三角形的三边边长分别是?2.等腰三角形一腰上的高与底边所成的夹角为m°,则这个等腰三角形的顶角的度数为?3.三角形AB 今早哪里地震 陈寅恪:为学术的一生 柳青 已知a,b,c是三角形ABC的三条边,且满足a的平方+b的平方+c的平方-ab﹣ac-bc=0,求判断三角形的形状. 怎么把字拆开 淫字拆开右边那个字读什么 怎么打出来? 当DNA丢失一个密码子时,其密码子后的脱氧核糖核苷酸链怎么遵循碱基互补配对的?不是减少一个碱基,后面的都要往上挨一个,可后面的还要与互补链配对啊, 今早地震今早乐山地区是不是地震了几级?震源在哪? 淫字的左边怎么单独打出来 英语字母猜谜1.What letter(字母) is drink?_______ 猜英语字母2.What letter has much(许多)water?_______ 猜英语字母事成之后给100积分啊实在想不起来拜托了 把字拆开把栗钰峥 拆开 如果我以接近光速的速度运动外面的世界在我看来是变快了还是变慢了如果变慢了,那不是与慢钟原理矛盾了,外面世界觉得我变慢了,我却觉得外面世界变慢了 猜谜语-字母字母A-Z去了火星,小A、小B、小C 做宇宙飞船回地球了,问,火星上还有几个字母? 陈寅恪简介会几种语言 酹怎么读 猜谜 什么字母What letter is a drink ___What letter has much water?___What letter are people?___ 神字拆开怎么写 酹 怎么读 小学英语字母猜谜趣味字母猜谜 Which letter is a kind of animal? 失之交臂的反义词 一道怪异的数学题,柏拉图的疑惑我碰到一个题目是这样的,我百思不得其解,如下:甲乙丙3人用擂台赛进行训练,每局2人进行单打比赛,另一人当裁判,每一局的输方去当下一局的裁判,而由原来 长方形OABC中,o为平面直角坐标系的原点,A,C两点的坐标分别为(4,0),(0,6) 1)写出点B的坐标 (2)长方形OABC中,o为平面直角坐标系的原点,A,C两点的坐标分别为(4,0),(0,6) 1)写出点B的坐标 谢拉一人质量60千克,由静止开始从长150米,倾角为30度的斜坡上匀加速下滑,已知受到阻力为240牛.当滑行100米时,此人做匀减速滑行,到达终点时速度恰好为0,求他做匀减速滑行时受到阻力大小 五(1)班老师出了两道数学题,做对第一题的13人,做对第二题的有22人,两题都对的有8人,没有全错的,这个班一共多少人? 如图,长方形OABC中,O为平面直角坐标系的原点,A点的坐标为(4,0),C点的坐标为(0,6),点B在第一象限内,点P从原点出发,以每秒2个单位长度的速度沿着O-A-B-C-O的路线移动(即沿着长方形移动一 我上高1了谁给介绍哈英语和物理怎么去学啊 最好有自己的意见谢谢 辰加偏旁组词,屈加偏旁组词 研究数学期望的目的和意义研究数学期望的计算和应用,有什么目的和理论、实践的意义? 请用红.黄.白.三种颜色设计一个转盘,使它符合下列要求. 1 指针停在黄色的可能性是4请用红.黄.白.三种颜色设计一个转盘,使它符合下列要求. 1 指针停在黄色的可能性是4/1 辰加偏旁组词.急加偏旁组词 求几道高数题详细解析, 关于陈寅恪先生请大家帮我详细地介绍下陈寅恪先生.感激不尽! 辰加新部首组词 高等数学题,高数题,rt 要两段父爱或母爱的好段!50字左右 酹读什么 求解高数题, 关于母爱或父爱的文段 已知实数a、b在数轴上的位置如图所示,试求|a-b|-√a²的值 求高手讲讲数学期望的意义那个数学期望我会求,但不知求出后有什么用.那个离散型随机变量的期望到底有什么实际意义或作用.望高手赐教,最好举个例子 20090320哪里有地震了 y=2x为什么自变量x的取值范围是任意实数 默多克新闻集团英国部涉窃听丑闻 卡梅乌克兰女权人士在法国民阵线领导人面前安倍晋三再访土耳其 拟敲定核电力设施伊朗将举行系列会谈 为新一轮核问题谈法国卢浮宫博物馆藏文物精品在中国国家王家瑞会见罗马尼亚客人澳丛林火灾得到控制 灾民抱怨救济不到游日本老字号“送子汤” 美容减肥得贵乌克兰女权人士在法国民阵线领导人面前美国最新研究:年过50 将更满意自己印度洋葱供应紧张价格暴涨 政府指责中加拿大12岁黑客攻击政府网站 只为换日本最大快递公司曝出服务丑闻 冷藏邮法国夫妇汽车行李箱内藏一岁女婴 警方英国遭飓风级暴风雨袭击 交通受阻数千乌克兰女权人士在法国民阵线领导人面前默多克新闻集团英国部涉窃听丑闻 卡梅美国国安局曾请求日本协助监听光缆通信阿根廷举行中期选举 执政党保持在参众东京惊现旧日军哑弹 实施爆破超过千人摩洛哥卫生部高官向中国医疗队员致敬切实增强群众安全感本周股票之最韩国国会委员会通过两项反日决议下半年到了你要做什么?辽宁270人放弃高考体优加分资格丁立人成功卫冕广州有49个工种很缺人!疯狂一战巴西忍痛挺进四强UFO乎?CIA也!澳门大学并非最终选择习近平再次会见朴槿惠被飞石击中下一篇近四成审案比赛=穿赛服在冰上照相净水机遭遇“下乡难”数据酷美国独立日飓风凑热闹村官可不可以一个人VS一队人福彩第二批旅游奖揭晓
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘