有点背景故事:我正在开发一个Web应用程序,它需要相当多的时间来准备/处理数据,然后再将其提供给用户进行编辑/操作.数据请求任务完成约15/20秒,处理几秒钟.在那里,用户可以动态操纵vaules.任何值的操作都需要完全重新处理数据.
更新:为了避免混淆,我只进行一次数据调用(15秒命中),然后想要将结果保存在内存中,这样我就不必再次调用它,直到用户100%完成它为止.所以,第一次拉动将需要一段时间,但是,使用Ajax,我将打击内存中的数据以不断更新并将响应时间保持在大约2秒左右(我希望).
为了提高效率,我将初始数据移动到内存中并使用Ajax调用回服务器,这样我就可以减少处理时间来处理用户更新时发生的重新计算.
这是我的问题,考虑到性能,存储此数据的最佳方式是什么,假设在任何给定时刻只有1个用户将使用此数据.
此外,用户可能会在此过程中工作几个小时.当用户使用数据工作时,如果会话以某种方式中断,我将需要某种故障保护来保存用户的当前数据(在数据库或序列化二进制文件中).换句话说,我需要一个具有适当钩子的解决方案,以允许我在用户断开连接/分心太久的情况下转储内存对象的数据.
到目前为止,这是我的想法:
会话状态 - 优点:锁定到一个用户.Session End事件是否符合我的故障安全要求.缺点:我当前选项的最慢性能.Session End事件有时很棘手,无法确保正常触发.
缓存 - 优点:良好的性能.可以访问依赖项,这可能是后来的奖励,但在当前范围内并不真正有用.缺点:除了基于时间间隔的写入之外,没有简单的故障保护步骤.全球范围 - 必须确保用户不会相互冲突.
静态 - 优点:最好的Perf.易于维护,因为我可以直接利用我当前的类结构.缺点:除了基于时间间隔的写入之外,没有简单的故障保护步骤.全球范围 - 必须确保用户不会相互冲突.
有没有人对我应该选择的选项有任何建议/意见?
谢谢!
更新:忘记提及,我使用VB.Net,Asp.Net和Sql Server 2005来执行此任务.