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

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