如何使 eclipselink 在批量插入方面表现更好

Posted

技术标签:

【中文标题】如何使 eclipselink 在批量插入方面表现更好【英文标题】:How to make eclipselink perform better about bulk insert 【发布时间】:2013-04-03 17:04:45 【问题描述】:

我正在测试 eclipselink 以使批量数据插入 derby。 同组数据对比,eclipse链接jdbc批量更新耗时加倍。

I have enabled the batchupdate feature of eclipse link, and the other properties:

        <property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
        <property name="eclipselink.jdbc.batch-writing.size" value="1000"/>
        <property name="eclipselink.jdbc.cache-statements" value="true"/>
        <property name="eclipselink.jdbc.cache-statements.size" value="30"/>
        <property name="eclipselink.cache.shared.default" value="false"/>
        <property name="eclipselink.jdbc.read-connections.max" value="20"/>
        <property name="eclipselink.jdbc.read-connections.min" value="1"/>
        <property name="eclipselink.jdbc.write-connections.min" value="1"/>
        <property name="eclipselink.jdbc.write-connections.max" value="30"/>

问题是如何让eclipse链接更快?

【问题讨论】:

【参考方案1】:

请附上代码和 SQL 日志。还包括您的 JDBC 代码,并确保它是 kosher(结束语句等)。

您是否使用序列预分配?如果没有,那么您将不会获得任何批处理(检查您的 SQL 日志以查看批处理是否正在发生)。

我不会更改连接池默认值,您的效率低于默认值(初始 1,最小 32,最大 32,没有单独的读/写池)。具有不同的最小值/最大值会导致连接限制,这很糟糕。

看, http://java-persistence-performance.blogspot.com/2011/06/how-to-improve-jpa-performance-by-1825.html

由于 JPA 在 JDBC 之上运行,因此总是比完全优化的 JDBC 代码花费更多的时间。但是确实有让你使用Java对象而不用写JDBC代码的优点,并且只需要修改一个flag就可以进行批量写入等重大优化,而不是重写代码。

【讨论】:

以上是关于如何使 eclipselink 在批量插入方面表现更好的主要内容,如果未能解决你的问题,请参考以下文章

Eclipselink 和 Postgresql 批量编写

通过批量读取避免 N+One 选择和来自 eclipselink 的无效结果

为啥批量插入/更新更快?批量更新如何工作?

以编程方式使所有关系CascadeType.MERGE

如何在 node.js 中使用 sqlite3 执行批量插入?

批量插入数据