最小化查询结果大小算法

Posted

技术标签:

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

一些上下文

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

问题

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

任何帮助表示赞赏

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于最小化查询结果大小算法的主要内容,如果未能解决你的问题,请参考以下文章

我需要一种算法,可以适应任何大小的n个矩形,在较大的矩形中最小化其面积

求算法,将N个整数分到M个数组中,要求元素和相差最小,元素个数相差最小

具有最小尺寸约束的聚类算法

iPhone - 使用 SecKeyGeneratePair 的 iOS RSA 算法中的最小密钥大小(InBits)

遗传算法求解函数最小值问题及改进-自编程matlab代码

什么算法可用于以相当优化的方式将不同大小的矩形打包成最小的矩形?