2009-09-20 91 views
1

我有一個j2ee webapp,大約20-30人在內部使用。在小型webapp中存儲會話中的數據庫連接

用戶數量沒有顯着增長的機會。

從我所瞭解的情況來看,在Web應用程序向每個請求打開一個新數據庫連接(昂貴但不阻止其他用戶使用數據庫時)之間的權衡,使用單例模式(不會打開新的連接,但一次只允許一個用戶)。

我認爲,因爲我知道只有30個用戶會同時使用我的web應用程序,所以最簡單和最好的解決方案就是將連接存儲爲會話屬性,從而將開放的數量降至最低同時仍然爲每個用​​戶分配一個連接。 你覺得呢?

回答

3

從我知道有開放供到 webapp的

這就是連接池是由每個請求一個新的數據庫連接 之間的 權衡。如果您在應用程序中使用連接池,則一旦初始化池,負責在需要時提供應用程序中的連接以供使用。在適當調整的連接池中,將有足夠的連接創建保留,可以提供給應用程序,從而減輕只有在應用程序請求時才創建和打開連接的需要。

我想,既然我知道,只有 30用戶將永遠使用我的webapp在 的同時,也許是最簡單和 最好的解決辦法是將存儲 連接的會話屬性

每個用戶的連接並不是一個好主意,主要是當涉及一個Web應用程序時。在Web應用程序中,用戶可以向服務器發起多個請求(想想多選項卡式瀏覽)是完全可能的。在這種情況下,每個用戶使用單個連接將導致怪異的應用程序行爲,除非您同步對連接的訪問​​。

還必須考慮將瞬態屬性放入會話中的副作用 - 連接對象不可序列化,因此必須標記爲瞬態。如果會話在某個時間點被反序列化,那麼必須考慮Connection對象不可用並且必須重新初始化的事實。

0

不,不要那樣做。每次需要時重新連接到數據庫完全可以。任何數據庫管理系統都會自己做連接池緩存。

如果您想嘗試保持開放式連接,您將難以置信地以安全,無缺陷,安全等方式來管理此連接。

+0

那麼,我現在試着保持連接活着。 JSP的我做了很多小的Ajax請求,其中我肯定看到了性能的提高。可能是因爲在這些Ajax請求中發送的查詢+數據非常小,因此建立連接會導致大部分開銷。 另外,我完全理解,這種方法「看起來」是錯誤的,像所有程序員一樣,我也有一個強迫症的強迫症代碼:) 但是,當我想通過它時,我看不到任何方式導致任何安全性或蟲子......你能舉個例子嗎? – olamundo 2009-09-20 14:23:23

1

我認爲你正在進入不成熟的優化,尤其是考慮到應用程序的規模。打開一個新的連接並不昂貴,像Makach說的那樣,大多數現代的RDBMS都處理連接池,並將連接打開以供後續請求使用。可以這麼說,你會試圖編寫比編譯器更好的代碼。