如果3分钟已经通过,那么每3分钟运行一次cron作业或仅根据请求执行php脚本是否更好?

时间:2012-08-06 10:36:57

标签: php mysql cron

我的问题很简单:我有一个php脚本,可以从不同的api中检索大量的csv文件,将它们存储在数据库(MySQL)中并显示给我的用户。我必须每3分钟查询一次api以获取重要数据。 仅使用最后一个数据,无需获取历史数据。

我担心的是,如果没有人在这里查看该页面,请避免查询这些api并在我的数据库中插入大量数据。

这不是速率限制的问题,只是考虑减少无用的请求和插入数据库。

我的问题如下:

  • 最好每3分钟使用一次cron作业来检索数据并存储它们
  • 如果页面已加载并且自上次更新后已经过了3分钟,则运行php脚本吗?

在第一种情况下,即使没有人在这里看到它们,每个用户都将拥有最后的值,并且将始终检索数据。
在第二种情况下,每3分钟一个用户将检索所有数据(因此他的页面将比其他人加载慢一点),但如果没有人访问该站点,则不会存储任何无用的数据。

注意:
检索和插入数据大约需要10秒钟。

感谢您的见解!

3 个答案:

答案 0 :(得分:3)

你应该两者兼顾。

如果您的网站上没有流量,则无需保持数据最新。

如果您的网站上有流量,您需要保持数据最新,但三分钟的时间范围就足够了。

如果在最后X分钟内有活动,则需要在三分钟内获取数据。

如果没有,第一个用户将看到一条消息,表示正在准备数据,这只需要10秒钟。然后,您可以自动刷新网站。

目前没有能够在您的计算机上开箱即用的处理系统。 Cron可以帮助你完成工作,但并不孤单。

请与您的系统管理员联系,并向您提供有关您所操作平台上可用内容的建议,以满足您的需求。


实际上这看起来像缓存。 CSV数据的生命周期为3分钟,因此您只需缓存api响应。如果您使用能够提供某些逻辑的缓存服务器(如清漆),则可以相对轻松地配置预取。尝试找到一些您只需配置和重复使用的现有组件,而不是自己动手。

答案 1 :(得分:1)

从这条线来判断:

Note:
Retrieving and inserting data take about 10 seconds.

Cronjob将是最好的。我不认为访客会乐意每隔3分钟等待10分钟的页面加载。如果我是唯一一个访问您网站并且每隔3分钟不得不一遍又一遍地编写脚本的人,该怎么办...

如果时间是1或2秒,那么你可以用另一种方式完成。

答案 2 :(得分:1)

如果我已正确理解你的Q,你可以考虑做出这两个不同的任务:

a)获取数据并存储

b)处理数据

做一个)每3分钟做b)根据要求

现在单独检查b)的延迟,然后考虑是否值得缓存结果集。

使它成为2个不同的任务将在某种程度上使您免受提取多个文件的延迟问题的影响。当您处理上一次成功获取的数据时,它还可以在数据提取失败时“退回”此数据超过3分钟。“