0

我的最终需要是在 Web API 页面上呈现一些报告(SQL Server 存储过程的结果)。

挑战在于返回这些数据的存储过程非常慢——有时需要几分钟才能运行。没有一个用户在他们的右(或左)头脑中会发现这种看似无休止的延迟是可以接受的,因此我想知道是否有一种方法可以只将第一页(比如 40 或 50 行数据)作为“奶嘴”,而其余的则在后续页面上呈现“幕后”。

我知道以这种方式呈现数据(一次一页)很常见,但实际上是否可以以这种方式“切片”存储过程以加快速度,即不改变存储过程本身 -只是来自 Web API 应用程序中的 C#(或 Javascript)?

我能想到的唯一其他可行的选择(以及它是否可行还有待商榷)是将已保存为 .xlsx(或 .csv)文件的预运行报告存储到服务器,在那里可以从Web API 应用程序和转换/按摩以显示在页面上。这需要将文件从客户端实用程序发送到服务器计算机(!),并可能在服务器上使用 Excel 互操作(!)。

这个无赖的最后一个避难所就是在存储过程运行时向用户展示一个跳舞的熊玩杂耍小猫或其他东西的 .gif 文件。

更新

两个答案都很好,而且作为一个落后者(失败者的支持者),我选择了得分较少的猫。

在这两只猫的启发下,我想我会做的是在创建每个 Excel 报告时向我的 Web API 应用程序发送一条“消息”,以将该数据(通过调用相同的 SP)存储在服务器上的一个表中. 然后,当用户浏览到提供的链接时,报告数据将可供用户使用。当他们实际这样做时(通常至少在几分钟后),表中将填充来自 SP 的数据,并且随后的页面呈现最多应该是几秒钟而不是几分钟。

4

2 回答 2

2

可能我会安排一个在后台运行的作业,并将 SP 的结果存储在一个表中,并将作为一种缓存从 web api 访问。

您可以在 sql server 或使用Hangfire安排作业

于 2015-12-29T16:21:44.550 回答
1

不知道具体您正在使用什么或如何呈现存储过程的结果。我实际上建议定期预先运行大型报告,这将在正常时间释放资源并允许用户“跳过”等待。然而,客户端可能不应该直接访问托管数据库的服务器计算机,设置具有必要安全协议的 FTP 服务器可能是在服务器和客户端之间自动传输文件的最简单方法。(SSIS 有非常快速和简单的拖放界面,用于设置需要连接到 ftp 的作业)

您还可以创建一个重复的存储过程,它只返回结果的一小部分,调用它并在主过程仍在运行时呈现它(您可能需要设置某种计时器来继续检查主过程是否proc是否已经完成)

于 2015-12-29T16:26:20.200 回答