gpt4 book ai didi

java - 关于加速 JDBC 写入的技巧?

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:57 24 4
gpt4 key购买 nike

我正在编写一个对 Postgres 数据库进行大量写入的程序。在一个典型的场景中,我会写 100,000 行到一个规范化良好的表(三个外部整数键,它们的组合是主键和表的索引)。我正在使用 PreparedStatements 和 executeBatch(),但是当我们要替换的嵌入式数据库(具有相同的外键约束和索引)在10.

我是 JDBC 的新手,我不希望它能击败自定义嵌入式数据库,但我希望它只慢 2-3 倍,而不是 7 倍。有什么明显的我可能遗漏的吗?写入的顺序重要吗? (即说它是否不是索引的顺序?)。挤出速度要注意什么?

最佳答案

这是我在当前项目中经常遇到的问题。对于我们的应用程序,插入速度是一个关键瓶颈。但是,我们发现对于绝大多数数据库用户而言,选择速度是他们的主要瓶颈,因此您会发现有更多资源可以解决该问题。

下面是我们提出的一些解决方案:

首先,所有解决方案都涉及使用 postgres COPY command .使用 COPY 将数据导入 postgres 是迄今为止最快的可用方法。但是,默认情况下 JDBC 驱动程序当前不支持跨网络套接字的 COPY。因此,如果您想使用它,您将需要执行以下两种解决方法之一:

  1. JDBC 驱动程序打了补丁以支持 COPY,例如这个 one .
  2. 如果您要插入的数据和数据库位于同一台物理机器上,您可以将数据写出到文件系统上的一个文件中,然后使用 COPY 命令批量导入数据。

其他提高速度的选项是使用 JNI 访问 postgres api,这样您就可以通过 unix 套接字进行通信,删除索引和 pg_bulkload project .但是,如果您最终不实现 COPY,您总会发现性能令人失望。

关于java - 关于加速 JDBC 写入的技巧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/368736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com