如何制作“热门查询”页面

时间:2011-01-24 02:23:44

标签: python sql multithreading

我正在制作的网站围绕着一个搜索实用程序,并希望在主页上有一些内容列出当天搜索次数最多的10个(或某些内容)。

最简单/最有效的方法是什么?

我应该使用sql数据库,还是只包含前10个查询的文本文件和每天擦除数据的cronjob?

另外,我如何避免两个用户同时搜索某个内容的问题,并且只记录其中一个,即多线程?

该网站的后端全部用python编写

2 个答案:

答案 0 :(得分:2)

将查询放在一个表中,每个不同的查询有一行,还有一个要计数的列。如果查询尚不存在,则插入,否则增加查询行计数器。

将一份cron工作放在一起,而不是在午夜12点清空桌子。使用事务来防止两个不同的请求发生冲突。

答案 1 :(得分:0)

如果您使用数据库后端,任何python框架和RDBMS组合都将能够处理并发性,这应该是您遇到的问题中最少的。

只需将完整的查询搜索字符串(单词组合?)记录到表中,并在一天结束时使用简单的聚合查询来生成结果。

像这样的简单表格(以MySQL为例)

query: id autonumber, search_time datetime, search_string varchar

您可以动态查询前10名

select date(search_time), search_string, count(*) times_searched
from query
group by date(search_time), search_string
order by 3 desc
limit 0,10;

或者您可以将查询抛出到CRON作业中以生成静态文件(每个日期),这是出于性能原因,因为10个项目的列表永远不会改变。

对于审核,您可以保留表条目,或者如果不需要,只需在昨天生成​​静态top-10之后清空前一天的数据。