0

我在数据库中有一个大表,几乎每秒更新一次。我想每 5 秒查询一次该表以获取最新条目(实时流)。

我无法为每个访问者查询数据库(每 5 秒 ajax 发布请求),因为 mysql 会死。这就是我需要缓存文件的原因。我在文件中写入数据,而不是使用 javascript 的访问者每 5 秒打开/读取/关闭文件。

一切正常,但我在使用 cronjob + sleep 时遇到了麻烦。

在 cpanel 中,我无法设置 5 秒的 cronjobs,这就是为什么我在 5 秒的睡眠中运行 12 个周期的 for()。

for($i = 0; $i <12; $i++){
   mysql_query() /// writing in file, etc.

   sleep(5);
}

问题是这会将整个服务器冻结 60 秒。不仅cronjob php文件,整个网页都超时了。

我应该怎么办?我做对了吗?

4

1 回答 1

0

请注意,不能保证您发布的代码将在 60 秒内准确运行。事实上,该代码将在至少 60 秒内运行。我不确定这是否重要,但这意味着通过 cron 运行的该脚本的两个或多个实例之间会有一段时间的重叠。

根据您的查询以及您处理数据库和缓存读取/写入的方式,您可能正在创建数据库锁定或死锁情况,这反过来可能导致脚本运行时间过长。长时间运行意味着它可能会占用数据库/服务器资源。这种情况是我倾向于作为您的网页超时的原因。我需要有关您的查询和数据库/缓存文件的更多详细信息。

于 2013-06-24T22:43:37.277 回答