我们有一个长期运行的DB查询,它填充一个临时表(我们不应该更改此行为),该查询将生成大约4至6GB数据的600万至1000万条记录。
我需要使用.NET Web从SQL获取数据,并且该API托管在IIS上。当客户端向API发出请求时,根据不同连接表中的数据量,查询至少运行5分钟,并填充临时表。然后API必须从DB临时表中读取数据并将其发送到客户端。
不阻塞客户端,不松散DB临时表,不阻塞IIS,我们如何才能实现这一要求?
只是想一想,如果我使用异步API,我能做到这一点吗?
发布于 2018-04-10 14:43:33
有些事情你需要考虑,有些事情你可以做。
如果将查询执行作为API调用的结果,那么如果同时对该端点进行10次调用,会发生什么情况?死API,这就是将要发生的事情。
您可能能够为执行查询找到不同的触发器,因此您可以每天运行该查询一次,或者每4小时运行一次,然后将结果存储在一个永久表中。然后,API作业只会查看这个表,而不是等待任何东西并返回一些数据。
您可以做的第二件事是只返回您正在显示的屏幕所需的数据。您不会一次显示4-6GB的数据,我怀疑您有一些分页,您可以对代码进行稍微修改,一次只返回一页数据。
您没有说明您拥有什么样的数据,但是如果它不需要您经常运行该查询,那么您肯定可以做一些改进。
报告澄清后编辑
好吧,既然这是一份报告,这里有另一个想法。
其目的是确保压力不在于api本身,而api本身需要响应性和快速性。让API接收带有所需参数的请求。将实际的报表生成活动卸载到另一个服务。
https://stackoverflow.com/questions/49709380
复制相似问题