2012-01-04 123 views
2

我有一個Java Web應用程序,它使用Hibernate將數據存儲到數據庫中並檢索它們。Java Web應用程序內存處理

我目前使用的策略是:在開始菜單上的應用程序加載一切從數據庫中,並保存/更新他們的數據庫作爲用戶與應用程序交互。

我也做過的事情是跟蹤作爲業務邏輯的一部分的每個用戶的交易歷史記錄。 (所以這個交易歷史記錄都是在應用程序啓動時加載的)。

我能看到的問題是我不應該加載所有用戶的所有交易歷史記錄,因爲如果有很多交易歷史記錄,並且用戶可能不一定需要查看它們,那可能是很多內存都用完了,所以效率不高。

我在想,如果有什麼類似於PHP腳本可以做,這是剛剛查詢數據庫,只有當用戶請求查看交易歷史,所以它不使用服務器資源。 (除了查詢數據庫)還有什麼建議/意見關於我現在面臨的問題。

謝謝。

+1

爲什麼不只是在需要給定信息時查詢Hibernate? – 2012-01-04 06:55:52

+0

其實,是的。那真是太傻了。 但是,舉例來說,我有一大塊數據,並且它經常需要,那麼將它保存在內存上更好嗎?在這種情況下做什麼? – HeavenAgain 2012-01-04 07:00:24

+0

告訴休眠,讓它管理緩存。 – 2012-01-04 07:03:58

回答

0

當你需要一個給定的信息並讓Hibernate管理把它放回數據庫時查詢Hibernate。這將允許Hibernate管理緩存。

請注意,使用Hibernate時,應讓Hibernate完全管理數據。不要使用原始SQL自行添加或更改數據。

如果您使用的是現代的容器,你應該考慮遷移到JPA,因爲它是Java EE容器的標準,讓你當你需要擴展更加靈活。 JPA非常接近Hibernate,但它是一個API,而不是一個實現,所以你有多個可供選擇的。

+0

也許我沒有正確理解Hibernate。我每次更新對象/實體屬性時都會按照此順序打開,更新,提交和關閉會話。我認爲這會阻止數據庫與程序的當前狀態不同步。但是你所建議的是讓會話保持打開狀態,以便Object在用戶關閉會話/註銷時保持不變並更新,提交和關閉會話? – HeavenAgain 2012-01-04 07:30:21

+0

我對Hibernate並不熟悉。 Hibernate文檔建議你在這種情況下做什麼? – 2012-01-04 07:32:08

+0

我其實只是看了這個,有兩種方法來解決這個問題,一個是我目前使用的;每個操作的會話,另一個是每個請求的會話。我實際上需要研究這個以獲得更好的理解。 (雖然,對我而言,每個操作的會話都是有意義的,因爲我需要保持數據庫與應用程序同步。但是,我可以看到,我沒有利用Hibernate提供的持久性) 同時,感謝您的回答和您的幫助! – HeavenAgain 2012-01-04 08:10:48

0

爲什麼不爲每個請求查詢hibernate進來並在響應後發佈?這是一種常見的方法。