ASP.NET:处理真正大型报告的策略

时间:2009-11-10 14:30:42

标签: c# asp.net asp.net-mvc reporting

可能不是特定于报告但仍然......

在我的asp.net mvc Web应用程序中,有一个报告部分显示了几列直接映射到数据库中的表的5列数据。

问题是,在某些情况下,该报告的长度可能会超过40,000条记录(我知道,没有人可以真正处理40,000条数据记录,但报告就是这样)并且正如您所料,它超时了抛出错误。

问题是,处理和提交这种规模的报告有什么好方法?我想创建一个小的控制台应用程序,可以在网络服务器之外构建报告,但是我有点不知道要考虑什么方向?

5 个答案:

答案 0 :(得分:6)

报告是否需要包含最新数据?如果没有,您可以在晚上(或者当您的服务器不忙时)将报告生成为PDF并仅提供PDF链接。按照您的建议运行控制台应用程序的计划任务可以创建报告并将其输出到文件。许多报表工具(如Crystal Reports)允许您将报表导出为PDF或Excel电子表格。就此而言,您可以在完全不同的计算机上生成报告,然后将其复制到Web服务器。这可以让您每小时(或其他)更新报告,而不会在Web服务器上施加这样的负担。

答案 1 :(得分:3)

在用户等待时生成报告可能不是一个好主意(更不用说SQL / IIS超时等)

您可以获取用户请求报告,然后让Windows服务接收这些请求,生成报告并通过电子邮件发送给用户? (或者在网站上有某种ajax轮询脚本,以便在报告准备就绪时通知用户?)

您可以将其扩展到以重复间隔等方式安排同一报告。

答案 2 :(得分:2)

我会研究SQL Reporting Services(假设它在SQL Server上运行)。有几种交付选项可能更适合您的应用程序需求(例如,您可以安排PDF或Excel文档显示在某人的邮箱中)。

StackOverflow团队还有一篇很棒的文章允许ASP.NET中的后台进程,如果您可以经常生成此报告而不是按需生成(可能每5-10分钟一次?)

http://blog.stackoverflow.com/2008/07/easy-background-tasks-in-aspnet/

答案 3 :(得分:0)

我见过处理大规模报告的另一个常见用法是设置一个Windows服务,该服务执行报告的物理生成,将完成的二进制文件转储到某个地方的数据库或文件存储中,然后更新数据以显示报告是填写申请表链接完成报告所需的信息。

然后,你可以让你的报告按钮触发发起报告的请求,然后将它们移动到处理报告页面,在该页面中列出排队/处理它们的所有报告。

答案 4 :(得分:0)

用户真的会查看所有40,000行报告是值得怀疑的。那么为什么不显示向后排序的前1000个最新行呢?如果您使用的是支持按需报表的报表解决方案,则可以始终向下钻取到显示下一个最新1,000行的第二个报表。只是一个想法...