2015-10-13 43 views
0

我在我的jpa應用程序中使用eclipselink和postgresql。將一個新實體添加到ManyToOne關聯需要大量的CPU電源

我有3個鏈接如下的表:將@OneToMany記錄到ArchiveMediasRecords,AchiveMedia @OneToMany到ArchiveMediasRecords以及ArchiveMediasRecords與@ManyToOne記錄和AchiveMedia。

ArchiveMediasRecords是一個爲Record和AchiveMedia之間的關聯提供屬性信息的表。

我的問題是,我插入一個記錄每100毫秒,插入完成使用10線程池。

我做這樣的事情:

創建新的記錄
創建新的EntityManager(每線程執行一個新的EM)
創建一個事務,並啓動它
對於每個ArchiveMedia宣佈,執行ASSOCATION通過ArchiveMediasRecords記錄
堅持記錄(級聯也宣佈,使其更容易)
提交事務

的databa se已更新,那裏沒有問題。

問題是,記錄數可能相當大(> 400000),但ArchiveMedia不是(< 20)。

當我將記錄添加到archivemedia時,在ArchiveMedia中的@OneToMany關聯的IndirectList上添加的方法花費了大量的時間和大量的CPU功耗。

有沒有辦法減少大XXXToMany簡單的關聯過程?

回答

0

好了,因爲我wan't能夠找到如何優化我的大量插入,我tryied別的東西:

我在插入記錄實體沒有關聯。然後我通過使用jpa的低級別jdbc插入關聯。

它允許將java進程的CPU負載從20%降低到1%,並將postgresql進程的cpu負載從18%降低到1%到<。

大獲成功!

但是,這主要是一個解決方案,而不是一個真正的解決方案。無論如何,問題解決了。

相關問題