2

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

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

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

无论我们选择什么系统,都需要为峰值请求处理插入多达 1500 万条记录。

哪个框架会更好?

4

4 回答 4

6

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

  • JDBC 是一个非常健谈的协议,并且

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

时间上的差异可能非常大:批量复制工具需要 10 分钟,而使用 JDBC 可能需要几个小时。你会想要创建一个原型并做一些时间安排,并确定在你承诺这样的事情之前你会得到什么样的性能。

于 2010-12-14T17:11:58.623 回答
2

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

于 2010-12-14T15:43:14.327 回答
2

正如 skaffman 所说,如果您已经在使用 Spring,那么您的选择可能是JdbcTemplate. 具体来说,您可能想查看该batchUpdate()方法。这是一个很好的例子,说明它是如何工作的。我用它快速插入了几十万行并取得了巨大的成功。

于 2010-12-14T17:09:48.640 回答
0

考虑来自jcabi -jdbc的 JdbcSession 。它就像 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());
}

而已。

于 2012-05-17T11:49:12.620 回答