2014-02-08 35 views
0

我正在開發一個基本上允許用戶在他的瀏覽器中創建圖形的Web應用程序(在服務器中,圖形基本上是一個節點列表,每個節點都有一個邊緣列表)。用戶創建或刪除的每個節點或邊緣都通過Ajax與服務器通信,因此服務器可以構建由Java對象表示的等值圖。 此應用程序是桌面版的網絡版。所以我想向用戶提供「保存」圖形的選項。我最初的想法是當用戶點擊保存按鈕時將對象保存在數據庫中,但爲此,我需要將我的圖保存在用戶的會話中。我可以在Java HttpSession中存儲整個圖嗎?

因此,我可以在http會話中存儲圖形(這是一個節點和邊緣的集合)還是有更好的方法來實現我想要的?

Obs:我正在考慮直接在數據庫中操縱圖形,也就是說,圖形總是被保留下來,如果用戶會話過期,我刪除數據庫的圖形,如果它尚未保存。

+1

在服務器上保持會話狀態始終會對可伸縮性產生負面影響,並且會要求您提供更多的服務器資源。我知道您正在客戶端維護完整圖表的狀態。如果你已經實現了,我認爲你不應該與服務器交互,除非用戶想保存圖表。 – Ralf

+0

你相信我沒有考慮過這種可能嗎?我不能那樣做,但我可以做到。謝謝。 –

回答

1

答案取決於您的應用程序的規模。

如果你有足夠的內存只有一臺服務器,以舉行會議的所有併發用戶

存儲在會話信息是最容易做的事情。確保你的圖是可序列化的,而Servlet(或J2EE)容器將承擔其餘部分。如果你爲你的數據實現了一些自定義算法,你可以爲httpsession持久性提供幫助。

如果你變得大

也就是說,如果你有一個負載均衡的多個服務器在前面或你的圖表不適合在內存中。將它們存儲在某個共享存儲中 - 數據庫或文件管理器,並通過一些關鍵字查找來檢索。 考慮使用粘性會話,以儘量減少DB /文件查找,並在內存中緩存最近圖表

花式技巧

如果你找到一個方法來壓縮您的整個圖形到1-2KB把它完全變成HTTP cookie時,瀏覽器會在每次請求時將其發回給您,您的服務器將是無狀態的,沒有數據庫,沒有會話相關性問題。

+0

如果我的應用程序已經準備好使用數據庫,您認爲現在最好這樣做? –

+1

我不會打擾數據庫,直到我不得不部署超過1臺服務器 –

+0

由於用戶必須廣泛操縱圖形,我的服務器將收到許多請求(遠遠超過普通站點)。在處理數據庫時,你認爲這可能是一個瓶頸嗎? –

相關問題