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