gpt4 book ai didi

java - 实体管理器提交的性能不佳 - 指数

转载 作者:行者123 更新时间:2023-12-02 07:04:17 27 4
gpt4 key购买 nike

我正在使用带有 eclipse link 2.3 &Derby db 的实体管理器 JPA,并且我有包含 10 个实体的模型,对于每个实体,我需要存储 1000 条记录,此过程大约需要 70 秒。我已经对具有 10 个实体但具有 100 条记录的相同模型进行了测试,提交的所有过程大约需要 1.2 秒,这非常好。

瓶颈是entityManager.getTransaction().commit();我在保存所有数据后只执行了一次,提交占用了整个过程的 95% 以上。当我使用 JVM 监视器时,我深入到提交,发现其中一个类负责几乎所有提交时间,该类是 org.eclipse.persistence.mappings.ManyToManyMapping

http://www.eclipse.org/eclipselink/api/1.0/org/eclipse/persistence/mappings/ManyToManyMapping.html

我的实体和模型没有有任何多对多关系或使用任何多对多注释,指数行为的原因可能是什么?

我注意到,当我删除这两个实体时,时间节省了 85%

这个实体出了什么问题

导航是从基数1的人到基数N的标题奖项,即一个人可以获得多个奖项...

@javax.persistence.Entity
@javax.persistence.Table(name = "a3_Person")
public class Person {
@javax.persistence.Id
@javax.persistence.Column(length = 20)
//// Id;
private String person_id;
public String getPerson_id() { return this.person_id; }
public void setPerson_id(String person_id) { this.person_id = person_id; }

@javax.persistence.Column(length = 30)
//// Name;
private String person_name;
public String getPerson_name() { return this.person_name; }
public void setPerson_name(String person_name) { this.person_name = person_name; }

//// Awards;
private List<TitleAward> person_awards;
public List<TitleAward> getPerson_awards() { return this.person_awards; }
public void setPerson_awards(List<TitleAward> person_awards) { this.person_awards = person_awards; }

}




@javax.persistence.Entity
@javax.persistence.Table(name = "a3_TitleAward")
public class TitleAward {
@javax.persistence.Id
@javax.persistence.Column(length = 20)
//// Id;
private String titleaward_id;
public String getTitleaward_id() { return this.titleaward_id; }
public void setTitleaward_id(String titleaward_id) { this.titleaward_id = titleaward_id; }

@javax.persistence.Column(length = 30)
//// Type;
private String titleaward_type;
public String getTitleaward_type() { return this.titleaward_type; }
public void setTitleaward_type(String titleaward_type) { this.titleaward_type = titleaward_type; }

@javax.persistence.Column(length = 30)
//// Category;
private String Cateeheihbadc;
public String getCateeheihbadc() { return this.Cateeheihbadc; }
public void setCateeheihbadc(String Cateeheihbadc) { this.Cateeheihbadc = Cateeheihbadc; }

@javax.persistence.Column()
//// Year;
private String titleaward_year;
public String getTitleaward_year() { return this.titleaward_year; }
public void setTitleaward_year(String titleaward_year) { this.titleaward_year = titleaward_year; }

@javax.persistence.Column()
//// Won;
private Boolean titleaward_won;
public Boolean getTitleaward_won() { return this.titleaward_won; }
public void setTitleaward_won(Boolean titleaward_won) { this.titleaward_won = titleaward_won; }

//// Person;
private Person Pers_fhfgdcjef;
public Person getPers_fhfgdcjef() { return this.Pers_fhfgdcjef; }
public void setPers_fhfgdcjef(Person Pers_fhfgdcjef) { this.Pers_fhfgdcjef = Pers_fhfgdcjef; }

}

最佳答案

此处概述了许多性能优化,

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

ManyToManyMapping 也用于使用 @JoinTable 的 @OneToMany 注释,您使用这个吗?一般来说,正确分析和理解配置文件可能很困难,因此您的配置文件可能无效。

请包含您的代码、SQL 日志示例和配置文件。您还可以启用 EclipseLink PerformanceMonitor,

看, http://www.eclipse.org/eclipselink/documentation/2.4/concepts/monitoring003.htm

如果 100 条记录只需要 1.2 秒,那么您可能可以将流程分成 100 条批处理,并获得 12 秒而不是 70 秒。 70 年代听起来好像您遇到了某种 n^2 问题。

关于java - 实体管理器提交的性能不佳 - 指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16292797/

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