我正在开发一个Web应用程序,它基本上允许用户在他的浏览器中创建一个图形(在服务器中,图形基本上是一个节点列表,每个节点都有一个边缘列表)。用户创建或删除的每个节点或边缘都通过Ajax传送到服务器,因此服务器可以构造由Java Objects表示的相等图形。 此应用程序是桌面版的Web版本。所以我想向用户提供“保存”图表的选项。我最初的想法是当用户点击保存按钮时将对象保留在数据库中,但为此我需要将我的图形保留在用户的会话中。
那么我可以在http会话中存储图形(节点和边缘的集合),还是有更好的方法来实现我想要的?
Obs:我正在考虑直接在数据库中操作图形,也就是说,图形始终是持久的,如果用户会话到期,我会删除数据库的图形(如果尚未保存)。
答案 0 :(得分:1)
答案取决于您的应用的规模。
如果您只有一台服务器有足够的内存来保存所有并发用户的会话
在会话中存储信息是最容易的事情。确保您的图形是可序列化的,Servlet(或J2EE)容器将采用其余的。如果为数据实现一些自定义算法,则可以帮助解决httpsession持久性问题。
如果你长大了
即如果前面有多个带有负载均衡器的服务器,或者您的图形不适合内存。将它们存储在某个共享存储中 - 数据库或文件管理器,并通过某些键查找进行检索。 考虑使用粘性会话来最小化数据库/文件查找并在内存中缓存最近的图形
奇特的技巧
如果您发现将整个图表压缩为1-2KB的方法将其完全放入http cookie,浏览器会在每次请求时将其发回给您,您的服务器将是无状态的,没有数据库,没有会话亲和性问题。< / p>