处理耗时的动态生成报告下载的最佳方法是什么?

时间:2013-09-03 21:18:27

标签: asp.net performance design-patterns ravendb

网站正在不断更新内容(想想证券交易所),需要按需生成报告,用户下载文件。用户可以根据大量参数自定义下载的报告。

将高度自定义的报告下载文件处理为(.xls)的最佳做法是什么? 如何缓存和提高性能?

最好提一下,数据存储在RavenDb中,报告预计可以处理100K的结果大小。

1 个答案:

答案 0 :(得分:2)

以下是一些提示:

  • 确保您在RavenDB中定义静态索引以匹配所有可能的报告。您不想为此使用动态生成的临时索引。

  • 可能一个或多个参数会彻底改变查询,因此您可能有一些条件逻辑来选择运行多个查询中的哪一个。对于不同的分组尤其如此,因为它们需要不同的map-reduce索引。

  • 选择是否要使用SkipTake运算符的标准分页来限制结果集,或者是否要汇流unbounded result sets

    < / LI>
  • 但是,您构建实际报告,请在内存中进行。不要先尝试将其写入磁盘。管理文件权限,锁定和清理不值得麻烦。此外,如果服务器磁盘空间不足,则可能会导致服务器停机。

  • 最好您应该构建响应并将其流式传输给您的用户,只需要在服务器上不需要大量内存。确保您了解C#中的yield关键字,并尽可能直接使用IEnumerableIQueryable。请勿尝试使用.ToList().ToArray(),这会将整个结果集放入内存中。

  • 关于缓存,您可以考虑使用Memcached之类的前端缓存,但我不确定它是否会对您有所帮助。您可能希望从数据库中获得尽可能准确的数据。引入任何类型的缓存都需要您了解如何以及何时重置该缓存。请记住,Raven已经内置了几个缓存层。首先构建没有缓存的解决方案,然后在需要时添加缓存。

相关问题