【发布时间】:2018-02-11 06:43:49
【问题描述】:
原因
我一直在构建一个从多个 JSON 源中提取数据的系统。被提取的数据不断变化,我正在通过 PHP 脚本记录对 SQL 数据库的更改。 10 次中有 9 次数据不同,因此需要记录。
需要每秒钟检查一次 JSON。我已经成功地每分钟使用一个 cron 任务和一个循环 60 次以上的 PHP 函数。
我现在遇到的问题是,我想要检查的 JSON 源越多,PHP 文件运行的速度就越慢,这意味着下一个 cron get 在前一个完成之前触发。这一切都开始让人觉得太不稳定和老套了。
问题
假设 PHP 脚本已经是最高效的,还能做什么?
- 我应该使用多个 cron 任务吗?
- 是否应该使用 PHP 以外的其他东西?
- cron 任务甚至适合这类问题吗?
非常感谢任何经验、最佳做法或只是计划旧的帮助。
概述
我正在监控正在进行的比赛,并记录每位车手以及车手完成的每一圈。只有在车手越过起跑线/终点线时才会记录圈数,我不知道比赛何时可能会或可能不会进行,或者车手何时越过终点线。因此,我一直在检查每一秒是否有新数据要记录。
可能正在进行比赛的每个场地都有一个单独的 URL,用于接收 JSON 数据。我添加到系统中以监控脚本运行速度越慢的场所越多。
我目前有 19 个场地,脚本大约需要 12 秒才能完成。因为我每分钟都在运行一个 cron 作业,并且每秒循环一次脚本。我假设我每秒至少运行 12 个脚本。对我来说,这似乎不是最有效的方法。当然,当我只检查一个单一的场地时,它就很有吸引力。
【问题讨论】:
-
看看使用队列,每个worker处理一个API。
-
诚然,我对 cron 队列的了解非常少,但是,如果 cron 任务正在等待另一个任务完成,那么肯定存在丢失数据的风险吗?
-
我建议远离 cron 并使用像 rabbitmq、gearman、beantalked 这样的队列系统。与工人和经纪人有关的事情,您可以通过cron或其他方式为工人放置触发任务。
-
哦,对不起,我完全想念你的建议!这听起来确实是一种更有效的方法。感谢您的回复。
-
如果使用无限循环会怎样?
while(true){ // pull from source }。这样,当一个拉完成后,下一个就会来