Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 30+的最佳体系结构;小时查询_Sql_Wcf_Asynchronous - Fatal编程技术网

Sql 30+的最佳体系结构;小时查询

Sql 30+的最佳体系结构;小时查询,sql,wcf,asynchronous,Sql,Wcf,Asynchronous,我有一个有趣的问题要解决。我的一位客户让我开发了一个股票分析程序,其中包含近50年的股票数据,几乎有1000个符号。我已经开发了一系列的过滤器,可以在任何一天应用,以查看交易中是否存在任何问题 我们希望对每只股票每天的数据运行此筛选器。基本上是开始和结束日期类型的报告。但是,每周过滤每个符号需要6分钟。我们估计在整个数据集上运行报告大约需要40个小时 最重要的要求是,我的客户能够从任何计算机(他经常出差)在应用程序中执行任何操作,因此我们基于浏览器 为了解决这个问题,我编写了一个非同步方法来运行

我有一个有趣的问题要解决。我的一位客户让我开发了一个股票分析程序,其中包含近50年的股票数据,几乎有1000个符号。我已经开发了一系列的过滤器,可以在任何一天应用,以查看交易中是否存在任何问题

我们希望对每只股票每天的数据运行此筛选器。基本上是开始和结束日期类型的报告。但是,每周过滤每个符号需要6分钟。我们估计在整个数据集上运行报告大约需要40个小时

最重要的要求是,我的客户能够从任何计算机(他经常出差)在应用程序中执行任何操作,因此我们基于浏览器

为了解决这个问题,我编写了一个非同步方法来运行这个报告,但是应用程序池不活动计时器将终止该作业。我不想开始调整整个应用程序的超时来支持这一个报告(我们将要做很多这样的事情,因为每个股票场景都需要在用于活跃交易之前对整个数据集进行分析)

是否有人对支持超长非同步流程的web架构有任何一般想法或经验


作为一般建议,我推荐一个独立的Windows服务、控制台应用程序或类似的应用程序,具有非常仔细的生命周期控制和日志记录,它将持续运行并检查(轮询)数据库中的“要处理的作业”,然后用结果和进度信息更新数据库

这可能不是最好的方法,但我以前使用过很多次,而且它可靠、可扩展并且具有良好的性能

最好将web请求限制在最多一两分钟内——它们从来都不是为繁重的处理时间而设计的。这样,您可以每隔一分钟左右“签入”作业状态(使用Web服务)

如果您对我或这个想法有任何疑问,请发表评论&我很乐意提供帮助、详细说明或建议

希望有帮助



(另外:我认为Windows服务没有得到充分利用!所需要的只是一个快速的基类或可重用的助手方法集合,并且您已经有了一个记录的、可靠的、自动的、可配置的、可快速实现的过程,在您的控制下运行。也可以快速创建原型!)

有什么理由不简单地在后台运行服务,并在请求时将单个结果集归档到只读结果表中?您需要实时运行查询吗?该应用程序可以在服务生成结果页面时检索这些页面。

通常,超长的非同步过程不会出现在web上


他的请求应该排队,另一个进程应该运行作业并以用户将使用的格式存储数据。

六分钟过滤一周的数据?似乎您的数据库需要适当的索引微调。

听起来您是在直接对这些数据执行SQL查询。您是否考虑过将数据加载到SQL Server Analysis Services,并设置一个包含时间、库存和符号维度(对于初学者)的多维数据集?根据查询的性质,您可能会得到相当合理的响应时间。关系数据库有利于在线事务处理(在一定的负载和响应时间参数内),但分析工作有时需要数据仓库的方法和技术。(或者,可能是关联数据库……还有其他选择。)


然而,考虑到Murphy,您可能会有一些长时间运行的查询。不同最终用户的数据是否不同?如果不是,为什么不预先计算答案?基于http的任何东西都不应该花费超过一分钟的时间来处理,如果是这样的话——至少不是设计上的

根据过滤器的具体情况,这听起来像是一项可以从并行化中获益的任务——在多个计算节点上拆分查询,这些节点在数据的子集(碎片)上运行过滤器。如果您的过滤器专注于跨大量时间数据分析一只股票,则可以拆分股票符号上的工作,并让多个计算节点同时处理不同的股票符号。如果需要研究股票符号之间随时间的关系,则按时间间隔分割工作并在操作后合并结果(mapreduce)可能更有意义。在这种情况下,对问题投入更多的硬件实际上可以大大提高响应时间。考虑一下谷歌搜索引擎一个例子。

通常需要注意的是:首先检查当前过滤器实现的性能瓶颈。确保您要访问的表已被适当地索引,等等。提前计算关系和频繁需要的计算摘要。如果能节省时间,存储是便宜的


您的web请求可能会启动分散/聚集查询操作,将查询分发到云中的可用计算节点(Windows Azure、Google Apps、Amazon)。如果有足够的计算节点和适当的工作分配,您可能会以近乎实时的方式获得响应。

我不知道为什么这里的每个人都希望所有工作都在数据库中完成,但作业控制应该在外部。这就像把车的点火钥匙放在外面一样。事实上,我知道为什么。你用wcf标记了这个问题

使用“计算节点”的建议刚刚完成了我的流行语宾果游戏,谢谢dthorpe! 您不需要“计算节点”,只需要核心。大多数RDBMS都内置了PX(并行执行)。为什么要为你每天使用的云计算付费,只要买一台有足够CPU的服务器,你就可以了。。。不需要“分散-聚集”查询,只需打开PX

Pontus为你指明了正确的方向。对6分钟的表现感到满意,并担心如何安排这是你的问题。有很多策略可以管理y