首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将缓慢的数据库调用从MVC移动到后台应用程序-请提供建议

将缓慢的数据库调用从MVC移动到后台应用程序-请提供建议
EN

Stack Overflow用户
提问于 2017-04-06 21:04:12
回答 2查看 191关注 0票数 0

我有一个MVC网站,在那里用户可以从SQL Server和Oracle数据库中搜索大型记录集。其中一些记录集可能非常大,有数千条记录。可悲的是,这是用户的要求,他们不会使他们的搜索更具体。

当用户将他们的搜索请求发布到数据库时,我的网页在经常超时之前就挂起了(由于查询数据库所花费的时间)。

我们正在考虑从MVC站点删除昂贵的数据库调用,并将查询发送到一个单独的进程以在后台运行。当查询完成时,我们可以通知用户。

我提出的解决方案是:

1)当用户在网页中完成搜索表单时,简单地显示正在生成结果并将在完成时发送的消息2)将SQL查询发送到数据库,该数据库可以包含需要处理的SQL查询的列表3)创建Windows服务,该Windows服务每隔几分钟检查该数据库是否有新查询4)该Windows服务然后查询该数据库。查询完成后,它将创建结果的CSV,并通过电子邮件将其发送给用户

我正在寻找一些关于我的上述方法的建议和评论?人们认为这是一种在后台处理昂贵的数据库调用的方法吗?

一般来说,请求将不会频繁发出,但如前所述,将是对大量数据的请求。有可能同时发出两个或更多请求,但这种情况很少见。

我还将研究如何优化数据库。

感谢你给我的提示。

Martin :)

EN

回答 2

Stack Overflow用户

发布于 2017-04-06 21:17:27

另一种选择是补充现有代码,以便在单独的线程上执行查询,以便在您等待查询结果时,可以将定期的保持活动更新发送到请求页。类似于保险报价聚合器页面的工作方式。第二种选择是在结果准备就绪时以超链接的形式提供,然后通过网站或电子邮件将其传达给用户。选项三如果这些查询不是完全ad-hoc类型的查询,那么您可以分析最频繁的组合,并定期预先计算它们,将结果放入新的表中(某种程度上是优化当前数据库结构的一半)。需要注意的是,数据不会是最新的--但是考虑到查询当前花费的时间,更新到第二个查询可能不是那么重要吗?

无论你选择哪种解决方案,我认为这将取决于用户的期望-他们是否知道自己想要什么,只需发送一个大查询并得到它,并感到高兴?或者他们会尝试几个查询来找到正确的参数组合?如果是后者,那么等待结果的电子邮件发送可能是他们不能接受的。但是,如果他们想要的是一个可下载的结果文档,并且他们第一次知道自己想要什么,那么它可能会。我在这里看到的唯一问题是电子邮件会误入歧途,或者花费的时间比用户认为的要长,这会导致请求被多次重新提交,并增加服务器工作负载-缓存查询和结果可能是一个非常好的主意。

票数 1
EN

Stack Overflow用户

发布于 2017-04-08 05:50:15

我建议引入像消息传递代理这样的抽象层。请求将进入队列,批处理层将消耗队列中的请求,一旦繁重的工作完成,批处理层将通过消息传递代理、请求-应答模式再次通知web层。

此外,在数据库端,优化查询总是很好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43256073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档