真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JDBC優(yōu)化策略總結(jié)-創(chuàng)新互聯(lián)

相比Hibernate、iBatis、DBUtils等,理論上JDBC的性能都超過(guò)它們。JDBC提供更底層更精細(xì)的數(shù)據(jù)訪問(wèn)策略,這是Hibernate等框架所不具備的。

云浮網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),云浮網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為云浮上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的云浮做網(wǎng)站的公司定做!

在一些高性能的數(shù)據(jù)操作中,越高級(jí)的框架越不適合使用。這里是我在開(kāi)發(fā)中對(duì)JDBC使用過(guò)程中一些優(yōu)化經(jīng)驗(yàn)總結(jié)。

1、選擇純Java的JDBC驅(qū)動(dòng)。

2、使用連接池--使用一個(gè)“池”來(lái)管理JDBC連接,并精心調(diào)試池配置的參數(shù),目前可用的數(shù)據(jù)庫(kù)連接池很多很多。
如何配置合適的參數(shù)呢,需要的是測(cè)試,而不是感覺(jué)。

3、重用Connection--大限度使用每個(gè)數(shù)據(jù)庫(kù)連接,得到了就不要輕易“丟棄”。

有時(shí)候在一個(gè)過(guò)程中,會(huì)多次操作數(shù)據(jù)庫(kù),而僅僅需要一個(gè)連接就夠了,沒(méi)必用一次就獲取一個(gè)連接,用完后關(guān)閉或者入池。這樣會(huì)增加“池”管理的成本,千萬(wàn)別以為你用了“池”就可以隨便申請(qǐng)和歸還連接,都是有代價(jià)的。

如果是一個(gè)龐大循環(huán)塊中操作數(shù)據(jù)庫(kù),更應(yīng)該注意此問(wèn)題!

除此之外,還應(yīng)該對(duì)連接進(jìn)行密集使用,盡可能晚的打開(kāi),并可能早的關(guān)閉。比如,你一個(gè)業(yè)務(wù)中有N多的操作,數(shù)據(jù)庫(kù)操作穿插在其中,而其他的業(yè)務(wù)處理操作時(shí)間很長(zhǎng),那么使用一個(gè)連接處理這些操作是有問(wèn)題的。

這會(huì)導(dǎo)致長(zhǎng)期占用連接,給數(shù)據(jù)庫(kù)帶來(lái)壓力。

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

對(duì)于Statement對(duì)象,可以反復(fù)的重用,每次都可以接收不同的SQL語(yǔ)句,而對(duì)于PreparedStatement則不可以,因?yàn)轭A(yù)定義SQL在定義PreparedStatement對(duì)象時(shí)候已經(jīng)確定了,但是如果sql語(yǔ)句不變,則可以調(diào)用clearParameters()來(lái)達(dá)到從用目的,如果sql語(yǔ)句發(fā)生變化,也可以從用變量名。

5、使用批處理SQL。

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

這里是很容易出現(xiàn)問(wèn)題的地方:

java.sql.ResultSet

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

說(shuō)明下:

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

結(jié)果集的游標(biāo)也有兩種類型:如果沒(méi)必要讓游標(biāo)自由滾動(dòng),則選擇單方向移動(dòng)的游標(biāo)類型。

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

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

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

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

9、異常處理優(yōu)化--不要輕易吞噬SQLException,對(duì)于DAO、Service層次的數(shù)據(jù)訪問(wèn),一般在DAO中跑出異常,在Service中處理異常。但DAO中也可以處理異常,并做轉(zhuǎn)義拋出,不要隨便拋出RuntimeExeption,因?yàn)檫@是JVM拋出的,不需要你可以去拋出,因?yàn)镽untimeException往往會(huì)導(dǎo)致系統(tǒng)掛起。

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

創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買多久送多久。


網(wǎng)頁(yè)標(biāo)題:JDBC優(yōu)化策略總結(jié)-創(chuàng)新互聯(lián)
URL標(biāo)題:http://weahome.cn/article/dsichj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部