2012-03-05 32 views
4

1)什麼是應該連接到會話的對象的可接受大小範圍?如果我附加一個可以是5k的對象,並且在任何給定的時間我都有10k個有效會話,那麼這是50MB的內存,這對我來說似乎是可以接受的。這是解決問題的有效方法,還是存在其他重大問題?Servlet會話屬性大小和生命週期

2)這可能是一個愚蠢的問題,但如果我附上一個對象的會話與2周的一生,我可以訪問屬性,就好像是在內存中的會話的整個過程?

3)是否有什麼理由不始終堅持會話信息到數據庫?

回答

3
  1. 可接受的大小取決於您的用例和併發會話數。如果您的會話持續2周,那麼可以設想您可以進行大量併發會話,但是如果10k是您的最大預期值,那麼對於5k會話對象應該沒有問題(如您的計算所示)。

  2. 只要你有會話對象的引用(或能夠得到這樣的參考),那麼數據將在會議上堅持。請記住,您的會話對象必須是可序列化的。

  3. 您可能不希望所有的會話數據保存到性能方面的原因分貝,特別是如果會話數據可以很容易地重新創建。

3
  1. 的Java EE不限制HTTP會話的大小。您的web應用程序的RAM要求將是x + su * s,其中「x」是其他所有內容,「su」是併發會話用戶的最大數量,「s」是會話對象大小本身。所以,如果這是一個不超過5個用戶的應用程序,那就去做吧。如果它有1500個用戶,您可能需要重新考慮。序列化/反序列化每個會話對象所需的時間將隨着對象的大小或多或少線性增加。因此,如果預計會有很多序列轉換,請做好準備。
  2. 只要你的會話還活着,你就可以。
  3. 持續性數據的性能價格昂貴,只有在需要恢復羣集中的會話複製時才應該執行此操作。