Php 每隔30秒运行一次SQL查询(计数),然后将输出保存到某个文件中

Php 每隔30秒运行一次SQL查询(计数),然后将输出保存到某个文件中,php,sql,file,Php,Sql,File,我正在开发一个网站,并得到一个数据库,人们可以插入数据(投票)。我想在标题中保留一个计数器,如“x”投票。但是有可能很快网站上会有很多流量。现在我可以用查询来完成它了 SELECT COUNT(*) FROM `tblvotes 然后在标题中显示数字,但是每次用户更改页面时,它都会重新执行查询,所以我想,也许每30秒查询一次更好(mysql服务器上的负载更少),但是我需要将其输出保存到某个地方(这应该不太难;我可以将其写入文本文件?)但是我怎么能让我的网站每30秒自动运行一次查询并将数字输入到

我正在开发一个网站,并得到一个数据库,人们可以插入数据(投票)。我想在标题中保留一个计数器,如“x”投票。但是有可能很快网站上会有很多流量。现在我可以用查询来完成它了

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


如果有什么你可能不明白的,尽管问吧

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

我认为有更好的解决办法。您应该创建一个聚合表,其中存储统计信息

使用投票表上的
触发器
,每次该表收到INSERT语句时都可以执行“操作”


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

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

好的,那么你问题的第一部分基本上是关于缓存要包含在页面标题中的总投票结果。这是一个非常好的想法-这里是一个如何实施它的想法

如果无法启用crontab(即使没有SSH访问,也可以使用hostings控制面板进行设置),则可以使用外部第三方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);
$fileOutput=”“;
$handle=fopen(_-path_到_-cache_文件,'w+');
fwrite($handle,$fileOutput);
fclose($handle);

这将为您提供一个PHP文件,您只需将其
包含()
到标题标记中,然后就可以访问名为
$arrayName
下的
$yourData
变量。如果可以,您可能希望使用memcached。它允许您为添加到其中的任何数据设置过期时间


第一次执行查询时,将写入与结果关联的查询文本的md5。在后续查询中,在memcached中查找数据。如果sql查询已过期,您可以重做sql查询,然后将其重写为memcached。

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

但是,用户每次切换页面时仍然需要运行sql查询?(查询不再是一个计数,而是类似的)“从tbltriggercount中选择count”)?@Maximc-是的,您仍将被迫执行该查询。此外,这里还有一个更大的问题-您的聚合表将报告错误的结果,或者只是更新表本身将成为性能瓶颈(这些行为源于事务相关问题)。无论如何,您真正想要的是某种内存中的解决方案,而不是聚合表(使用适当的标记,简单的
COUNT()
是微不足道的)。是的,您每次都必须执行一个查询。但是如果没有像COUNT()或sum()这样的aug函数,这会容易得多。例如,
从aggTable中选择值,其中param='counter'
但它实际上仍然是一个查询。您可能希望在文件系统中将数字缓存为txt文件。OK我将为此和此创建一个触发器(使用google translate FROM FR to ENG)是我发现的,如果有人需要,这是一个提示,它基本上不需要计数(*)(因为它对系统来说很重)。现在我仍然需要找到一种方法,每30秒自动创建一次值。(因为cronjobs未启用)APC允许您增加一个整数:如何查看或锁定文件,如果网站上同时有大约200个用户,您确定不会出现问题吗?