4

我正在开发一个网站并获得一个数据库,人们可以在其中插入数据(投票)。我想在标题中保留一个计数器,例如“x”票已投。但有可能很快就会有大量的网站访问量。现在我可以用查询来做到这一点

SELECT COUNT(*) FROM `tblvotes

然后在标题中显示数字,但是每次用户更改页面时,它都会重做查询,所以我在想,也许最好每 30 秒查询一次(mysql 服务器上的负载要少得多)但是然后我需要将它的输出保存到某个地方(这应该不那么难;我可以将它写入文本文件?)但是我怎样才能让我的网站每 30 秒自动运行一次查询并将数字放入文件。我没有到服务器的 SSH,所以我不能 crontab 它?

如果有什么你可能不明白的随时问!

4

5 回答 5

5

最简单的方法:将结果写入本地文本文件,检查每个请求的文本文件的文件时间是否小于 now() + 30 秒,如果是,则更新文件。要更新,您应该锁定文件。在更新文件时,满足 now() + 30 条件的其他用户应该只读取当前存在的文件以避免竞争条件。希望有帮助,斯特凡

于 2012-04-26T14:38:24.810 回答
3

Crontabs 只能以最快的速度每分钟运行一次。

我认为有一个更好的解决方案。您应该制作一个存储统计信息的汇总表。

使用triggervotes_table 上的 a,每次表收到 INSERT 语句时,您都可以做“某事”。

然后聚合表将存储最准确的信息,然后您可以查询这些信息以显示计数。

于 2012-04-26T14:37:06.383 回答
2

如果您的服务器允许,更好的解决方案将使用一些缓存机制(例如APC)而不是文件。

于 2012-04-26T14:42:47.473 回答
1

如果可以,您可能需要考虑使用 memcached。它允许您为添加到其中的任何数据设置到期时间。

当您第一次进行查询时,您编写与结果关联的查询文本的 md5。在后续查询中,查找 memcached 中的数据。如果过期了,可以重做sql查询,然后重写到memcached。

于 2012-04-26T14:41:09.883 回答
0

好的,所以您问题的第一部分基本上是关于缓存总票数的结果以包含在您的页面标题中。这是一个非常好的主意 - 这是一个关于如何实现它的想法......

如果您无法启用 crontab(即使没有 SSH 访问权限,您也可以使用您的主机控制面板进行设置),您也许可以使用外部 3rd 方 cronjob 服务。(谷歌有很多结果)...

每次您的 cronjob 运行时,您都可以创建/更新一个仅包含一些 PHP 数组的文件 -

$fileOutput = "<"."?php\n\n";
$fileOutput .= '$'.$arrayName.'=';
$fileOutput .= var_export($yourData,true);
$fileOutput .= ";\n\n?".">";
$handle = fopen(_path_to_cache_file,'w+');
fwrite($handle,$fileOutput);
fclose($handle);

这将为您提供一个 PHP 文件,您可以简单地include()将其放入您的标头标记中,然后您将可以访问$yourDataname 下的变量$arrayName

于 2012-04-26T14:39:50.300 回答