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

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

11月份浏览器份额:IE继续上涨,Chrome仍不温不火 Windows 8令人担忧:8和8.1两版本份额目前仅有9.3% 一周消息树:微软还需更激进的手段——开放Windows Phone 【开源推荐】Genome.js:当DNA遇到开源 Go 1.2发布 着重语言特性的改进 微软资深IE专家邹颂兵:好产品才是竞争的关键 Web应用程序完全测试指南 Python正在取代R,成为数据科学界新宠 代号Threshold:微软将推Windows统一平台Threshold 日本任天堂掌机应用:《卢浮宫》革了谁的命? [TUP第31期]《浪潮之巅》吴军:硅谷3.0助力中国企业走向国际 SequoiaDB创始人:比MongoDB领先一到两年 打造企业级NoSQL数据库 [对话CTO]甲骨文熊光樑:全球研发模式开发出接地气产品 GitHub中国游记之长城——跨越那堵看不见的墙 IE11开发人员工具:UI响应工具详解 2013 Linux领域年终盘点 腾讯云俱乐部深圳站成功落幕 开创移动开发新篇章 解读云计算、大数据、物联网等九大IT技术发展趋势 苹果已证实收购Topsy或将涉足社交领域 触摸未来:Tactus微流体技术2014年来袭 Windows的未来:一个核心 多个版本 Github项目中使用率最高的Java/Ruby/JS库 2013中国大数据技术大会盛大开幕 从黑色星期五找到的六个规则 帮助网站转化 移动开发者的自学宝典:十大在线编程学习网站 MIT新技术:远程触摸和操纵实物 创新人机交互 中国移动研究院业务支撑研究所所长孙少陵:大数据实时处理技术发展趋势及中国移动实践和展望 “第一届中国大数据技术创新与创业大赛”主办方发言及创新分赛颁奖 中国移动研究院业务支撑研究所所长孙少陵:大会及与会嘉宾介绍 中国工程院院士、大数据专家委员会主任李国杰:能挖掘出价值的数据就是好数据 阿里飞天平台总架构师唐洪:飞天开放平台 LDAP问题请指教,在线等待各位高手 有关DATAGRID中的DROPDOWNLIST问题 哈哈,两条三角裤啦!散分! adsl和windows2000 sever的问题 如何获得系统目录下的system路径? 请教一个双机间网卡互连的问题。 如何将 页面的条件转移 和 动态参数传递 结合起来? ftp传送文件 请教一个双机间网卡互连的问题 我在vs.net中使用cdo组件发信,编译出来的程序在没有安装vs.net的机器上报错(装了.net framework) 接着昨天的问题,Process.GetProcess()里的marchinename可以添别人的机器名。 写字板的颜色组合框是怎么做的? 错误代码:80020009??? 十万火急!谁知道怎么看sql都执行了哪些操作! 一个小问题? 哪有mandrake完整版下载? 他今天落荒而逃了!非常兴奋!!散分!!! 各位大虾帮忙,一个很菜的问题 请问如何在388手机上显示超过一屏幕的文本? 用vb6.0做的ftp下载的客户端程序 请问有为SUNPLUS16位机(MIUnSP™)开发平台的高手吗? 几经努力,没有经果.......(#if)真的很难吗? 涨分好机会,我有大问题:用什么方法可以实现——联接 电话网络(有线、无线)与电脑服务器,实现消息即时通信 欢迎多一些高手朋友提供 JAVA开发中的B/S方式,C/S方式到底是什么? 关于delphi中的查找赋值 >>>>>>关于new,delete 的简单问题《〈〈〈〈? 全国各地接吻比赛(想学习经验、姿势的进来) 数据挖掘关联规则算法的原代码能在哪里找到,譬如apriori算法? 请问16个主要颜色的RGB值。 使用过存储过程的大家帮忙呀。。。。。 websphere怎么啦? 救急:query回写 想学C#,有啥好书?? 如何动态地获得一个组件的属性、方法并调用? 请帮我看看这个小的asp程序为什么不能被网页调用?IE说这个网页不能显示 失业,散分!!! c++ builder 如何引用access数据据库的图片字段(ole对象),我用TDBimage控件不能看 CSS滤镜的使用!! 共同关注 失业了,散分!!! 大家有没有看网络小说啊!能提供几个经典些给小弟参考参考么? 失败!!失败!!! 失业了,散分!!! 怎样在java的桌面程序里打开浏览器呢 DataGrid如何实现鼠标放上去改变颜色? Foxpro数据库中,可否导出oracle可以操作的表呢?大虾指点啊! 请问调用存储过程中一个输入参数为nvarchar(24)的时侯,我在asp中的输入怎么会报错? 失业了,散分!!! 华工科技开目软件集成公司怎么样? 失业了,散分!!! 失业了,散分!!! 按顺序重新排列下面的词语1.端午 除夕 元宵 中秋2.演出 庆贺 编辑 排练3.土家族民居 吊脚楼 建筑 居民1.端午 除夕 元宵 中秋 __________________2.演出 庆贺 编辑 排练 ___________________3.土家族民居 莫扎特传的音乐谁能告诉我电影莫扎特传里的音乐都是哪些? 找养鼠技术,养殖食用老鼠,安全绿色老鼠, 声音是横波还是纵波? 跪求电影《莫扎特传》英文影评 这条蛇从哪里来的? 按顺序重新排列下面词语 端午 除夕 元宵节 中秋 演出 庆贺 编剧 排练 土家族民居 吊脚楼 建筑 民居 请从地理角度说明索契具备的优越滑雪条件俄罗斯南部城市索契,南临黑海,北依亚欧两洲分界的大高加索山脉,是世界上纬度最高的地中海气候,2007年4月索契获得2014年冬奥会举办权 请从地理 请问这条蛇是什么蛇? 数人饮之不足一人饮之有余请画地为蛇先成者饮酒 在这句子中需要停顿的地方用/标出, 请问26分贝有多响? 家里盘着一条蛇是什么意思? 南半球气压带的纬向分布比北半球明显的原因 渡铜现象是指什么?专指制冷系统中, 这条蛇是啥车 土家族的吊脚楼的特点 完整点 150分贝的声音有多响 气候什么组词今天 中国的五岳至尊是什么? 80分贝的声音听起来比100分贝更响, 用清字组词 环境( ) “奉天承运,皇帝诏曰”常常出现在古代皇帝的诏书中,这一现象最早出现什么时期?不好意思啊,这其实是道选择题,只是提问题的时候有文字限制,还没来得及补充,各位就热心的帮我解答了,但 《祝福》祥林嫂、鲁四老爷、柳妈、“我”是什么样的人?(通过什么事反映其性格特征) 传承雷锋精神 为主题写一篇文章!是演讲稿来的! 历史上曹操的天子诏书究竟是真还是假如题!从视频上看曹操没有请示而突然拿到诏书 - - 鲁四老爷和祥林嫂什么关系,他是怎么对待祥林嫂的? 怎样传承雷锋精神 我国历史上有没有一个叫曹操的皇上? 蒙古包,皖南民居,北京四合院,土家族吊脚楼特点 要求精辟简短结构:位置:(如傍水啊,靠山啊之类的)作用:(如避暑、防潮之类的)材料:(建筑材料)结构:(建筑结构)文化特征: 新时期雷锋精神该如何传承 曹操做过皇帝吗? 下列搭配正确的是 A、北京---四合院 B、陕北---窑洞 C、内蒙---蒙古包 D、傣家---吊脚楼 这是什么蛇呢? 曹操的皇上是谁 一门大炮120分贝,那两门大炮一共是多少分贝 当大气温度随海拔高度的增加减小速度小于气温的垂直递减率(0.6)时,是不是逆温现象? 冬奥会上,某滑雪运动员,在某滑雪场由静止开始沿山坡匀加速滑下0s内滑下2.8m远,已知该运动员及全部装备的总质量为60kg,山坡的倾角为30°,g取10m/s^21,运动员滑下时的加速度2,运动员滑下时所受 土家吊脚楼的信息土家吊脚楼在那里的,有什么特点 如图所示,在冬奥会跳台滑雪项目中,运动员从站台A出发,沿一个坡比1:1的斜坡向下滑…………求EF 曹操想当皇帝吗?曹操想当皇帝还是曹丕想当皇帝啊? 蒙古包,皖南民居,吊脚楼,傣家竹楼,客家民居是什么地方的? 那么多的电磁波,为什么收音机能收到电台的电磁波呢? 全瓷牙分几种价格多少 分离定律的实质可以说成是非同源染色体自由组合吗 滑雪运动员从高山往下滑雪,重力势能增大,动能减小,机械能是不变还是减小?滑雪时,滑雪板与雪面间有空气隔离着我是认为减小,因为空气与滑雪板有摩擦,机械能转化为热能可是我同学们说机 为什么两层玻璃叠起来里面可以看见俩个影子 家门口看见一蛇,凶还是吉啊?晚上和妈妈散步回家,到家门口时先看见一只蛤蟆在往墙边跳,后来开门时发现一条大拇指粗的蛇盘在门口.这个跟风水有什么关系啊?凶还是吉呢?黄头黑身呢!从昨 要收听山西某一电台广播时,将收音机的旋钮调制100HZ,则所收电磁波发射的频率是?电磁波长? 玻璃照出来的影子是不是实体?到了夜晚 玻璃窗因为 外面是黑的,所以我在房里点灯后,玻璃就可以照到自己,请问我在玻璃里照的样子是实体吗?是实体大小吗?或者缩小?和镜子一样的大小吗? 80分贝是多大声音? 我想知道电台发射电磁波,电视机收音机接受后转化为音频视频的原理电动力学?谢谢大家首先谢谢大家的回答,我不是这个专业的,最近在思考分子光谱的吸收和发射原理,要用到这方面的知识. 蛋白质和球蛋白化学本质有什么不同吗 有一个二位数,个位上数字比十位上数字大4,这俩位数又是这俩个数和的4倍,求这俩位数. 教育我们“抵御诱惑”“正确对待诱惑”的名言名句,或者诗歌,都可以! 抗体的化学本质是球蛋白,提倡母乳喂养,那抗体不是会被婴儿消化吗? 《各具特色的民居》中的打比方、举例子、作比较的句子有哪些?请写出来.明天老师要说,一定要全部哦 一个凡人究竟该怎样抗拒诱惑,而坚持理想和目标,不被俗世所奴役,而能有一个快乐的人生.答中者,感激不尽. 莫扎特是否真的像电影《莫扎特传》里莫扎特一样笑? 各具特色的民居举例说明 三课《钓鱼》 加上合适的关联词:一个人从小受到严格的教育.一个人会获得抵抗诱惑的勇气和力量.下一题我面临道德抉择的时候.我会想起父亲告(讠戒)我的话.《小灵通家庭作业》第5面 格鲁吉亚知名钢琴家将访华巡演iOS 7缩放导致晕眩的原因:速度堪中共三中全会改革方案令人期待孙杨开豪车载年轻女子与公交相撞 系无国资改革方案或尽快出台 国企分类监管前3季度物流运行稳中向好 四大瓶颈亟宁波警方便衣蹲点 打掉跨省假发票大案机构预测10月CPI同比涨3.3% 非制造业PMI创新高 有望延续趋稳向郑州皇家一号涉黄被查 号称“中原第一国资委:地方国企效益下滑 仍盲目铺摊亚裔模特因人体彩绘爆红全球 海量性感奥巴马参加弗吉尼亚州长造势演讲 表情美秘密打造人类最快飞机 导弹将无法拦陈毅之子:反思文革是必要的 但不赞成郑州“皇家一号”夜总会涉黄被查 15婴儿注射疫苗险丧命 “疫苗后遗症”家国资改革方案或尽快出台 国企分类监管穆尔西庭审前夕 埃及发生枪击案致2名印度一名女婴患家传怪病 身体多毛酷似华尔街日报竟称钓鱼岛属日本 呼吁奥巴河南洛阳四警察被袭伤亡案凶手获死刑上海市禁毒办:吸食合成毒品致精神障碍加拿大总督约翰斯顿会见王毅北京确诊1例人感染H7N9禽流感病例雷曜:普惠金融要在政策性和商业性间寻潘石屹在黑龙江认领农田 农业大咖圈多宁波举行“APEC城镇化高层论坛20亚太经合组织共话城市修复和更新 助力蒙古国记者团访津聚焦“绿色发展”北交大全面实行大类招生 本科招生减至法国指挥家米凯尔·库斯托与四川学生同旅居比利时大熊猫产仔 成2016年首王思聪新节目《Hello!女神》直播52届百想中韩同步直播 “双宋”有望暴雨袭击闽东北 福建启动Ⅳ级应急响应云南发现疑似“大熊猫” 官方:仍待进《开心密室》将收官 薛之谦回归歌手北京再启动免费遗嘱登记行动 为老年人海口司马坡岛将建大型城市综合公园 将中方:支持安理会讨论有助于加强联合国浙江男子注册空壳公司 骗得千万银行贷
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘