【发布时间】:2014-02-05 21:54:58
【问题描述】:
我一直在读到一些较新的 JDBC 连接池(如 Tomcat)不支持客户端语句池。我已经读到这是因为大多数 JDBC 驱动程序都维护自己的语句缓存。但是,我认为 PostgreSQL 不会发生这种情况。
我说的对吗?如果是这样,我应该使用可以缓存准备好的语句的连接池以获得最佳的批量插入性能吗?
谢谢
【问题讨论】:
-
要获得最佳的批量插入性能,您应该使用通过 PgConnection 访问的
COPYAPI。 AFAIK PgJDBC 不维护“语句缓存”,我不确定这样的事情是否有效,因为每个会话都有自己独立的一组服务器端准备好的语句。 PgJDBC 的语句批处理目前非常无用,顺便说一句,它只是单独发送它们。 -
感谢克雷格,不幸的是事情没那么简单。此批次来自 JSON,并使用 JPA 解析为具有各种关系的对象图。很难整理出各种 ID 来创建文件以进行 COPY。 FWIW,如果您甚至执行 20 条相同的准备好的语句,那么只需准备一次该语句并重用它,就会有相当大的价值。
标签: postgresql jpa jdbc