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

提高客户机/服务器应用系统性能的一些方法-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.

Firefox.html:用HTML重现Firefox UI Qt 5.4正式发布!引入WP,支持HTML5混合开发 2014智能硬件盘点第二弹!这次咱走暖心的 聚合数据资产,推动产业创新——2014中关村大数据日看大数据变现 拥抱开源:微软Windows 10宣布全面支持AllJoyn技术 改变App领域发展!友盟推“数据工场”战略,两款新品亮相 Cloudera正式登陆中国市场:与英特尔携手共助本土企业淘金大数据 Go 1.4正式发布 支持Android开发 【特别提醒】2014中国大数据技术大会门票全面告罄 不接受现场购票 累计4000万美元 Qualcomm在华投资5家公司 支持Android、WatchKit开发,全新RubyMotion 3面世! 快速开发移动医疗App!开源框架mHealhDroid 2014CVW﹒产业互联网大会解密未来20年 Nimble VR的收购与一封来自友商的感言 Google Earth API将在2015年12月彻底关闭 AR、美颜、机器人:计算机视觉库几乎无所不在 不激增,无爆收,年度最佳手游为80 Days带来了什么? 《近匠》机智云CEO黄灼:跨越智能硬件的“鸿沟” 智能手机≠智能家居!我们要的究竟是什么? 亚信大数据事业部总经理张灏:打通各行业数据壁垒 让大数据变现畅通无阻 Web App和Native App不是生死之争,而是可以和平共处! 微信之父张小龙说微信坚持“去中心化”,这样真的好吗? 亚信CFO武军谈进军海外市场成功经验 前瞻性思维是开路先峰 Swift,任重而道远! DevOps系统的变迁 玩转Docker镜像 “扫描建模”速建AR应用 Vuforia 4.0 SDK更新 硅谷里的外星人:纵观Reddit十年风雨路 不见不散 Cloud Foundry Meetup活动将首次走进杭州 独立开发者:新手做2D手游该用哪些工具? 求安全化危机!Uber研发生物识别技术、聘请前亚马逊运营 请问该事件可以通过发送消息或其他的方法来触发吗? 有没有关于开发控件的文章和例子,请各位大侠帮忙!!! 告诉那有免费的数字化软件马上送分200 请问哪里有 Remote Authentication Dial In User Service (RADIUS)的资料或原码? 我怎么不能看你们的问题啊 关于数据库 window.parent.oa_middle.oa_userlist.document.location.reload();报错:对像为空或不存在 看如下的sql语句如何才能够把结果显示在grid内? 准备学习j2ee, 大家推荐些网站和书籍,我准备狂啃二个月!对了,我连它的开发工具还不知道呢,是不是还用jbuilder? 初学者,如何在C++ Builder中打印? DCOM编程要求在客户端安装DCOM,怎样安装DCOM,怎样判断是否安装了DCOM? 很小的小问题关于winsock 电话语音卡支持adpcm文件格式的直接播放吗? 关于Access数据库的两个问题,急! 一个初学者的简单问题。 大家好,一个小技术问题,不知道怎魔办? 两句的代码都出现问题!憋闷 高分寻求《数据结构-C++语言描述》书友,来者有分 谁知道哪儿能下载access的jdbc驱动程序吗? 好消息,Win2000下自定义报表问题! ATL里使用静态库的问题 我看不见你们问题的内容 试试难不难??HELP 请问如何禁止浏览器的退回按钮 怎样在客户端实现连接服务器的数据库,不装oracle的客户端 怎么获得地址 怎样使UltraEdit可以编译Java? 菜鸟问题:我建立一个工程后,用ClassWizard增加了一个类,它的基类是CTreeView,当我编译的时候出现错误,提示我的基类是不明确的,这是为什么 这个错误是因为什么?Exception in thread "main" java.lang.NoClassDefFoundError:Example 为什么接到集线器上的网线会一闪一闪的! insert into的问题,看是简单,但却不简单。。。 vb绘图问题 请问加入什么代码才能在下面的程序中实现分页!??谢谢! 如何判断局域网内另一台机器上的一个NT服务是否启动? 一各递归的问题。 寻求有关NAND FLASH 和支持他的文件系统的中文资料 Access数据库应该用什么数据库引擎驱动? 各位,谁有InstallShield Express 3.53 15天使用版的激活码阿 ado 中的数据库动态查询 好久没上来了,请大家谈一谈portal吧..... 连接 Access数据库应该用什么数据库引擎驱动? 怎么做到你在Copy文件,遍历目录时.进度条和操作过程一至呢? 如何在XP下设置打印机的纸张 请问如何获取DataList的EditItemTemplate中的自定义控的属性? asp.net(C#)里,如何判断一个数据库的字段是否为null? 世界杯和队歌集锦 在汇编中,如何实现延时 Outlook的问题,很急!!!在线等!!! 小弟最近需要注册一国际域名,可否提供一个地方? 诚征MCSD考友,本人上地上班 我的汽车用的很少,所以经常发生电亏的现象,有没有什么简单的仪器可以监控到电池的电量的,那就可以心中有了最好是即装即用的 稀硝酸与某金属反应时,金属被氧化成+2价,被还原的硝酸占硝酸总量的4分之1,则还原产物可能是 N2 N2O NO NO2 “住宅空气质量检测”的合格标准是什么? 我很不明白为何地球大磁场任何东西都吸引,而人工磁铁却只吸铁、钴、镍!能不能研究一种不受吸引甚至排斥地球引力的材料或系统? 三缸发动机工作顺序是多少,转几圈是一个工作循环,三个缸工作一遍曲轴转几圈?怎么计算的? 天平分度值误差怎么计算?某DT100型单盘分析天平,在盘中加100mg标准砝码,读数指示为100.5mg,分度值误差+0.其分度值误差是否合格?DT100为单盘精密分析天平,已知:最大称量为100g,分度值为0.1mg 影响空气质量的因素是那些 管子水压试验装置(压力表1.6级、分度值0.005MPa) 那有卖? 水可以过滤烟吗 Pp 什么意思 跌落式熔断器与跌落式开关有什么区别,怎么辨认 什么物质的吸烟性或者说过滤烟的效果好这里的烟指的就是人抽的烟,请理化达人或对烟有研究的人回答 玩具遥控汽车电池.遥控汽车原本的电池才1100毫安、我买了一个2500毫安的.这样的电池 换成5号AA型的电池可以不?懂的进来、不懂得别误导我啊.这个遥控器我发了355元买的. 保险丝为什么要装在开关后啊 感应电机的原理是什么?要细 英语pp是什么意思 南亚地区的黄麻主要分布在A.德干高原B.喜马拉雅山区C.恒河下游地区D.印度河平原 三项感应电动机的工作原理是什么 影响空气质量的原因 南亚的黄麻产区主要分布于(选择题)A.印度河平原B.德干高原C.恒河三角洲D.恒河平原顺便说清楚为什么 320鲨鱼鳍天线听德国的朋友说宝马有鲨鱼鳍天线,不知道320手动那款带有这个东西吗 有减压的水龙头吗?小区的水压很高,水龙头一打开,水就急速而出,弄得一身水.请问有减压的水龙头,能让出水慢一些吗? 南亚棉花主要分布于A恒河下游地区,B德干高原西部地区,C印度河平原,D喜马拉雅山的南侧 单相交流感应电动机的结构特点及工作原理是什么? 1、实验步骤中蒸发、冷却结晶中蒸发的目的 2、减压过滤法中水龙头的作用及原理,其他部件的原理 纯碱与盐酸(胃酸)反应的化学式 ABS和EBS的区别我知道些,但说不出来. 下列几组词个有特点 你能根据它们的特点个写出一个词语吗?一个 一定 一样( )不好 不行 不来( ) 世界上最大推力火箭发动机是哪个国家的,中国120吨级发动机排老几 帮我查一下纯碱和盐酸反应化学式 蒸馏水怎么过滤 Mg和浓HNO3为啥生成NH4NO3 详细解释下 中线是什么 ,中线上为什么不能装开关和熔断器 你的阅读还有什么快乐可言?换个说法意思不变. n之比为2:5的锌和稀硝酸反应,若硝酸被还原的产物为N2O或NH4NO3 ,这两个方程怎么写?要配方程式的过程~物质的量之比为2 :5的锌与稀硝酸反应,若硝酸被还原的产物为N2O,反应结束后锌没剩余 东南亚哪些国家征收EBS CIC费用? 换一种说法,意思不变 请问F-119和F-120两种发动机,哪一种更为先进?并说出各自的优点 都哪些航线收CIC和EBS费用 今天我做了一什件好事,是值得高兴啊!换种说法意思不变jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj 怎么选择竹炭包?最近想买竹炭包,谁有什么意见,什么样的好呀 鲨鱼鳍式汽车天线式是真正的汽车天线,并不是市场上的鲨鱼鳍装饰品!那产品如何进入市场?鲨鱼鳍式汽车天线式是真正的汽车天线,并不是市场上的鲨鱼鳍装饰品!有多少人能接受?我现在在上 句子意思不变,换一种说法:在那儿,我们得到的是人与人之间的信任和被信任的喜悦. fx双忙内的吧有没有,就是唯水晶和雪莉的,或者CP吧 鲨鱼鳍防静电天线真的好用吗?真的可以防静电吗?还有车子在高速行驶的时候能提高稳定性吗? 减压过滤时处理滤纸的方法减压过滤时,处理滤纸的方法与普通过滤相似,一般先对折两次,然后剪成合适大小的扇形,展开后放入布氏漏斗中. 这句话错在哪. 求fx雪莉的侧面照片最好是向左转头,微笑的侧面照片, 鲨鱼鳍天线有什么用?如何安装?是装饰件还是有作用的 固液分离长采用减压过滤.为了防止倒吸,减压过滤完成后应先 为什么总开关不能放在保险丝后?不是都放在干路上放哪都一样么?不是总开关断开后整个电路就不通了么,与放的位置有什么关系?还是不懂啊! 磁铁除了吸铁,磁还有什么作用承德市逸夫小学三年级下册试卷 硝酸钾晶体减压过滤时吸滤瓶里的是 电源进空气开关,再进32A保险丝.现在空气开关没跳,保险丝座烧了,保险丝确好的.分析下来应该是空开到保险丝座之间的线松了,没拧好.不过为什么松了会发热来个电工说下原理 磁铁除了吸铁还能吸什么RT 电动车的电池出现断格会有什么现象还能继续使用吗? HNO3与金属反应时,还原产物可能是NO2、NO、N2O、N2或NH3的一种或几种,现有一定量Al粉和Fe粉的混合物与100 mL稀HNO3充分反应,反应过程中无任何气体放出.在反应结束后的溶液中,逐渐加入2 mol/L的NaO 精确度等级1.6的压力表有哪些量程,他们的分度值各是多少?最好条理点!可发我邮箱guosd1513@163.com 具有记忆效应的电池适合用在电动观光车吗?有什么坏处? HNO3与金属反应时,还原产物可能是NO2、NO、N2O、N2或NH3的一种或几种,现有一定量Al粉和Fe粉的混合物与100 mL稀HNO3充分反应,反应过程中无任何气体放出.在反应结束后的溶液中,逐渐加入2 mol/L的NaO 4.00的分度值都是多少?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘