【问题标题】:Minimizing query result size algorithm最小化查询结果大小算法
【发布时间】:2021-08-06 16:44:36
【问题描述】:

一些上下文

现在客户端发送一个请求,试图获取从所选日期到现在的所有数据以将其显示在图表上,它在 90% 的时间都可以正常工作,但有时结果查询的大小可以达到 2000 万行,这绝对可以预测,因为工作速度很慢,所以现在我正在研究如何以某种方式显示数据以减少结果数据的大小

问题

  1. 计算结果行数以决定我是否应该使用某种最小化算法的最快方法是什么?我认为在谈到大数据时,任何最小化都会有所帮助
  2. 有什么算法可以足够快地在图表上显示数据?现在我只想出了将请求分成 N 部分,计算每个部分的平均值并在图表上显示平均值,这将有助于表示日期,但计算百万行的平均值仍然需要花了很多时间

任何帮助表示赞赏

【问题讨论】:

    标签: postgresql bigdata


    【解决方案1】:

    您需要获取从所选日期到现在的所有数据。这不允许您最小化结果,并且这样做会向用户显示 false 信息,这(恕我直言)比缓慢更糟糕。也许更好的方法是设置一个阈值,在该阈值上询问用户是否希望继续,然后允许继续或不继续。现在每次计数都太慢了,但是有一个替代方法:创建一个物化视图,每天刷新,带有日期和该日期的计数。现在不是直接选择,而是先从 MV 中选择。如果结果超过设定阈值,请用户确认。这将对所有请求产生减慢影响,但对于相对较少的行,它应该不会太糟糕。然后,这允许您收集有关行与响应时间的统计信息,并为用户提供结果的估计时间。 我发现用户通常不介意等待,如果你能提前告诉他们。参见demo here:你没有提供表定义,所以我只是编造了一些东西。

    create materialized view all_data_summary as
           select the_date, count(*) num_items
             from all_data
            group by the_date;  
           
    select sum(num_items) 
      from all_data_summary 
     where the_date between :user_date and current_date;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      相关资源
      最近更新 更多