下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、提高客戶機/服務器應用系統(tǒng)性能的方法 摘要客戶機/服務器的應用邏輯設計是否合理,直接影響到客 戶機/服務器方式應用系統(tǒng)的處理性能。本文 Oracle 7服務器為平 臺提出 些方法,以確定如何劃分應用邏輯,使客戶機/服務器應用系 統(tǒng)有較高的處理效率。關鍵詞 PL!SQL 觸發(fā)子客戶機/服務器、問題的提出80年代末到90年代初,許多應用系統(tǒng)從主機終端方式、文件共享 方式向客戶機/服務器方式過渡??蛻魴C/服務器系統(tǒng)比文件服務器系 統(tǒng)能提供更高的性能,因為客戶機和服務器將應用的處理要求分開,同 時又共同實現(xiàn)其處理要求(即"分布式應用處理勺。服務器為多個客戶 機管理數(shù)據(jù)庫,而客戶機發(fā)送請求和分
2、析從服務器接收的數(shù)據(jù)。在 個客戶機/服務器應用中,數(shù)據(jù)庫服務器是智能化的,它只封鎖和返回個客戶機請求的那些行,保證了并發(fā)性,使網絡上的信息傳輸減到最 少,因而可以改善系統(tǒng)的性能。 在客戶機/服務器系統(tǒng)中,應用的處理是分布在網絡上的,所以在 設計客戶機方數(shù)據(jù)庫應用程序時,若把過多的負擔加在網絡上,沒有充 分利用數(shù)據(jù)庫的存儲過程,沒有把網絡訪問最小化,結果是應用程序要執(zhí)行過多的網絡I!O,使網絡飽和,從而降低了整個系統(tǒng)的性能。要開 發(fā)好的客戶機/服務器應用系統(tǒng),必須搞清楚如何在組成系統(tǒng)的各部分 之間分布應用功能。本文提出一些方法來確定客戶機/服務器數(shù)據(jù)庫系統(tǒng)中哪些功能 應放在哪里實現(xiàn)。客戶機應用程
3、序主要側重于用某種方便用戶的方式表示和(或)分析數(shù)據(jù)。開發(fā)客戶機應用程序時,網絡傳輸量是應重點 考慮的問題之一。應注意應用程序如何向數(shù)據(jù)庫服務器發(fā)送信息或從數(shù)據(jù)庫服務器接收信息以及發(fā)送和接收多少數(shù)據(jù)。通??蛻魴C/服務器系統(tǒng)上網絡I!O是應用程序性能的瓶頸,一個應用程序引起的網絡上 I!O越少,應用及整個系統(tǒng)的運行情況越好。要從一個客戶機應用中消 除不必要的網絡傳輸量,需要理解和利用SQL命令及數(shù)據(jù)庫上的其它一 些特征。二、一個例子 下面,我們來考慮這樣一個例子.一個數(shù)據(jù)庫應用程序完成顯示每 個銷售訂單的所有行的金額合計。一般算法分兩步:(1)每行項目中數(shù)量乘以單價二金額!(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采用這種方法,若業(yè)務量增大,則其網絡的傳輸量相應增大。 第二種方法: 讓數(shù)據(jù)庫服務器進行計算,然后只把結果從網上取過來,即: 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函數(shù)(SUM) 以及 個GROUP BY 子句,讓服務器來執(zhí)行計算。因此,只需從網上傳輸較少的數(shù)據(jù)。 這個簡單例子說明:1 在客戶機/服務器環(huán)境中如何用SQL函數(shù)減少網絡上的傳輸量!2. 開發(fā)人員必須完全熟悉SQL才能做出好的客戶機數(shù)據(jù)庫應用程序。三、提高性能的方法 下面我們介紹幾種提高性能的方法
6、。1.使用完整性約束 所有客戶機應用程序必須遵循一系列預先定義的數(shù)據(jù)完整性規(guī)劃 及業(yè)務規(guī)則,以保證所有數(shù)據(jù)庫數(shù)據(jù)是合法的??梢允褂脙煞N方法來 實施一個簡單的完整的規(guī)則.讓應用程序執(zhí)行完整性檢查!使用Oracle7的完整性約束。(1)讓應用程序執(zhí)行完整性檢查例如,任何一個訂單( orders) 的顧客號必須是客戶機表( customer) 中的顧客戶機號。這是一個最簡單的引用完整性,可以用應用程序本身執(zhí)行完整性檢查。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這個過程只是在應用程序內部用于實施引用完整性規(guī)則的種方法,但可以看出,為實施個簡單的完整性規(guī)則,應用程序要花大量的 時間通過網絡來請求和發(fā)送數(shù)據(jù)。(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' ) )實施簡單完整性規(guī)則(如引用完整性)的更好方法是使用Oracle 7的完整性約束。該方法的好處是明顯的:定義一個表的同時,方便地建立完整性約束,開發(fā)人員不需為實 施一個簡單的完整性規(guī)則而創(chuàng)建測試、排錯復雜的數(shù)據(jù)完整性邏輯, 提高了工作效率!用集中化的方法實現(xiàn)完整性規(guī)則!無需任何網絡I!O,客戶機/服務器系統(tǒng)也就不會因為網絡訪問 而降低性能。2. 使用數(shù)據(jù)庫觸發(fā)器應用程
9、序經常需要實施復雜的業(yè)務規(guī)則,這些規(guī)則無法用完整性規(guī)則表示,所以最好不要按照常規(guī)思路在應用程序中實施完整性規(guī)則!而是用數(shù)據(jù)觸發(fā)子 (triggers) 來實施業(yè)務規(guī)則。其優(yōu)點是容易創(chuàng)建, 可集中進行規(guī)則實施,避免不必要的網絡I!O。 利用數(shù)據(jù)庫觸發(fā)子可以使其他些應用程序集中化和自動化。 比如,計算item 表中的tota1 列的值是所訂零件的數(shù)量乘以零件的單 價,而零件單價存放在stock表中,當插入個新的行項目時,應用程序 計算tota1列的值有兩種方法。方法 ·讓應用程序通過SQL命令執(zhí)行這個操作DECLARE tota1 REAL BEGINSELECT unitprice*q
10、uantity INTO tota1FROM stock, itemWHERE id二4INSERT INTO item VALUES(.); END應用程序通過網絡發(fā)出請求,取得某 些零件單價,然后插入這個含有該行計算值 (tota 1) 的行。修改item表中某行數(shù)量值,應用程序 需要包含相似的邏輯來計算。此外,多個用戶還可能同時刻插入和 修改訂單??傊?,用這種方法來計算tota1 列時會在客戶機/服務器系 統(tǒng)中產生大量的網絡傳輸。方法二·用數(shù)據(jù)庫觸發(fā)子,從個行項目自動導出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當創(chuàng)建觸發(fā)器linetota1后,應用開發(fā)人員在編寫應用程序時就不需考慮保持tota1列為最新值的問題,而且網絡數(shù)據(jù)庫上所有應用都 會因此受益。3. 利用過程和
12、包優(yōu)化性能 這里主要討論如何利用完整性約束和數(shù)據(jù)庫觸發(fā)器把應用邏輯移 到數(shù)據(jù)庫服務器中執(zhí)行以便減少網絡I/O,提高性能。 其它類型應用處理邏輯分布到數(shù)據(jù)庫服務器亦可以減少客戶機/ 服務器應用中的網絡I/ 0,應用程序不必再用包含多個網絡操作的SQL 語句去執(zhí)行數(shù)據(jù)庫服務器操作,而是簡單且有效地調用存儲過程。包 是一種用來把多個有關的過程在數(shù)據(jù)庫中封裝起來的方法。 下面是用SQL和用存儲過程例子的差異. 例如要插入某些行項目的訂單,用SQL實現(xiàn)過程: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 要創(chuàng)建個新銷售訂單并插入它的三個行項目,應用程序必須用7 個不同的的SQL語句來實現(xiàn),每個語句都要通過網絡傳輸數(shù)據(jù),要減少 這些SQL語句在客戶機/服務器系統(tǒng)中產生的網絡傳輸量,可以創(chuàng)建兩 個簡單的過程來插入訂單及行項目。CREA
14、TE PROCEDURE p1aceorder(custid IN INTEGER) AS BEGININSERT INTO ordersVALUES(orderseq.NEXTVAL,custid,SYSDATE,nu11,nu11,F(xiàn)END 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);當 個應用程序調用存儲過程時,通過網絡發(fā)送的數(shù)據(jù)只有過程 調用及參數(shù)。 本文提出的提高客戶機/服務器應用系統(tǒng)性能的方法,主要是采用 合理分布處理邏輯于客戶機端與服務器端,并充分利用數(shù)據(jù)庫服務器來提高執(zhí)行速度。該方法的有效性,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電商項目運營課程設計
- 市政基礎設施設備安裝應急預案
- 立式熱水鍋爐課程設計
- 面波勘探課程設計
- 起重機課程設計
- 2024年度企業(yè)員工住宿服務協(xié)議
- 調頻收音機課程設計致謝
- 體育場館消防安全管理方案
- 2024年泥水施工勞務分包協(xié)議
- 2024貨物運輸保險合同范本
- 背景調查表(標準樣本)
- 汽車構造復習
- 【酒店人力資源管理問題研究文獻綜述3000字】
- 危急值的報告制度與流程
- 讀書分享交流會《親愛的安德烈》課件
- 2022年英語二真題(含答案及解析)【可編輯】
- 月度安全管理綜合考核表
- 以案說法發(fā)言材料范文九篇
- 06-地鐵區(qū)間線纜敷設詳細施工方案
- 大象版一年級科學上冊 (我的前后左右)新課件
- 對外漢語口語入門篇第7課-你身體好嗎
評論
0/150
提交評論