2012-05-17 21 views
1

我有2個服務器,一個使用Spring進行數據庫連接處理的Java應用程序,另一個使用MySQL。 兩臺服務器之間的Ping延遲大約爲100ms。彈簧與遠程數據庫。如何最小化網絡延遲開銷?

Java服務器一次使用批量插入到DB,2000行。它似乎需要100ms x 2000插入= 200,000毫秒來做這個大容量插入!

有沒有辦法最大限度地減少這種網絡延遲?使用交易有助於減少它嗎?

任何想法,非常感謝。

回答

1

像其他答案一樣,嘗試使用批處理。但是如果MySQL JDBC驅動程序沒有優化它們,它將無濟於事。在此處查看其他可能解決方案的答案:JDBC batch insert performance

+0

偉大的鏈接。這就是解決它'jdbc:mysql:// host:3306/db?useServerPrepStmts = false&rewriteBatchedStatements = true'。現在,當它發送2000個INSERT查詢時,它們全部在1個查詢中,而不是2000個單獨的查詢。用general_log = 1來診斷。現在擺弄持續連接。謝謝! – Amer

1

交易只會給你更多開銷。 (儘管這並不意味着你不應該使用它們。)我認爲批量做事可能會有所幫助。這將減少爲每個插入物建立新的網絡連接的開銷。如果可能,您也可以考慮在Java服務器上緩存內容;儘管這隻會幫助讀取,而不會寫入。

+0

每次查詢添加到批量插入時,通過相同的連接,它仍需要100ms才能完成。 CONNECT完成一次,然後查詢2000 INSERT,然後QUIT。 – Amer

+0

嘗試在沒有批量插入的情況下執行此操作並查看其差異。 –