gpt4 book ai didi

EclipseLink 插入数据非常慢

转载 作者:行者123 更新时间:2023-12-02 05:53:26 27 4
gpt4 key购买 nike

我使用的是最新的 EclipseLink 版本和 MySQL 5.5(表类型 InnoDB)。我一次插入大约 30900 条记录(也可能更多)。问题是,插入性能很差:插入所有记录大约需要 22 秒(与 JDBC 相比:7 秒)。我读到使用批量写入应该有所帮助 - 但没有!?

@Entity
public class TestRecord {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;

public int test;
}

插入记录的代码:

factory = Persistence.createEntityManagerFactory("xx_test");
EntityManager em = factory.createEntityManager();

em.getTransaction().begin();

for(int i = 0; i < 30900; i++) {
TestRecord record = new TestRecord();
record.test = 21;
em.persist(record);
}

em.getTransaction().commit();
em.close();

最后是我的 EclipseLink 配置:

<persistence-unit name="xx_test" transaction-type="RESOURCE_LOCAL">
<class>com.test.TestRecord</class>

<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/xx_test" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="test" />

<property name="eclipselink.jdbc.batch-writing" value="JDBC" />
<property name="eclipselink.jdbc.cache-statements" value="true"/>

<property name="eclipselink.ddl-generation.output-mode" value="both" />
<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />

<property name="eclipselink.logging.level" value="INFO" />
</properties>
</persistence-unit>

我做错了什么?我尝试了几种设置,但似乎没有任何帮助。在此先感谢您对我的帮助! :)

-斯特凡


另一件事是将 ?rewriteBatchedStatements=true 添加到连接器使用的数据 URL。

这导致执行大约 120300 次插入减少到大约 30 秒,而之前大约是 60 秒。

最佳答案

JDBC 批处理大大提高了性能;请尝试一下

例如:property name="eclipselink.jdbc.batch-writing"value="JDBC"

关于EclipseLink 插入数据非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6426655/

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