2011-11-15 25 views
1

我有一個服務端點,基本上將一些數據插入到mysql中。我正在尋找將行插入到mysql中的最快方法。在Java中插入MySQL的最快方法

我不介意它是非常詳細的還是需要更長時間才能進行更改(與使用hibernate相比),因爲此servlet的範圍非常小,但性能是最重要的。

我對java/servlets很陌生,所以請不要在此留下任何細節或承擔很多責任。

回答

4

最快的方法可能是直接使用JDBC驅動程序並自己編寫SQL。 下面是一些示例代碼,看起來不錯:http://www.roseindia.net/jdbc/jdbc-mysql/InsertValues.shtml

人們使用Hibernate的原因很多。除了將類映射到數據庫表更簡單外,它還處理緩存,連接池和類似的東西。打開一個新的數據庫連接需要花費很多時間,所以你將不得不自己實現類似的東西,以使你的servlet表現良好。

+0

哦,這麼原始servlet和使用JDBC會不會有連接池? – codecompleting

+0

@codecompleting:如果您使用JDBC 3數據源,但是我不確定這是JDBC驅動程序自己實現的東西。 –

0

請務必使用連接池或類似的東西。這是迄今爲止最大的因素。

它也可能有助於使用實際上持續存在於servlet請求中的PrepraredStatement,以便每次都不用分析請求。

通過簡單地將數據庫連接以及PreparedStatement保存在ThreadLocal中,可以實現兩者結合,但假定servlet容器使用線程池。

更新:c3p0顯然同時實現了連接和語句池,所以我只是使用它。

0

如果你不使用JPA,我建議使用的JdbcTemplate從春(即使你不使用Spring以其他方式)來管理連接(關閉它們等)

使用的PreparedStatement。

請勿直接初始化驅動程序/連接。而是使用在您的應用程序服務器中配置的池化數據源(您可以使用@Resource注入它)。

使用EJB進行事務管理。

0

如果您只插入一行,則可能準備好的簡單插入查詢可能是最快的。使用一個連接池,所以你不必每次都連接,並且數據庫上有一些調整參數會有所幫助。

如果您可以避開它,我會建議您不要在servlet中實際插入數據,而只是將數據放入由另一個線程插入數據庫的內存隊列中。不過,您不會知道它是否成功或者不在servlet響應中。

http://dev.mysql.com/doc/refman/5.0/en/innodb-tuning.html http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html

相關問題