我想要做什么:计算最流行的搜索查询:过去一天、过去 30 天、过去 60 天、过去 90 天、每个日历月以及所有时间。
我的原始数据是一个带时间戳的搜索查询列表,我已经在为相关数据聚合运行每晚的 cron 作业,因此我想将此计算集成到其中。每天阅读每个查询都很好(据我所知,这是必要的),但对于其他时间段,这将是一个昂贵的计算,所以我正在寻找一种方法来使用我的预先计算的数据来保存时间。
我不想做的事情:提取该期间每一天的记录,对所有计数求和,对整个结果列表进行排序,然后取前 X 值。这将是低效的,尤其是对于“所有时间”列表。
我考虑使用堆和二叉树来保持实时排序和/或更快地访问数据,并行读取每个列表中的单词并将它们的值推送到具有各种约束和结束条件的堆中,但这总是会破坏查找时间或排序时间,我基本上回到看一切。
我还考虑过保持每个时间段的运行总数,加上最近的一天并减去最早的一天(在每个月的 1 日保存每月总计),但是我必须每天保存每个时间段的完整计数(而不仅仅是前 X),我仍在查看每日总数中的每条记录。
有什么方法可以更快地执行此操作,也许使用其他一些数据结构或我不知道的有趣的数学属性?此外,任何人都需要知道,这整个事情都存在于 Django 项目中。