Spring JDBCTemplate 与 Plain JDBC 插入大量记录的比较

发布于 2024-10-07 17:08:18 字数 286 浏览 9 评论 0原文

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

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

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

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

哪个框架会更好?

We have to insert 2 millions of records across multiple tables and right now we are writing into a CSV file and using db2 import to load into database.

We wanted to change this logic to some kind of JDBC. While looking into multiple options, I am confused with Spring JDBC template and plain JDBC.

Let us say I wanted to insert 1 million records into 10 tables, each of which will have 100 thousand, and all these are simple JDBC statements (not prepared statements because I don't know which table I am dealing with at runtime).

Whatever system we choose will need to handle inserting up to 15 million records for a peak request.

Which framework will be better?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

醉生梦死 2024-10-14 17:08:18

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

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

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

    通常批量

时间上的差异可能非常大:使用批量复制工具需要 10 分钟,而使用 JDBC 则需要几个小时。在做出这样的事情之前,您需要创建一个原型并进行一些计时,并确定您将获得什么样的性能。

If you want to move a lot of data, then using JDBC (or any library building on top of JDBC) may be a bad choice, compared to using bulk copy tools (like db2import). JDBC is going to be orders of magnitude slower, because

  • JDBC is a very chatty protocol, and

  • usually bulk copy tools relax constraints during the copy process.

The difference in time can be extreme: what takes the bulk copy tool 10 minutes can take hours using JDBC. You'll want to create a prototype and do some timings and be certain about what kind of performance you'll get before you commit to something like this.

杀お生予夺 2024-10-14 17:08:18

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

If you're already using Spring, then you may as well use JdbcTemplate. It makes things a bit easier, and in some simple cases means you need not use the JDBC API directly yourself. Essentially, JdbcTemplate is a very thin wrapper around JDBC that removes some of your annoying boiler-plate code.

瑾兮 2024-10-14 17:08:18

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

As skaffman said, if you are already using Spring then your choice is probably JdbcTemplate. Specifically you may want to look at the batchUpdate() method. Here is a pretty good example of how it works. I've used it to insert a couple hundred thousand rows quickly with great success.

绝影如岚 2024-10-14 17:08:18

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

就是这样。

Consider JdbcSession from jcabi-jdbc. It's as simple as JDBC should be, for example (inserting a million records):

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

That's it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文