使用Web API处理大量数据

时间:2018-04-07 16:16:01

标签: sql-server rest asp.net-web-api large-data

我们有一个长时间运行的数据库查询,它填充一个临时表(我们不应该改变这种行为),这会导致600到1000万条记录,大约4到6 GB的数据。

我需要使用.NET Web API从SQL DB获取数据,并且API托管在IIS上。当请求从客户端发送到API时,查询将根据不同连接表中的数据量运行至少5分钟并填充临时表。然后,API必须从DB临时表中读取数据并将其发送到客户端。

如果没有阻止客户端,不丢失数据库临时表,而不阻止IIS,我们怎样才能达到这个要求?

想一想,如果我使用异步API,我能实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

你需要考虑的事情和你可以做的事情。

如果您作为API调用的结果启动查询执行,如果同时获得10次调用该端点会发生什么?死API,即将发生的事情。

您可能能够找到执行查询的不同触发器,因此您可以每天运行一次此查询,例如每4小时运行一次,然后将结果存储在永久表中。然后,API作业只会查看此表,而不是等待任何事情并返回一些数据。

您可以做的第二件事是仅返回您正在显示的屏幕所需的数据。你不会一次性显示4-6 gb的数据,我怀疑你在那里有一些分页,你可以稍微重新编写代码,一次只返回一页数据。

您没有说明您拥有哪种数据,但如果它不需要您经常运行该查询,那么您肯定可以进行一些改进。

< ----报告澄清后编辑---->

好的,既然这是一份报告,这是另一个想法。

目的是确保压力不在api本身上,而这需要快速响应。让API接收带有所需参数的请求。将实际报告生成活动卸载到另一个服务。

  1. 跟踪此服务正在执行的操作,以便您可以报告活动的状态:是否已启动,是否已完成,以及您需要的其他任何内容。您可以使用队列,或者只是跟踪数据库中的作业。
  2. 生成报告文件并将其存储在某处。
  3. 通过附加文件向用户发送电子邮件或通过电子邮件发送链接,以便用户下载。另一个选择是在UI中的某处提供指向报告的链接。