2010-12-14 60 views
2

我們必須在多個表中插入2百萬條記錄,現在我們正在寫入一個CSV文件,並使用db2 import將其加載到數據庫中。Spring JDBCTemplate vs Plain JDBC用於插入大量記錄

我們想將這個邏輯改爲某種JDBC。在研究多個選項時,我對Spring JDBC模板和普通JDBC感到困惑。

讓我們說我想插入100萬條記錄到10個表中,每個表都有10萬個表,這些都是簡單的JDBC語句(沒有準備好的語句,因爲我不知道我在處理哪個表運行)。

無論我們選擇哪種系統,都需要處理插入高達1500萬條峯值請求的記錄。

哪個框架會更好?

+1

那麼這個改變對你來說是如何實現的? – 2011-08-05 15:04:09

回答

2

如果您已經在使用Spring,那麼您還可以使用JdbcTemplate。它使事情變得簡單一些,並且在一些簡單的情況下意味着您不需要直接使用JDBC API。從本質上講,JdbcTemplate是一個非常簡潔的JDBC包裝器,可以刪除一些煩人的鍋爐代碼。

+0

但看着這個http://forum.springsource.org/archive/index.php/t-59970.html我覺得像春天jdbc很慢... – sanumala 2010-12-14 15:44:54

+1

@sanumala:我不能說我曾經發現它特別慢,但爲什麼不嘗試一下,看看它在性能方面是否適合你?不成熟的優化是邪惡的,所有這一切。 – GaryF 2010-12-14 15:49:11

+1

@sanumala:基於2年前的第三方意見,你覺得它很慢? – skaffman 2010-12-14 15:52:34

2

正如skaffman所說,如果您已經在使用Spring,那麼您的選擇可能是JdbcTemplate。具體而言,您可能需要查看batchUpdate()方法。 Here is a pretty good example of how it works。我用它快速插入了幾十萬行,取得了巨大的成功。

+0

我在我的應用程序中使用了批量更新,但這是一種不同的requiremnet,我正在寫春天邏輯讓我們看看它是如何工作的... – sanumala 2010-12-15 14:51:39

5

如果要移動大量數據,那麼與使用批量複製工具(如db2import)相比,使用JDBC(或建立在JDBC之上的任何庫)可能是一個不好的選擇。 JDBC將是大小慢幾個數量級,因爲

  • JDBC是一個非常健談協議,和

  • 通常批量複製工具在複製過程中放鬆約束。

時間的差異可能是極端的:什麼需要大量複製工具10分鐘可能需要幾個小時使用JDBC。你會想要創建一個原型,並做一些時間安排,並確定在你做出這樣的事情之前你會得到什麼樣的表現。

0

考慮JdbcSessionjcabi-jdbc。它就像JDBC一樣簡單(例如插入一百萬條記錄):

JdbcSession session = new JdbcSession(source); 
for (int i = 0; i < 1000000; ++i) { 
    session.sql("INSERT INTO foo (number) VALUES (?)") 
    .set(i) 
    .insert(new VoidHandler()); 
} 

就是這樣。