最小化查询结果大小算法
Minimizing query result size algorithm
一些上下文
现在客户端发送一个请求,试图获取从所选日期到现在的所有数据以将其显示在图表上,它在 90% 的时间都运行良好,但有时结果查询大小可能高达 2000 万绝对可预测的行工作得非常慢,所以现在我正在研究如何以某种方式显示数据以减少结果数据的大小
问题
- 计算结果行数以决定我是否应该使用某种最小化算法的最快方法是什么?我假设在谈论大数据时,任何最小化都会有所帮助
- 什么算法可以足够快地在图表上显示数据?现在我只是想出了将请求分成 N 部分,计算每个部分的一些平均值并在图表上显示平均值,这将有助于表示日期,但计算百万行的平均值仍然需要很多时间
感谢任何帮助
您需要获取从所选日期到现在的所有数据。这不允许您将结果最小化,这样做会向用户提供 false 信息,这(恕我直言)比慢要糟糕得多。也许更好的方法是设置一个阈值,您可以在该阈值上询问用户是否希望继续,然后允许或不允许。现在每次计数都太慢了,但还有一个替代方案:创建一个物化视图,每天刷新,包含日期和该日期的计数。现在不是直接selecting select先形成MV。如果结果超过确定的阈值,请要求用户确认。这将对所有请求产生减慢效果,但对于相对较少的行来说应该不会太糟糕。然后,这允许您收集有关行与响应时间的统计信息,并为用户提供估计的结果时间。 我发现用户通常不介意等待,如果你能提前告诉他们。请参阅demo here:你没有提供table 定义所以我编了一些东西。
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;
一些上下文
现在客户端发送一个请求,试图获取从所选日期到现在的所有数据以将其显示在图表上,它在 90% 的时间都运行良好,但有时结果查询大小可能高达 2000 万绝对可预测的行工作得非常慢,所以现在我正在研究如何以某种方式显示数据以减少结果数据的大小
问题
- 计算结果行数以决定我是否应该使用某种最小化算法的最快方法是什么?我假设在谈论大数据时,任何最小化都会有所帮助
- 什么算法可以足够快地在图表上显示数据?现在我只是想出了将请求分成 N 部分,计算每个部分的一些平均值并在图表上显示平均值,这将有助于表示日期,但计算百万行的平均值仍然需要很多时间
感谢任何帮助
您需要获取从所选日期到现在的所有数据。这不允许您将结果最小化,这样做会向用户提供 false 信息,这(恕我直言)比慢要糟糕得多。也许更好的方法是设置一个阈值,您可以在该阈值上询问用户是否希望继续,然后允许或不允许。现在每次计数都太慢了,但还有一个替代方案:创建一个物化视图,每天刷新,包含日期和该日期的计数。现在不是直接selecting select先形成MV。如果结果超过确定的阈值,请要求用户确认。这将对所有请求产生减慢效果,但对于相对较少的行来说应该不会太糟糕。然后,这允许您收集有关行与响应时间的统计信息,并为用户提供估计的结果时间。 我发现用户通常不介意等待,如果你能提前告诉他们。请参阅demo here:你没有提供table 定义所以我编了一些东西。
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;