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

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

七牛资深前端工程师马逸清:前端测试探索实践 实战iOS 9:开发者必须掌握的三种搜索API 腾讯Bugly干货分享:浅谈Swift在实际项目中的应用 【前端人生】ThoughtWorks黄峰达:利用横向扩展方式,快速学习前端新框架 这是前端最好的时代——论前端的“三化”建设 游戏引擎网络开发者的64做与不做(一):客户端方面 六问七牛CDN:打造融合CDN管理服务平台 《近匠》Wilddog野狗,跨平台的实时通信云服务 【CTO讲堂】招人不易留人更难——创业团队要闯哪些关? iOS UIView动画实践(四):过渡与伪3D动画 日程全公布|年度人工智能技术精英聚会 7月26-27相约北京 TypeScript 1.5发布,支持大量ES6新特性 快快快!27个提升效率的iOS开源库推荐 《近匠》Maxense,“云+传感”推动产业变革 【探秘ES6】系列专栏(九):使用Babel和Broccoli 2015年Postgres全球开发者大会参会总结 英特尔硬享公社启动“创意原型拍卖” 对接创意与商机 详解Swift 2.0(一):苹果做的25项改变 2015甲骨文数据库大会:回顾、感恩、展望,欲续写辉煌 Nokia进军VR领域:让人欢喜让人忧 2015中国人工智能大会在京成功召开 成为糟糕游戏设计师的五种打开方式 Stripe使用指南:Swift开发中的信用卡支付 将安全延伸至云端以及更远的地方 专访FreeWheel北京研发中心:一流技术型人才应具有国际化视野 iOS UIView动画实践(五):Keyframe Animation 【CTO讲堂】简说创业公司的技术选型,从BearyChat的开发说起 《近匠》Webix,跨浏览器的JavaScript UI组件库 微软正式推送Windows 10,你会升级最后一款Windows产品? Cinatra:高性能现代C++ Web框架 《移动App测试实战》作者邱鹏:我在测试过程中遇到的那些坑 谁能帮我看一下程序? 帮我看看这几个宏什么意思? 程序员!女人对你重要么???? 这是我第四天的C#学习笔记,敬请高手指教 谁先回来马上给分(简单问题) 机器的usb问题!! 兄弟们,小弟刚接触JSP,帮忙解决一个问题。 请教PHP.INI配置里的SESSION! 刚开始接触.net 求购程序,请进. 求购程序 求购程序 推荐一些适合初学者看的书吧 一家位于Montreal, Canada的公司,求购一个程序 如何保存UNICODE的字符串到硬盘上 如何将HTML文本直接显示在CppWebBrowser中?(不使用临时表) 如何保存UNICODE的字符串到硬盘上 redhat第4第5两个iso文件是做什么的 关于jsp做客户端调用ejb的问题?????望各位兄弟们救救我吧!!!!! COOL!将所有菜单设置为半透明的代码(只适用于WIN2000以下版本) 请问谁知道如何用jakarta-jmeter进行压力测试? 如何判断文件夹是否存在 在Win2K Server安装Oracle817时,没有安装数据库,后在创建数据库时出现"ORA-12560:TNS:协议适配器错误"... 请教.net服务器问题 解决这个问题,给你200分!!!!!!!!!!(回头追加给你!) 我是初学者,请问.net framework先进性在哪里? 有谁试过用JAVA编FTP软件? 很简单的listBox问题,HELP 今年大四,现在找工作,求助,我怎么样………UP有分。 寻找!! IE的文本输入框,输入一字符会联想,请问怎样去掉这个联想?(Win2K) 哪位大俠能賜教 哪位大俠能賜教 你们说VC到底要学些什么?VC更偏底层,总做这种纯技术总也做不完。迷茫~~~ 请问,在Oracle里建trigger是不是有什么说法呢?一个正常的不能在正常的trigger在Oracle里运行也说compilation errors. 请教:提取字符串里每个字符首字母,谢谢!!! aa模块代码 关于强烈要求恢复可用分增长、可用分转移、非技术区得分转换为可用分的建议!! SOS:如何找到窗口中多个进程其中我所需要的那一个? SOS:如何找到窗口中多个进程其中我所需要的那一个? 笑的人再发几个 query1.next是将指针移向下一条,啊向上条一记录是用什么命令呢? 对话框中使用工具栏如何进行更新? 关于文件指针的问题 ASP中SELECT 查询中前几条的查询如:TOP 的用法哪位讲解一下. 如何查找到两个不同数窗的不同数据 诚招ASP老师一名(请版主不要删) 提问!(欢迎讨论) 停电重启 原来已经编译通过的程序,再重新编译竟然出现了150个错误 一个很奇怪的想法 请问怎么转换以空格为分割符的文本文件转换为以TAB为分割符的文本文件?急! 我觉得地球好危险,我想火星了. 英语翻译危的古意、黯然的古意、或的古意、念得古意 Four hundred yuan for a shirt?It's too e___ 我不应该在地球,应该去火星 英语,求英语学霸回答, The coat is one hundred yuan改为同义句The coat ( )one hundred yuan 最新火星植物? 英语学霸求答案 The pencil is (four yuan ).刮号内提问 鲁滨孙是怎样 “尽量改善自己的生活”的六年级语文下学期第十六课阅读题第四小题人教版六年级语文下学期第十六课阅读题第四小题 求英语学霸答案,谢谢 What is the letter we have in December but we don't havein any other months?这句话的翻译? 把鲁滨孙的生活与我的生活对比 描写兄弟间友爱的成语 what is it thatwe have in December but that we do not have in any other month THIS IS MY LAND怎么样 英语学霸们,知道的回答, 求现代人写的等待爱情的古诗词 Dose anyone live on this_____?You look worried,what's your_____? 海洋发起脾气来,也会【掀翻船只,冲垮堤坝,毁灭城镇】 写出一系列的动作 写借物抒情的诗句(现代人自己写,不要古诗宋词.) 宾语从句专项练习 单项选择 英语 That is a nice picture 改复数句 六年级语文课本中的第二十六课《论语》八则的解释 哪些词代表中国 Have we lost our minds? 求《论语》八则的解释现代文 代表中国的词语写一写可以代指中国的词语,如,中华.(华夏、九州、神州除外)非中国文化! How _______ is the cake?Three yuan.并请您说明理由 手机多点触控什么意思和普通触屏有什么不同 there's a books on the desk改为复数句,急 The is 30 yuan,that cake is 60 yuan同义句The is 30 yuan—— ——that one 我是火星来的吗 It's a nice watch.改为复数句 My apple is (sour) 括号提问 This cake is (five yuan) 括号提问 不知道是不是火星了.今天突然发现超时空兵能把桥梁小屋给吸了. 为什么说瑞士是中立国家 掀翻船只,冲垮海堤,毁灭沿海的城镇 这三个词能调换吗?为什么? 同学说我是火星来的? 瑞士为什么能够中立啊?其他国家不行吗?战争时期,德国闪击波兰,攻占丹麦法国,卢森堡等,象瑞士近邻法国和卢森堡,又是弹丸小国,德国怎么会放过他呢,单单因为他是中立国吗?为什么以上被攻 有没有描写美女的句子(现代的) 我到火星了. 瑞士、瑞典为什么富有?比如从什么年代他们开始积累财富,当时是靠什么迅速积累起来的.因为像英国、美国、荷兰这些国家历史上的辉煌都比较清楚,但是这两个国家,可能是我历史学的不那 Is that a photo?的复数形式 There is an apple on the desk 这句的主语是什么?同志们问一下 There is an apple on the desk .的主语是啥? 毕竟我是英语废,能解多少是多少 the tv costs nint thousandeight hundred 有什么字用英语读是 深爱我想知道 英语的哪个单词 与 中文“深爱” 的读法相同 求英语学霸 Mary spent three thousand yuan on the color TV set.The color TV set ____ ____ three thousand yuan 阅读那份爱 800字初一下册作文 写好给⑩悬赏不可全部抄袭电脑的,要自己像一点 爱护地球的名句 模仿造句:但是,海洋发起脾气来,也会无情地掀翻船只,冲垮堤岸,毁灭沿海的城镇,给人类带来可怕的灾难.这个句子运用了什么修辞手法 爱字该怎么读 但是,海洋发起脾气来,也会无情地掀翻船只,冲垮堤岸,毁灭沿海的城镇 用掀翻,冲垮,毁灭加拟人一起造句 求一首自己写的仿古代诗歌和现代诗歌,要自己写的,因为要交给老师改的 火星有人 关于地球的名言警句要短的 描写春夏来到的现代短诗短诗喔,积极地,春天的充满朝气与希望的积极的就行!
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘