我们必须在多个表中插入2百万条记录,现在我们正在写入CSV文件并使用db2 import加载到数据库中。
我们希望将此逻辑更改为某种JDBC。在研究多种选择时,我对Spring JDBC模板和普通JDBC感到困惑。
让我们说我想在10个表中插入100万条记录,每个表都有10万个,所有这些都是简单的JDBC语句(不是预备语句,因为我不知道我在运行时处理哪个表)。
无论我们选择哪种系统,都需要处理多达1500万条记录,以便达到峰值请求。
哪个框架会更好?
答案 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());
}
就是这样。