我正在制作的网站围绕着一个搜索实用程序,并希望在主页上有一些内容列出当天搜索次数最多的10个(或某些内容)。
最简单/最有效的方法是什么?
我应该使用sql数据库,还是只包含前10个查询的文本文件和每天擦除数据的cronjob?
另外,我如何避免两个用户同时搜索某个内容的问题,并且只记录其中一个,即多线程?
该网站的后端全部用python编写
答案 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之后清空前一天的数据。