眾所都知,數(shù)據(jù)庫(kù)事務(wù)及聯(lián)接在java操作中是一個(gè)昂貴的開(kāi)銷(xiāo),一些程序及效率的優(yōu)化在這里有很大的優(yōu)化空間,但感覺(jué)數(shù)據(jù)庫(kù)的開(kāi)啟關(guān)閉好像沒(méi)有統(tǒng)一和最優(yōu)的方案,

如上圖:假設(shè)AF為java中一次會(huì)話(huà)的過(guò)程,而bc和de表示java與數(shù)據(jù)庫(kù)操作占用的過(guò)程(當(dāng)然在會(huì)話(huà)中可能存在不止兩次的數(shù)據(jù)庫(kù)操作),現(xiàn)在可能有下面幾種情況:
1),在A之前就開(kāi)啟數(shù)據(jù)庫(kù)及事務(wù),在F之后提交或回滾事務(wù)和斷開(kāi)數(shù)據(jù)庫(kù)(這可能在有些架構(gòu)中是這樣實(shí)現(xiàn)的,因?yàn)樽鳛槌绦騿T不用考慮數(shù)據(jù)庫(kù)的聯(lián)接關(guān)閉及事務(wù),統(tǒng)一由公用類(lèi)完成)。
2),在b之時(shí)開(kāi)啟在c之后斷開(kāi),在d之時(shí)又開(kāi)啟,在e之后斷開(kāi),這也很常見(jiàn),典型的用時(shí)開(kāi),用完就斷。
3),在b之時(shí)開(kāi)啟,在F之后斷開(kāi),其實(shí)這種是跟第一種相同,只是一種改時(shí)罷了,因?yàn)槲覀兛梢源_定在一次會(huì)話(huà)中第一次用數(shù)據(jù)庫(kù),有人可能會(huì)說(shuō)在e之后斷開(kāi)不是更好,節(jié)省了ef過(guò)程的數(shù)據(jù)庫(kù)聯(lián)接開(kāi)銷(xiāo),理論上是這樣的,但是這是做不到的,因?yàn)槲覀儾恢烙昧诉@次數(shù)據(jù)庫(kù)后在這次會(huì)話(huà)中就不會(huì)再用了,所以我們只能在f點(diǎn)結(jié)束后統(tǒng)一斷開(kāi)及處理事務(wù)。
4),可能還有其它的方案是我不清楚的。
因此,我們可以看到在4方案沒(méi)有明確定義之前,只有2和3是可比較的,對(duì)于數(shù)據(jù)庫(kù)占有的時(shí)間來(lái)看,2方案是肯定優(yōu)于3的,但是我們清楚數(shù)據(jù)庫(kù)的開(kāi)啟及聯(lián)接本身也是一個(gè)比較大的開(kāi)銷(xiāo),就像一個(gè)電視機(jī),多開(kāi)些可能會(huì)浪費(fèi)些電,但如果總是一開(kāi)一關(guān)的話(huà),電視機(jī)也容易壞。如要有一個(gè)統(tǒng)一的轉(zhuǎn)化參考標(biāo)準(zhǔn):一次開(kāi)銷(xiāo)代表多少,而占用的時(shí)間又代表多少,那么我們肯定可以選出一個(gè)最優(yōu)方案來(lái),但這看來(lái)是很難做到的(看來(lái)軟件的設(shè)計(jì)遠(yuǎn)沒(méi)有種田來(lái)的實(shí)在啊).
個(gè)人感覺(jué)應(yīng)該采取第3種方案,因?yàn)橐恍┓菙?shù)據(jù)庫(kù)的處理多半是內(nèi)存中的處理及運(yùn)算,應(yīng)該很快(但話(huà)是不能絕對(duì)的,java的一些文件處理及遠(yuǎn)程調(diào)用等可能也很慢)。
如在數(shù)據(jù)庫(kù)調(diào)用方面有何見(jiàn)解,望多探討,以上屬個(gè)人愚見(jiàn),望能拋磚引玉。