下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、提高客户机/服务器应用系统性能的方法 摘要客户机/服务器的应用逻辑设计是否合理,直接影响到客 户机/服务器方式应用系统的处理性能。本文 Oracle 7服务器为平 台提出 些方法,以确定如何划分应用逻辑,使客户机/服务器应用系 统有较高的处理效率。关键词 PL!SQL 触发子客户机/服务器、问题的提出80年代末到90年代初,许多应用系统从主机终端方式、文件共享 方式向客户机/服务器方式过渡。客户机/服务器系统比文件服务器系 统能提供更高的性能,因为客户机和服务器将应用的处理要求分开,同 时又共同实现其处理要求(即"分布式应用处理勺。服务器为多个客户 机管理数据库,而客户机发送请求和分
2、析从服务器接收的数据。在 个客户机/服务器应用中,数据库服务器是智能化的,它只封锁和返回个客户机请求的那些行,保证了并发性,使网络上的信息传输减到最 少,因而可以改善系统的性能。 在客户机/服务器系统中,应用的处理是分布在网络上的,所以在 设计客户机方数据库应用程序时,若把过多的负担加在网络上,没有充 分利用数据库的存储过程,没有把网络访问最小化,结果是应用程序要执行过多的网络I!O,使网络饱和,从而降低了整个系统的性能。要开 发好的客户机/服务器应用系统,必须搞清楚如何在组成系统的各部分 之间分布应用功能。本文提出一些方法来确定客户机/服务器数据库系统中哪些功能 应放在哪里实现。客户机应用程
3、序主要侧重于用某种方便用户的方式表示和(或)分析数据。开发客户机应用程序时,网络传输量是应重点 考虑的问题之一。应注意应用程序如何向数据库服务器发送信息或从数据库服务器接收信息以及发送和接收多少数据。通常客户机/服务器系统上网络I!O是应用程序性能的瓶颈,一个应用程序引起的网络上 I!O越少,应用及整个系统的运行情况越好。要从一个客户机应用中消 除不必要的网络传输量,需要理解和利用SQL命令及数据库上的其它一 些特征。二、一个例子 下面,我们来考虑这样一个例子.一个数据库应用程序完成显示每 个销售订单的所有行的金额合计。一般算法分两步:(1)每行项目中数量乘以单价二金额!(2) 把每行金额累加
4、。 第一种方法:每次一行,然后,用应用程序累加,即SELECT orderid, quantity ,unitpriceFROM item ,stockWHERE stock. id二 item. idORDER 8Y orderid结果为.orderid quantity unitprice1 1 6. 031 1 21.41 4 87. 12228.972 3 21.4采用这种方法,若业务量增大,则其网络的传输量相应增大。 第二种方法: 让数据库服务器进行计算,然后只把结果从网上取过来,即: SELECT orderid ,SUM(quantity *unitprice)FROM item
5、 , stockWHERE item. id二 stock. idGROUP BY orderidORDER BY orderid结果为·orderid SUM(quantity*unitprice)1 265.872 82. 14如上所示,由于第二种查询使用了 个SQL的组合,即 个SQL函数(SUM) 以及 个GROUP BY 子句,让服务器来执行计算。因此,只需从网上传输较少的数据。 这个简单例子说明:1 在客户机/服务器环境中如何用SQL函数减少网络上的传输量!2. 开发人员必须完全熟悉SQL才能做出好的客户机数据库应用程序。三、提高性能的方法 下面我们介绍几种提高性能的方法
6、。1.使用完整性约束 所有客户机应用程序必须遵循一系列预先定义的数据完整性规划 及业务规则,以保证所有数据库数据是合法的。可以使用两种方法来 实施一个简单的完整的规则.让应用程序执行完整性检查!使用Oracle7的完整性约束。(1)让应用程序执行完整性检查例如,任何一个订单( orders) 的顾客号必须是客户机表( customer) 中的顾客户机号。这是一个最简单的引用完整性,可以用应用程序本身执行完整性检查。DECLAREflag INTEGER; BEGINSELECT id INTO f1agFROM customerWHERE id二3FOR UPDATE OF id IF SQL
7、%FOUND THEN INSERT INTO ordersVALUES(5,3,SYSDATE,nu11,nu11,'F');其他应用逻辑COMMIT END IF END这个过程只是在应用程序内部用于实施引用完整性规则的种方法,但可以看出,为实施个简单的完整性规则,应用程序要花大量的 时间通过网络来请求和发送数据。(2) 使用Oracle 7的完整性约束CREATE TABLE ordersid INTEGER PRlMARY KEYcustomer id INTEGER NOT NULL REFERENCES customer orderdate DATE NOT NUL
8、Lshipdate DATE DEFAULT SYSDATE,paidate DATE DEFAULT SYSDATE,status CHAR(l) DEFAULTF' CHECK(status IN(fB' ) )实施简单完整性规则(如引用完整性)的更好方法是使用Oracle 7的完整性约束。该方法的好处是明显的:定义一个表的同时,方便地建立完整性约束,开发人员不需为实 施一个简单的完整性规则而创建测试、排错复杂的数据完整性逻辑, 提高了工作效率!用集中化的方法实现完整性规则!无需任何网络I!O,客户机/服务器系统也就不会因为网络访问 而降低性能。2. 使用数据库触发器应用程
9、序经常需要实施复杂的业务规则,这些规则无法用完整性规则表示,所以最好不要按照常规思路在应用程序中实施完整性规则!而是用数据触发子 (triggers) 来实施业务规则。其优点是容易创建, 可集中进行规则实施,避免不必要的网络I!O。 利用数据库触发子可以使其他些应用程序集中化和自动化。 比如,计算item 表中的tota1 列的值是所订零件的数量乘以零件的单 价,而零件单价存放在stock表中,当插入个新的行项目时,应用程序 计算tota1列的值有两种方法。方法 ·让应用程序通过SQL命令执行这个操作DECLARE tota1 REAL BEGINSELECT unitprice*q
10、uantity INTO tota1FROM stock, itemWHERE id二4INSERT INTO item VALUES(.); END应用程序通过网络发出请求,取得某 些零件单价,然后插入这个含有该行计算值 (tota 1) 的行。修改item表中某行数量值,应用程序 需要包含相似的逻辑来计算。此外,多个用户还可能同时刻插入和 修改订单。总之,用这种方法来计算tota1 列时会在客户机/服务器系 统中产生大量的网络传输。方法二·用数据库触发子,从个行项目自动导出tota1 的值, 当用户在item表中插入新行或修改quantity时,无需任何网络访问。CREATE T
11、RIGGER Linetota1BEFORE INSERT OR UPDATE OF quantity,stockidON itemFOR EACH ROW DELAREitemprice REAL;BEGINSELECT unitprice INTO itemprice FROM stockWHERE id二 :new. stockid:new. to1a1:二new.quantlty*ltemprlce; END 1inetota1当创建触发器linetota1后,应用开发人员在编写应用程序时就不需考虑保持tota1列为最新值的问题,而且网络数据库上所有应用都 会因此受益。3. 利用过程和
12、包优化性能 这里主要讨论如何利用完整性约束和数据库触发器把应用逻辑移 到数据库服务器中执行以便减少网络I/O,提高性能。 其它类型应用处理逻辑分布到数据库服务器亦可以减少客户机/ 服务器应用中的网络I/ 0,应用程序不必再用包含多个网络操作的SQL 语句去执行数据库服务器操作,而是简单且有效地调用存储过程。包 是一种用来把多个有关的过程在数据库中封装起来的方法。 下面是用SQL和用存储过程例子的差异. 例如要插入某些行项目的订单,用SQL实现过程:INSERT INTO orders VALUES(. .) INSERT INTO item VALUES(l,.) UPDATE stock S
13、ET 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语句在客户机/服务器系统中产生的网络传输量,可以创建两 个简单的过程来插入订单及行项目。CREA
14、TE PROCEDURE p1aceorder(custid IN INTEGER) AS BEGININSERT INTO ordersVALUES(orderseq.NEXTVAL,custid,SYSDATE,nu11,nu11,FEND p1aceorder;CREATE PROCEDURE p1aceitem(itemid IN INTEGER,partid IN INTEGER, quan IN INTEGER) ASBEGININSERT INTO item(id,orderid,stockid,quantity)VALUES(itemid,orderseq.CURRVAL,partid,quan);UPDATE stockSET onhand二 onhand-quanWHERE id二partid; END p1aceitem;应用程序只需简单调用这几个过程。P1aceorder(3) ; P1aceitem(1,3,2); P1aceitem(2,8,1); P1aceitem(3,9,3);当 个应用程序调用存储过程时,通过网络发送的数据只有过程 调用及参数。 本文提出的提高客户机/服务器应用系统性能的方法,主要是采用 合理分布处理逻辑于客户机端与服务器端,并充分利用数据库服务器来提高执行速度。该方法的有效性,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版大数据分析分包合同2篇
- 2024年度编织袋供应销售协议版B版
- 急性呼吸衰竭的救治与护理
- 2024年养猪场基础设施建设项目合同
- 恶性胸腔积液护理
- 2024年定制版房屋拆迁施工总承包协议版B版
- 语言培训行业可行性分析报告
- 2024樱花树买卖合同书
- 2024年宣传册出版及印刷合同3篇
- 2024年养殖业发展项目:肉牛养殖与投资合同3篇
- 《非典型性心梗》课件
- +云南省昭通市2023-2024学年八年级上学期期末数学试卷
- 颞叶简介课件
- 2023铁塔线路铁塔组立架线施工合同x正规版
- 仪器设备维修保护方案范本
- 2023年湖南省雪天盐业集团股份有限公司招聘笔试参考题库含答案解析
- 《秘书职业技能大赛》课件
- 技术传授合作协议书(菜品)
- 英语演讲智慧树知到课后章节答案2023年下重庆大学
- 预防艾滋病梅毒和乙肝母婴传播阻断项目培训讲义
- 送达地址确认书
评论
0/150
提交评论