0

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

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

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

我的问题如下:

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

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

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

感谢您的见解!

4

3 回答 3

3

您应该将两者结合起来。

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

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

因此,如果在最后 X 分钟内有活动,您需要获取全部三分钟的数据。

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

当前不存在能够在您的计算机上开箱即用地执行此处理的系统。Cron 可以帮助你完成工作,但不是一个人。

联系您的系统管理员,让您建议您操作平台上可用的内容以满足您的需求。


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

于 2012-08-06T10:59:43.963 回答
1

从这一行来看:

Note:
Retrieving and inserting data take about 10 seconds.

Cronjob 将是最好的。我认为访问者不会乐于每 3 分钟等待 10 秒加载页面。如果我是唯一一个访问您的网站并且必须每 3 分钟一次又一次地重新编写您的脚本的人怎么办...

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

于 2012-08-06T10:48:20.620 回答
1

如果我正确理解了您的 Q,您可以考虑进行这 2 个不同的任务:

a) 获取数据并存储它

b) 处理数据

a) 每 3 分钟做一次,b) 应要求做

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

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

于 2012-08-06T10:51:01.317 回答