2012-02-07 91 views
3

我正處於一個web項目的早期階段,該項目需要處理包含大約500個自定義對象類型元素的數組。對象可能包含10到40個字段(基於用戶輸入),主要是布爾值,字符串和浮點數。我將爲這個項目使用PHP,但我也有興趣知道如何在Java中處理這個問題。將數據保存在數據庫或會話中

我知道「過早優化是萬惡之源」,但我想我現在需要決定,我該如何處理這些數組。我是否將它們保留在Session對象中,還是將它們存儲在數據庫(mySQL)中,並在會話中保留最少量的鍵。在會話中保持數據會加快應用程序的運行速度,但是當訪問者數量增加時,我可能會佔用太多內存。另一方面,從數據庫中隨時讀寫數據會降低性能。

我想知道這兩種方法之間的界限。我如何決定數據太多以至於無法保持會話?

+0

你有你的問題在你的答案。較少但頻繁的用戶,作爲商店進行會話;很多用戶採用基於Db的方法。現在,'少'和'很多'是相對的術語。 – Nishant 2012-02-07 08:21:34

+0

好問題。您可以識別您的應用程序的最大內存大小和最大期望的用戶登錄。計算需要多少內存來存儲一個用戶的數據。如果用戶數量在一段時間內不會異常增長(與Facebook不同!),那麼您可以將其存儲在會話中。 – Jayy 2012-02-07 08:25:14

回答

2

當我遇到像這樣的問題時,我嘗試估計每個用戶數據的大小,我想保持快速。

如果是你的情況,假設例如有500個元素,每個元素有40個字段,每個字段的大小爲50個字節(在文本,數字,日期等方面取平均值)。因此,我們必須在每個用戶的內存中保留大約1MB的存儲空間,因此每1000個用戶只有1GB的緩存空間。

根據您的服務器資源可用性,您可以找到瓶頸:1000個用戶佔用CPU,內存,數據庫,磁盤訪問;所以在這種情況下1GB的問題呢?如果將它們保存在數據庫中,如果沒有保存在內存中。

另一種選擇是使用內存數據庫或做這一切爲你一個分佈式緩存解決方案,在一定的成本:

  • 架構複雜
  • 最終許可費用
0

如果您爲每個用戶提供了大量的獨特數據,我會感到驚訝。理想情況下,這些數據中的一部分將在用戶之間共享,並且您可以擁有某種應用程序級緩存,用於存儲最近使用的條目,並在數據庫丟失時透明地從數據庫中提取它們。

這種設計在Java中實現起來相對簡單,但是由於它沒有內置的應用程序狀態支持,所以PHP有點更多地涉及(可能效率較低)。