2010-12-14 52 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()); 
} 

就是这样。