亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

J2EE應用中,提升數據訪問層的性能

2019-11-18 12:29:29
字體:
來源:轉載
供稿:網友

  本文從以下四個部分加以說明:
  適當地使用數據庫的元數據方法
  檢索需要的數據
  選擇優化性能的功能
  治理連接和數據更新
  適當地使用數據庫的元數據方法
  1.1.  盡量少用元數據方法
  由于元數據方法執行速度比較慢,故要盡量少用元數據方法。由于調用元數據方法產生結果集需要大量的開銷,由元數據方法產生的結果集應該緩存起來,而不是多次執行查詢,這樣可以提供JDBC的性能。例如在應用中你調用了getTypeInfo一次,你就應該將結果集緩存起來,共應用再次使用。
  1.2.  避免查詢模式
  給元數據提供null參數或查詢模式將會產生耗時的查詢。同時,由于一些不需要的數據通過網絡傳遞,導致網絡流量的增大,降低整個系統的性能。由于元數據方法執行比較慢,所以盡可能地給它提供非null參數和高效地調用它。而我們的應用常出現這樣的現象:
  ResultSet WSrs = WSc.getTables (null, null, "WSTable", null);
  應該改成:
  ResultSet WSrs = WSc.getTables ("cat1", "johng", "WSTable", "TABLE");
  顯然,在第一個getTables()調用中,應用可能需要知道WSTable表是否存在。當然, JDBC驅動按字面上的調用與解析請求不同。JDBC是這樣解析請求的:返回所有的名稱叫“WSTable”的表,視圖,系統表,同義詞,零時表,或在任何數據庫目錄中數據庫的模式存在的別名。
  第二個getTables()的調用更準確地反映了應用需要知道什么。JDBC這樣解析這個請求:返回所有名叫“WSTable”存在與當前目錄中模式為“johng’的所有表。顯然,JDBC驅動處理第二個請求要比處理第一個請求來得更有效。
  給元數據方法提供的信息越多,你得到的信息的準確性和性能也越高。
  1.3.  使用啞元查詢來確定表的特征
  避免使用getColumns()確定一個表的特征。用getMedata()啞元查詢替換之??紤]一個容許用戶選擇列的應用。應用應該用getColumns()返回用戶列的信息還是預備一個啞元查詢并調用getMetadata()呢?
  情形1:getColumns方法
  ResultSet WSrc = WSc.getColumns (... "UnknownTable" ...);// This call to getColumns() will generate a query to// the system catalogs... possibly a join// which must be PRepared, executed, and prodUCe// a result set. . .WSrc.next();string Cname = getString(4);. . .// user must retrieve N rows from the server// N = # result columns of UnknownTable// result column information has now been oBTained
  情形2:getMetadata方法
  // prepare dummy queryPreparedStatement WSps = WSc.prepareStatement ("SELECT * from UnknownTable WHERE 1 = 0");// query is never executed on the server - only preparedResultSetMetaData WSsmd=WSps.getMetaData();int numcols = WSrsmd.getColumnCount();...int ctype = WSrsmd.getColumnType(n)...// result column information has now been obtained
  在兩個情形中,查詢被送到服務器上。但在情形1中,查詢必須被預備和執行,結果描述信息必須被簡潔地表達,并且結果集必須送到客戶端。在情形2中,一個簡單的查詢必須預備并且僅有結果描述信息被簡潔地描述。顯然,情形2是更好的性能模式。
  這多少有些把這個討論復雜化了,讓我們考慮一個不支持本地預備SQL語句的數據庫。情形1的性能沒有變,但由于啞元查詢必須被求值而不是僅僅預備,因此情形2的性能稍微有些增加。因為查詢語句的Where子句計算結果總是FALSE,因此查詢沒有產出結果行和不存取表數據的執行。在這個情形下,方法2仍然要比方法1做的好。
  總之,總是使用結果集元數據檢索表列信息,如列名,列數據類型和列精度和數值范圍。當被請求的信息不能從結果記錄集(例如,表列默認值)獲取的時候,僅僅使用getColumns()方法。
  2.  檢索需要的數據
  2.1.  檢索長數據
  除非必要,由于檢索長數據會造成網絡資源緊張而降低性能。通常大多數用戶不需要看到長數據,假如用戶需要看這些數據,應用再去檢索。
  我們的代碼中長出現這樣的代碼:select * from <table name> …假如選擇的表中有長數據列,那這個查詢的性能將會非常糟糕。再說,表中的所有數據項你都需要嗎?假如不需要,為什么要讓它們在網絡上傳遞,浪費網絡資源?
  例如,看看下邊的JDBC代碼:
  ResultSet rs = stmt.executeQuery (  "select * from Employees where SSID = '999-99-2222'");rs.next();string name = rs.getString (4);
  JDBC不是智能的。當你這樣寫代碼的時候,它根本就不知道你真正需要那些列,它把所有的都返回當然是情理之中的事情了,所以開發的時候就勞煩把需要的列在Select語句中指明。假如Employees表中有照片之類的長數據字段,系統的性能之低就可想而知了。
  盡管有方法getClob()和getBlod()支持這種長數據字段的檢索,但并不是每個數據庫都支持它。所以記住:需要長數據的時候再去讀它。
  2.2.  減少檢索到的數據的大小
  有時候,長數據必須被檢索。在這種情況下,大多數用戶可能不需要在屏幕看到100k(或更多)的正文。 為了減少網絡流量和提高性能,你可以通過調用setMaxRows(),setMaxFieldSize(),以及與驅動相關的setFetchSize()方法把檢索到的數據大小減少到可治理的范圍之內。另一個減少檢索到的數據大小的方法是減少列的數量。假如驅動答應你定義包尺寸,使用最小的包尺寸將會滿足你的需要。
  記住:注重只返回你需要的行和列。假如你返回了五列而你只需要兩列,性能就降低了??非凡是不需要的結果中包含了長數據。
  2.3.  選擇正確的數據類型
  檢索和送出某種數據的類型的開銷是很昂貴的。當設計數據庫模式時,選擇能最有效處理的數據類型。例如,整型要比浮點數和小數數據要快。浮點數根據數據庫非凡的格式定義,通常是壓縮格式。為了能被數據庫通訊協議處理,這些數據必須被解壓后再轉換成不同的格式。
  2.4.  檢索記錄集
  由于數據庫系統對滾動游標的有限支持,大多數JDBC驅動不能實現滾動游標。除非你確定數據庫支持滾動記錄集(例如,rs),否則不要調用rs.last()和rs.getRow()去得到記錄集有多少行。對模擬滾動游標的JDBC驅動而言,調用rs.last()會導致驅動為了到最后一行而通過網絡檢索所有的數據。可以替代的方法是你可以通過記錄集枚舉記錄行數,或者通過提交在SELECT語句中一個帶有COUNT列的查詢得到行數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲性线免费观看视频成熟| 欧美亚洲国产成人精品| 亚洲一区二区久久久久久| 日韩在线视频一区| 高清视频欧美一级| 亚洲视频一区二区三区| 亚洲天堂免费在线| 亚洲国产成人久久综合| 青青久久av北条麻妃海外网| 国产日产欧美a一级在线| 国产91|九色| 欧美成人中文字幕| 91精品国产91久久久久久不卡| 夜夜躁日日躁狠狠久久88av| 美女视频黄免费的亚洲男人天堂| 在线播放国产一区中文字幕剧情欧美| 亚洲国产精品国自产拍av秋霞| 欧美最顶级的aⅴ艳星| 亚洲老头老太hd| 久久久av一区| 亚洲精品久久久久国产| 亚洲精品ady| 91免费精品视频| 欧美黑人xxx| 日韩激情视频在线| 欧美怡春院一区二区三区| 日韩中文字幕在线免费观看| 九九热在线精品视频| 亚洲大尺度美女在线| 国产精品女视频| xxxxx91麻豆| 深夜成人在线观看| 中文字幕在线观看亚洲| 欧美在线观看www| 国产亚洲精品一区二555| 高清亚洲成在人网站天堂| 中文国产亚洲喷潮| 日韩69视频在线观看| 538国产精品一区二区免费视频| 伊人久久精品视频| 国产亚洲日本欧美韩国| 国产综合视频在线观看| 亚洲美女性生活视频| 色偷偷综合社区| 欧美一级bbbbb性bbbb喷潮片| 日本aⅴ大伊香蕉精品视频| 欧美日韩午夜激情| 2019国产精品自在线拍国产不卡| 97视频国产在线| 国产精品成人久久久久| 国产成人涩涩涩视频在线观看| 欧美天堂在线观看| 欧美在线观看网站| 激情成人中文字幕| 久久的精品视频| 久久天天躁狠狠躁夜夜躁2014| 97超碰色婷婷| 亚洲在线一区二区| 久久视频这里只有精品| 国产精品久久久久久久久久久久久| 国产一区二区视频在线观看| 日韩免费视频在线观看| 国产精品第2页| 成人激情春色网| 欧美视频免费在线观看| 欧美激情奇米色| 欧美猛交ⅹxxx乱大交视频| 亚洲自拍小视频免费观看| 性欧美亚洲xxxx乳在线观看| 色久欧美在线视频观看| 欧美第一黄网免费网站| 欧美激情高清视频| 久久久噜久噜久久综合| 欧美日韩福利在线观看| 97在线视频精品| 国产午夜一区二区| 91九色蝌蚪国产| 久久综合伊人77777尤物| 欧美激情高清视频| 青青草成人在线| 国产日韩在线免费| 久久久久一本一区二区青青蜜月| 亚洲第一精品夜夜躁人人爽| 97在线免费观看| 狠狠久久五月精品中文字幕| 久国内精品在线| 97超级碰碰人国产在线观看| 亚洲国产欧美一区二区丝袜黑人| 国产精品黄页免费高清在线观看| 成人在线激情视频| 国产日韩精品在线观看| 日韩欧美亚洲一二三区| 亚洲男人第一av网站| 国产精品欧美一区二区| 国产精品久久综合av爱欲tv| 性欧美xxxx视频在线观看| 成人精品在线视频| 91亚洲精华国产精华| 欧美激情国内偷拍| 亚洲欧洲日本专区| 日韩在线一区二区三区免费视频| 亚洲a中文字幕| 日韩色av导航| 日韩在线播放一区| 精品久久久久久久久久久久| 97超级碰碰碰| 久久久亚洲欧洲日产国码aⅴ| 亚洲精品国产精品国自产在线| 国产精品电影网站| 欧美韩国理论所午夜片917电影| 亚洲日本中文字幕免费在线不卡| 成人97在线观看视频| 久久久久久久97| 国产精品入口夜色视频大尺度| 欧美性xxxxx极品娇小| 91欧美精品成人综合在线观看| 亚洲有声小说3d| 亚洲91精品在线| 成人a级免费视频| 91亚洲va在线va天堂va国| 国内精品模特av私拍在线观看| 国产精品永久免费在线| 国产精品扒开腿做爽爽爽男男| 亚洲欧美日韩精品| 亚洲成人亚洲激情| 日韩欧美亚洲成人| 日韩在线免费视频观看| 日韩欧美在线视频免费观看| 欧美日韩免费一区| 亚洲自拍小视频免费观看| 国产精品极品美女在线观看免费| 久久影视电视剧免费网站清宫辞电视| 久久亚洲精品视频| 亚洲欧美制服丝袜| 亚洲跨种族黑人xxx| 高清一区二区三区四区五区| 人体精品一二三区| 中文字幕九色91在线| 国产精品av免费在线观看| 91网站免费看| 日韩精品免费在线观看| 亚洲天堂日韩电影| 日本精品va在线观看| 久久综合电影一区| 欧美精品videos| 国产精品免费一区豆花| 亚洲丁香婷深爱综合| 51ⅴ精品国产91久久久久久| 国产mv久久久| 欧美中文字幕第一页| 欧美激情视频网| 亚洲精品理论电影| 日韩av在线免费| 在线视频亚洲欧美| 久久久久久久香蕉网| 久久久久久亚洲精品| 91成品人片a无限观看| 亚洲资源在线看| 亚洲欧美国产一区二区三区| 久久久久久国产精品美女| 国产在线拍揄自揄视频不卡99| 中文字幕精品—区二区| 国产日韩欧美影视| 国产成人精品日本亚洲|