我有一个有趣的问题要解决。我的一个客户让我开发了一个股票分析程序,其中包含近50年来近1000个符号的股票数据。我开发了一系列过滤器,在任何给定的一天都会应用,以查看是否有任何交易失败。
我们想对每只股票的每一天的数据运行这个过滤器。基本上你的开始和结束日期类型的报告。然而,每周过滤每个符号需要6分钟。我们计算出大约40个小时左右来运行整个数据集的报告。
最重要的要求是我的客户能够在任何地方的任何计算机上做任何事情(他经常旅行),所以我们是基于浏览器的。
为了解决这个问题,我编写了一个异步方法来运行此报告,但是应用程序池不活动计时器将终止该作业。我不想为了支持这一个报告而不得不开始调整整个应用程序的超时(我们将做很多这样的事情,因为在用于活跃交易之前,每个股票场景都需要针对我们的整个数据集运行以进行分析)。
有没有人对支持超长异步进程的web架构有什么总体的想法或经验?
谢谢
发布于 2010-07-08 05:05:06
作为一般建议,我会推荐一个独立的Windows服务,控制台应用程序或类似的具有非常仔细的生命周期控制和日志记录,它将不断运行,并检查(轮询)数据库中的‘作业处理’,然后用结果和进度信息更新数据库。
这可能不是最好的方式,但我以前使用过很多次,它是可靠的,可伸缩的,并且具有良好的性能。
最好将web请求保持在一到两分钟的最大值-它们从来都不是为繁重的处理时间而设计的。这样,您就可以每隔一分钟左右(使用Web服务)“检入”作业状态。
如果你对我或这个想法有任何问题,请发表评论&我很乐意提供帮助,详细说明或建议。
希望这能有所帮助!
(补充:我认为Windows服务未得到充分利用!它只需要一个快速的基类或可重用帮助器方法的集合,您就有了一个在您的控制下运行的记录的、可靠的、自动的、可配置的、快速实现的进程。也可以快速创建原型!)
发布于 2010-07-08 05:06:19
有什么理由不简单地在后台运行服务,并在请求时将单个结果集存档到只读结果表中?是否需要实时运行查询?该应用程序可以在服务生成结果页面时检索它们。
发布于 2010-07-08 05:13:49
听起来您是在直接对这些数据执行SQL查询。您是否考虑过将数据加载到SQL Server Analysis Services,并(对于初学者)设置一个具有时间、股票和符号维度的多维数据集?根据查询的性质,您可能会进入相当合理的响应时间。关系数据库非常适合在线事务处理(在某些负载和响应时间参数范围内),但是分析工作有时需要使用数据仓库的方法和技术。(或者,也许,关联数据库...还有其他选择。)
但是,考虑到Murphy,您可能会有一些长时间运行的查询。对于不同的最终用户,数据是否会有所不同?如果不是,为什么不预先计算答案呢?任何基于http的东西都不应该超过一分钟的处理时间,如果是这样的话--至少不是设计上的!
https://stackoverflow.com/questions/3198781
复制相似问题