<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 195, comments - 34, trackbacks - 0, articles - 1

    JDBC優(yōu)化策略總結zz

    Posted on 2009-11-14 19:18 小強摩羯座 閱讀(176) 評論(0)  編輯  收藏 所屬分類: Java
    JDBC優(yōu)化策略總結
    相比Hibernate、iBatis、DBUtils等,理論上JDBC的性能都超過它們。JDBC提供更底層更精細的數據訪問策略,這是Hibernate等框架所不具備的。

      在一些高性能的數據操作中,越高級的框架越不適合使用。這里是我在開發(fā)中對JDBC使用過程中一些優(yōu)化經驗總結。

      1、選擇純Java的JDBC驅動。

      2、使用連接池--使用一個“池”來管理JDBC連接,并精心調試池配置的參數,目前可用的數據庫連接池很多很多。

      如何配置合適的參數呢,需要的是測試,而不是感覺。

      3、重用Connection--最大限度使用每個數據庫連接,得到了就不要輕易“丟棄”。

      有時候在一個過程中,會多次操作數據庫,而僅僅需要一個連接就夠了,沒必用一次就獲取一個連接,用完后關閉或者入池。這樣會增加“池”管理的成本,千萬別以為你用了“池”就可以隨便申請和歸還連接,都是有代價的。如果是一個龐大循環(huán)塊中操作數據庫,更應該注意此問題!

      4、重用Statement--對于一些預定義SQL,設置為靜態(tài)常量,并盡可能重用預定義SQL產生的PreparedStatement對象。對于多次使用一種模式的SQL,使用預定義SQL可以獲取更好的性能。

      5、使用批處理SQL。

      6、優(yōu)化結果集ResultSet--查詢時候,返回的結果集有不同的類型,優(yōu)先選擇只讀結果集、不可滾動的屬性。

      這里是很容易出現問題的地方:

    java.sql.ResultSet

    static int CLOSE_CURSORS_AT_COMMIT    
                        該常量指示調用 Connection.commit 方法時應該關閉 ResultSet 對象。    
    static int CONCUR_READ_ONLY    
                        該常量指示不可以更新的 ResultSet 對象的并發(fā)模式。    
    static int CONCUR_UPDATABLE    
                        該常量指示可以更新的 ResultSet 對象的并發(fā)模式。    
    static int FETCH_FORWARD    
                        該常量指示將按正向(即從第一個到最后一個)處理結果集中的行。    
    static int FETCH_REVERSE    
                        該常量指示將按反向(即從最后一個到第一個)處理結果集中的行處理。    
    static int FETCH_UNKNOWN    
                        該常量指示結果集中的行的處理順序未知。    
    static int HOLD_CURSORS_OVER_COMMIT    
                        該常量指示調用 Connection.commit 方法時不應關閉 ResultSet 對象。    
    static int TYPE_FORWARD_ONLY    
                        該常量指示指針只能向前移動的 ResultSet 對象的類型。    
    static int TYPE_SCROLL_INSENSITIVE    
                        該常量指示可滾動但通常不受其他的更改影響的 ResultSet 對象的類型。    
    static int TYPE_SCROLL_SENSITIVE    
                        該常量指示可滾動并且通常受其他的更改影響的 ResultSet 對象的類型。
     
      說明下:

      結果集分兩種類型:只讀和可更改,只讀的話,更省內存,查詢的結果集不能更改。如果結果集在查詢后,更改了值又要保存,則使用可更改結果集。

      結果集的游標也有兩種類型:如果沒必要讓游標自由滾動,則選擇單方向移動的游標類型。

      對于是否并發(fā)操作:如果不需要考慮線程安全,則選擇忽略并發(fā)的結果集類型,否則選擇并發(fā)安全的類型。

      另外,還要控制結果的大小,幾乎所有的數據庫都有查詢記錄條數控制的策略,可以海量數據進行分批處理,一次一批,這樣不至于把系統(tǒng)搞死。

      7、事物優(yōu)化--如果數據庫不支持事物,就不要寫回滾代碼,如果不考慮事物,就不要做事務的控制。

      8、安全優(yōu)化--管理好你的Connection對象,在異常時候能“入池”或者關閉。因此應該將Connection釋放的代碼寫在異常處理的finally塊中。

      9、異常處理優(yōu)化--不要輕易吞噬SQLException,對于DAO、Service層次的數據訪問,一般在DAO中跑出異常,在Service中處理異常。但DAO中也可以處理異常,并做轉義拋出,不要隨便拋出RuntimeExeption,因為這是JVM拋出的,不需要你可以去拋出,因為RuntimeException往往會導致系統(tǒng)掛起。

      10、代碼高層優(yōu)化--在以上的基礎上,優(yōu)化封裝你的數據訪問方式,盡可能讓代碼簡潔好維護,如果你還覺得性能不行,那就該從整個系統(tǒng)角度考慮優(yōu)化了,比如加上緩存服務器,集群、負載均衡、優(yōu)化數據庫服務器等等,以獲取更好的系能。

      本文出自 “熔 巖” 博客,請務必保留此出處http://lavasoft.blog.51cto.com/62575/225828



    主站蜘蛛池模板: 日韩免费在线观看| 中文字幕亚洲日本岛国片| 国产亚洲精品国产福利在线观看| 在线中文高清资源免费观看| 亚洲精品国产日韩无码AV永久免费网| 亚洲成av人片在线观看无码不卡| 永久久久免费浮力影院| a级毛片无码免费真人| 91精品免费国产高清在线| 久9久9精品免费观看| 久久精品视频免费看| 国产成年无码久久久免费| 四虎国产精品免费永久在线| 男人和女人高潮免费网站 | 亚洲国产免费综合| 拍拍拍无挡视频免费观看1000| 久久毛片免费看一区二区三区| 精品久久久久亚洲| 午夜成人无码福利免费视频| 牛牛在线精品免费视频观看| fc2免费人成在线| 国内精品久久久久影院免费| a级成人免费毛片完整版| 久久99热精品免费观看牛牛| 91在线老王精品免费播放| 欧美三级在线电影免费| 久久精品国产亚洲7777| 亚洲国产一区二区a毛片| 亚洲精品无码少妇30P| 中文字幕手机在线免费看电影| 日日麻批免费40分钟无码| 好大好深好猛好爽视频免费| 亚洲国产一区二区三区| 亚洲AV无码不卡在线播放| 亚洲精品伊人久久久久| 91成人免费观看在线观看| 免费看AV毛片一区二区三区| 亚洲αv久久久噜噜噜噜噜| 亚洲av成人片在线观看| 999久久久免费精品播放| 亚洲一级Av无码毛片久久精品|