2011-07-20 190 views
1

HI:我有一個多線程的Java數據庫應用程序,我們必須創建一個定製的數據庫池。原因是我們的一些預備聲明必須緩存在連接中。我們有一個基於一個免費hashmap的原始解決方案,另一個是鎖定的hashmap。使用散列表,我們必須使用同步方法,然後我們的吞吐量受到影響。選擇是使用concurrentHashMap,以便同步部分儘可能小。是否有一些示例代碼?或者我應該下載apache DBCP源代碼來閱讀?Java:JDBC數據庫連接池

+0

哪裏需要緩存準備好的語句來自哪裏?你需要多久緩存它們? – Olaf

+0

線程池的示例代碼或使用併發哈希映射的示例代碼。 P.S你是否使用哈希映射只是爲了查看連接是否是免費的?不會有一個FIFO隊列是一個更好的候選..後來不能有這麼多的連接,以負擔你的服務器內存明智 –

+0

我做了一個簡單的類維護一個簡單的連接池,如果你想我可以在幾個小時內上傳當我回家時),雖然我不知道這是否是你要找的 –

回答

1

使用同步將花費你大約1-2微秒。如果這對你至關重要,你不應該使用JDBC。恕我直言。僅通過TCP連接訪問服務可能需要100微秒,許多JDBC數據庫的延遲爲1-10毫秒。

我懷疑每個查詢/更新幾毫秒對您來說很好,在這種情況下使用同步不太可能發生。

根據您有多少個線程,您可以爲每個線程設置一個線程本地連接。這儘可能地減少了開銷。

0

你有一個多線程應用程序,但許多線程同時使用相同的數據庫連接嗎?由於PreparedStatement緩存將在連接級別完成,因此如果連接一次由單個線程使用(我認爲應該是這種情況),則不需要同步。