有点背景故事:我正在研究一个Web应用程序,在将数据提供给用户进行编辑/操作之前,需要花费相当多的时间准备/收集数据。数据请求任务~15/20秒完成并处理几秒。一旦出现,用户就可以随时操作虚拟键盘。任何值的操作都需要数据完全重新处理。将数据存储在内存中:会话vs缓存vs静态
更新:为避免混淆,我只进行1次数据调用(15秒命中),然后希望将结果保留在内存中,这样我就不必再次调用它,直到用户为100%完成了它的工作。因此,第一次拉动需要一段时间,但是,使用Ajax,我将打开内存数据来不断更新并保持响应时间大约2秒左右(我希望)。
为了提高效率,我将初始数据移动到内存中,并使用Ajax调用返回到服务器,以便减少处理时间以处理发生在此用户更新时的重新计算。
这里是我的问题,考虑到性能,假设只有1个用户将在任何给定时刻使用此数据,那么存储此数据的最佳方式是什么。
另外,用户可能会在这个过程中工作几个小时。当用户正在使用数据时,如果他们的会话以某种方式中断,我将需要某种故障安全来保存用户的当前数据(无论是在数据库中还是在序列化的二进制文件中)。换句话说,我将需要一个具有适当钩子的解决方案,以便在用户断开/分散时间过长的情况下允许我转储内存对象的数据。
到目前为止,这里是我的沉思:
会话状态 - 优点:锁定为一个用户。有会话结束事件将符合我的故障安全要求。缺点:我当前选项的表现最慢。会话结束事件有时很难确保它正确触发。
缓存 - 优点:良好的性能。有权访问依赖项,这些依赖项可能是后来的一项奖励,但在当前范围内并不真正有用。缺点:除了基于时间间隔的写入外,没有简单的故障保护步骤。全球范围 - 必须确保用户不会与对方的工作发生冲突。
静态 - 优点:最佳性能。很容易维护,因为我可以直接利用我目前的班级结构。缺点:除了基于时间间隔的写入外,没有简单的故障保护步骤。全球范围 - 必须确保用户不会与对方的工作发生冲突。
有没有人对我应该选择什么选项有任何建议/意见?
谢谢!
更新:忘了提及,我使用VB.Net,Asp.Net和Sql Server 2005来执行此任务。
升级服务器通常比花时间优化代码更便宜。我相信杰夫阿特伍德最近在他的博客上谈到了这件事。 – Malfist 2009-01-30 18:27:13
我想我应该更具体w/performance。我并不担心处理内存使用的服务器,而是需要多长时间才能将我的响应回复给用户。 – Nathan 2009-01-30 18:28:36
您使用哪种语言/技术? – nlaq 2009-01-30 18:32:51