0
我的设置是:作为JBoss 7.1.1和PostgreSQL插入时间过长
当没有或者非常少的(几百)表中的记录,我的插入/更新完成非常快。 但是当记录数达到几千时,插入或更新需要很长时间。例如:插入记录需要1秒或2秒以上。
不知道问题出在哪里或从哪里开始。
我的代码更新数据库看起来是这样的 -
public long updateRecord(long id, List<MyData> myDataList) {
Event eventFromDB = findById(id).get(0);
List<MyData> myDataListFromDB = eventFromDB.getMyData();
for(MyData myData : myDataList) {
myDataListFromDB.add(myData);
}
em.merge(eventFromDB);
return myDataList.size();
}
我是一个新手,并先后成立了JBoss AS中,以我的知识。
我还没有在JBOSS AS或PostGreSQL上进行任何配置设置。
JBOSS AS使用standalone-full.xml配置文件在独立模式下运行。
在此先感谢。
jbossql=# \d event_mydata
Table "public.event_mydata"
Column | Type | Modifiers
-----------------+------------------------+-----------
event_id | bigint | not null
date_time | character varying(255) |
secs_since_1970 | double precision |
value | real |
Foreign-key constraints:
"fkcf2bc134ec016855" FOREIGN KEY (event_id) REFERENCES event(id)
和列表是一个元素集合
@ElementCollection
private List<MyData> myData;
public List<MyData> getMyData() {
return myData;
}
myDataList集合中通常有多少条记录?您可以从eventFromDb中为每个要添加的MyData对象检索MyData集合。相反,您可以检索该集合并添加所有项目。您还应该检查包含MyData信息的表是否具有外键索引,以便与持有事件数据的表关联。如果不是这样,那就能解释为什么你的方法需要很长时间才能完成。 – 2013-03-11 09:30:58
通常我会说“使用PgJDBC的COPY协议支持批量加载记录”,但我认为你不能通过JPA真正做到这一点。你可能会通过执行'getMyData()。addAll(myDataList)'获得更好的结果,但它仍然会执行很多小插入操作,但仍然会很慢,特别是如果你有很多往返时间数据库和应用服务器之间。 – 2013-03-11 10:02:52
类似的,可以参考 - http://stackoverflow.com/a/10995063/366964 – 2013-03-11 11:22:44