【问题标题】:Best practices for displaying reports显示报告的最佳实践
【发布时间】:2023-11-01 16:10:01
【问题描述】:

我目前有一个客户端-服务器应用程序。客户端需要能够生成报告。这些报告可以有数百万条记录。将数据发送给客户端的最佳方式是什么?一次发送所有数百万条记录效率不高。假设我只想一次显示 20 个并翻阅所有结果。每次用户点击下一页时,我是让服务器进行查询,还是让服务器获取整个结果集,然后将其中的一部分发送给客户端?

【问题讨论】:

  • 阅读Pagination
  • 很公平。在没有内存问题的情况下,从数据库获取整个报告(数百万条记录)到客户端的最佳方法是什么?流式传输?如果用户想要将整个报告下载到文件中,则需要此选项。
  • 让服务器一次获得 20 个结果。

标签: database postgresql reporting report


【解决方案1】:

使用光标 - 非常适合这些目的。

注意 - 具有百万行的报表不是设计良好的报表。没有人可以处理它。但这是分析的问题。

http://www.commandprompt.com/ppbook/x15040

【讨论】:

    【解决方案2】:

    我在 sql 查询中使用了 Limit 来设置获取的记录范围。但查询必须来自客户端,并且查询必须通过范围。

    这取决于脚本,如果你使用 Dotnet+npgsql 连接器

    • 我会在表单的组合框中生成一个页码
    • 然后将页码乘以 Rows*(pagenum-1)(page2 为 20*1)得到起始 rownum
    • 以 sql 的形式传递给数据库
    • 检索行并在 datagridview 中显示

    虽然,我可能只是补充一下,搜索一百万条记录 Page_by_page 并不是明智之举。我希望有一些过滤器可以将搜索范围缩小到几页。因为研究表明超过 page10 的浏览量呈指数级下降。

    【讨论】: