`

提高C/S系统性能的一些方法

 
阅读更多
  摘 要 客户机/服务器的应用逻辑设计是否合理,直接影响到客户机/服务器方式应用系统的处理性能。本文以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语句的查询优化问题也不可忽视。综合上述两种方法,才能从根本上提高客户机/服务器应用系统的性能。

分享到:
评论

相关推荐

    企业B_S系统的高效数据录入技术

    基于B/ S 的企业信息系统由于良好的性能越来越受到欢迎, 但B/ S 系统在数据录 入效率方面不如C/ S, 影响了企业采用B/ S 系统的积极性. 文章从B/ S 系统结构和HTML 特 征分析了B/ S 系统的输入效率, 并给出了减少...

    三层C/S结构编程指南

    但是,由于三层结构提高了开发的起点,加上具体介绍三层次应用开发的书籍并不象介绍C/S的书脊那样普遍,对于大多数开发人员来说,三层结构依然是一种理想,而不是一个能够立即在现实中使用的方法。甚至,由于缺乏...

    基于C/S模式多层结构的通用计算机在线考试系统的实现

    由于采用多层结构,在最为关键的中间层,设计采用了大量的远程方法供客户端调用,从而形成“瘦客户机,胖服务器”模式,完全避免了传统C/S模式中“胖客户机、瘦服务器”的缺陷。不但使业务逻辑的改变从客户端分离...

    基于10 Gb/s传输链路的40 Gb/s光传输实验研究

    基于中国自然科学基金网(NSFCNet)...同时,还分析了光纤注入功率对系统性能的影响,结果表明在设计这种由10 Gb/s向40 Gb/s升级的系统时,不仅要考虑信号带宽增加带来信噪比要求的提高,而且必须充分考虑光纤非线性的影响。

    深入性能测试:LoadRunner性能测试、流程、监控、调优全程实战剖析 中文PDF

    主要介绍如何使用LoadRunner进行性能测试工作,主要包括四大部分:入门篇、提高篇、监控篇和实战篇。入门篇主要讲述性能测试的基础知识,对...实战篇通过两个案例:C/S架构和B/S架构来介绍性能测试的整个过程。

    基于AJAX技术提升Web考试系统性能的研究

    摘要:网络考试系统是我国教育远程化的重要组成部分,然而现有的网上考试系统模式众多,各有千秋。文章重点研究利用Ajax...改进后,Web考试系统具有C/S结构的优点,并克服了C/S和B/S结构的缺点,提高了系统的实用性。

    java程序性能优化

    第4章介绍了并行开发和如何通过多线程提高系统性能。第5章立足于JVM虚拟机层面,介绍如何通过设置合理的JVM参数提升Java程序的性能。第6章为工具篇,介绍了获取和监控程序或系统性能指标的各种工具,包括相关的故障...

    教务信息管理系统

    是一个基于C/S技术的系统,实现了数据的集中管理,提供最大程度上的数据共享,在保障了数据的一致性的同时,降低系统的维护工作量。 面向教务管理人员提供服务。教务管理人员通过教务管理系统管理学生相关的教务...

    基于I2S的USB 声卡系统设计

    详细阐述了USB声卡通讯的实现,并且根据I2S总线DMA传输的特点实现了环形缓冲区,以提高系统性能,满足音频实时性的要求。关键词: USB声卡;S3C2410;I2S 引言 近年来USB产品层出不穷,USB音频类在USB开发者论坛的...

    《计算机专业英语》网上教学系统的设计与实现

    1. 由于采用了B/S的结构模式,较之于其它版本开发的程序,比如C/S结构模式,虽然提高了用户操作上的简单性.系统数据的安全性能有所折扣.对于网上广泛流传的各种ASP技术方面漏洞,系统还需要考虑有效的规避

    计算机网络作业三及解答.doc

    A.10Mbit/s B.20Mbit/s C.40Mbit/s D.80Mbit/s 4.已知某信道的信号传输速率为64kbit/s,一个载波信号码元有4个有效离散值,则该 信道的波特率为( )。 A.16kBaud B.32kBaud C.64kBaud D.1 28kBaud 5....

    【计算机毕业设计】超市仓库管理系统+vue

    摘 要:开发本超市进销存管理系统的主要目标是方便企业对商品、客户和员工信息的实时掌控,提高企业的工作效率。本系统是采用java开发的一个基于B/S架构的Web项目,运用Springboot开源框架进行逻辑功能的整合,MySQL...

    用π旋转型低密度奇偶校验码提升100 Gb/s偏振复用差分正交相移键控光通信系统性能

    将π旋转型低密度奇偶校验(LDPC)码应用于100 Gb/s偏振复用差分正交相移键控(PDM-DQPSK)光通信系统中,进行了相应的数值仿真和性能分析比较,其中采用打孔技术得到了高码率的改进码型,并在纠错性能方面与原始码型...

    论文研究-Map-Reduce在媒资系统数据收集中的应用.pdf

    在传统媒体资源管理系统中,数据收集工作通常是基于C/S或B/S架构设计的,这对服务器的要求比较高。为了提高服务器的性能,传统的模式就是购买更高性能的服务器,然而,近几年出现的云计算也是一个很好解决办法。采用...

    数据库大作业_-教务管理系统—华中科技大学.doc

    它采用了当前流行的C/S结构,可以突破了原先教务系统使用的局限性,实现多机同时工作统一数据库。因而就可在多地域、任意时间段来访问教务系统中的数据,大大加强了系统数据共享的能力。另外采用了以上流行和标准的...

    参考-教务管理系统.doc

    是一个基于C/S技术的系统,实现了数据的集中管理,提供最大程度上的数据共享,在保障了数据的一致性的同时,降低系统的维护工作量。 面向教务管理人员提供服务。教务管理人员通过教务管理系统管理学生相关的教务数据...

    基于GPRS_GIS的工程机械远程监控系统

    库系统中采用三层C/S(服务器/客户机)模式,更方便地实现了多用户进行远程监控, 不仅提高了系统的整体性能,而且使系统维护和升级变得更简单;最后,利用MapInfo 公司提供的GIS二次开发组件MapX开发出客户端软件,...

    一种时钟改进算法的分析与实现.pdf

    嵌入式实时操作系统μC/OS-II是多任务实时内核系统,采用周期性时钟节拍服务(即周期性定时中断),这种方法比较简单容易实现,大部分的实时操作系统内核都采用这种方法,但使用这种方法也会带来一些问题。本文就是...

    公墓陵园管理系统源码

    早在2002年,本开发团队就为开发公墓陵园业务管理系统,系统本身侧重...系统为网络版,采用流行的C/S结构, 并使用微软SQL Server 2008作为后台数据库,使系统具有很高的大数据处理性能,以满足企业日益增长的使用需求。

    100-Gb/s高速PDM-CO-OFDM系统峰值平均功率比抑制性能研究

    利用迭代部分传输序列(IPTS)限幅算法实现100-Gb/s高速偏振模复用相干光正交频分复用(PDM-CO-OFDM)系统峰值平均功率比(PAPR)抑制,并对其PAPR、误码率(BER)及非线性性能进行了分析。仿真结果表明,与限幅算法...

Global site tag (gtag.js) - Google Analytics