2014-07-13 43 views
1

我在使用Hibernate作爲ORM的Java EE項目工作,我已經到了一個階段,我必須對我的類,如SUM,COUNT,加法和除法執行一些數學計算。查詢計算與編程

我有2個解決方案:

  1. 要選擇我的課,並在我的代碼
  2. 做我的命名查詢計算編程應用這些操作

我想在以下方面來取悅性能和速度,哪一個更好?

並且謝謝

+0

我相信測試和決定都很簡單。你有一些性能測試數據嗎? –

+0

以及我的課程是如此之大和複雜,測試兩種方式不會很容易(需要很多時間),所以我喜歡問這裏希望能找到答案,然後我嘗試測試它我的自我 –

+0

大而複雜的類氣味壞。首先解決它們:-p –

回答

2

如果您打算在同一個事務中加載您希望從數據庫進行聚合的相同實體,那麼如果使用Java進行計算,則性能會更好。 它爲您節省了一次往返數據庫的時間,因爲在這種情況下,您已經擁有了內存中的實體。 其它好處是:

  • 更容易單元測試的計算,因爲你能堅持到基於Java的單元測試框架
  • 保持邏輯的一種語言
  • 還將爲實體集合的工作,還沒有被堅持

但是,如果你不打算加載你想要做計算的實體的同一組實體,那麼你將得到幾乎任何情況下的性能改進,如果你讓數據庫進行計算。涉及的實體越多,性能優勢就越大。

想象一下,對今年訂單中的所有訂單項進行彙總,其中可能有數百萬訂單項。

應該清楚的是,不得不通過TCP連接將所有這些實體加載到Java進程的內存中(即使它在同一臺機器中),首先需要更多的時間和更多的內存,而不是讓數據庫執行計算。

如果您的映射需要每個實體的額外查詢,那麼Hibernate至少會爲每個實體進行一次額外的數據庫往返,在這種情況下,在數據庫中計算SQL的性能好處將會更大。

+0

完美答案Erwin,這就是我一直在尋找的,謝謝:) –

+0

你歡迎:-) –

0

這些是對實體(或數據)的計算嗎?如果是的話,那麼你確實可以去查詢(甚至更快,使用sql查詢iso hql)。從性能的角度來看,國際海事組織(IMO)的存儲過程非常閃耀,但人們並不經常在休眠時使用它們。另外,如果您有一些頻繁的重複計算,請嘗試在您的應用程序中使用緩存。

+0

對這些計算的實體,如attributs的加法和乘法 –