Spring JDBCTemplate与Plain JDBC用于插入大量记录

时间:2010-12-14 15:39:28

标签: spring jdbc jdbctemplate

我们必须在多个表中插入2百万条记录,现在我们正在写入CSV文件并使用db2 import加载到数据库中。

我们希望将此逻辑更改为某种JDBC。在研究多种选择时,我对Spring JDBC模板和普通JDBC感到困惑。

让我们说我想在10个表中插入100万条记录,每个表都有10万个,所有这些都是简单的JDBC语句(不是预备语句,因为我不知道我在运行时处理哪个表)。

无论我们选择哪种系统,都需要处理多达1500万条记录,以便达到峰值请求。

哪个框架会更好?

4 个答案:

答案 0 :(得分:6)

如果要移动大量数据,那么与使用批量复制工具(如db2import)相比,使用JDBC(或基于JDBC构建的任何库)可能是一个糟糕的选择。 JDBC会慢一个数量级,因为

  • JDBC是一个非常繁琐的协议,

  • 通常批量复制工具会在复制过程中放松约束。

时间的差异可能是极端的:批量复制工具10分钟需要花费数小时才能使用JDBC。你需要创建一个原型并做一些时间,并确定在你承诺这样的事情之前你将获得什么样的性能。

答案 1 :(得分:2)

如果您已经在使用Spring,那么您也可以使用JdbcTemplate。它使事情变得更容易,并且在一些简单的情况下意味着您不需要自己直接使用JDBC API。从本质上讲,JdbcTemplate是一个非常薄的JDBC包装器,可以删除一些恼人的样板代码。

答案 2 :(得分:2)

正如斯卡弗曼所说,如果你已经在使用Spring,那么你的选择可能是JdbcTemplate。具体来说,您可能需要查看batchUpdate()方法。 Here is a pretty good example of how it works。我用它快速插入几十万行,取得了巨大的成功。

答案 3 :(得分:0)

JdbcSession考虑​​jcabi-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());
}

就是这样。