1
|
Steven Mercatante Dimitri Kopriwa · 技术社区 · 14 年前 |
1
1
所以,让我直截了当地说:您在查询一个外部服务(什么?肥皂?MySQL?)数据库中每个用户的每一分钟,并将结果存储在同一个数据库中。对吗? 这似乎是一个设计问题。 如果外部服务上的用户与数据库中的用户相同,那么可能应该更紧密地配置这两个用户。我不知道PHP是否是同步这些数据的方法。如果你提供更多细节,我们可以考虑另一个解决方案。如果您控制着外部服务,那么您可能希望让该服务转储它的数据,甚至直接写入数据库。其他一些同步机制可能更好。 编辑 似乎您正在开发一个应用程序,为用户存储数据,然后按时间顺序查看数据。否则,您也可以在用户请求时获取数据。
至于cron是否适合这项工作:只要你有一台足够强大的服务器,能够同时处理数千个以上的cron工作,你就应该没事了。 您可以通过几个PHP脚本获得创造性。我不确定,但是如果对php的每个cli调用都启动了一个新的php进程,那么您可以这样做。
这一切都非常沉重,您不应该期望用PHP快速完成。做一些测试。别相信我的话。 |
2
2
我的总结正确吗? 你想每分钟完成数千项任务,但你不确定是否能按时完成? 你需要决定什么时候你开始超过你的时间表。
这些问题的答案取决于应用程序。根据答案,cron可能不是适合您的工具。您最好让一个进程永久地运行和调度自己。 |
3
1
数据库可以同时处理大量的记录。如果你一个接一个地处理它们,你就是在找麻烦。您需要找到一种方法来成批处理您的“每分钟”任务,这样通过执行单个(复杂)查询,可以检索所有受影响用户的信息;然后,您可以对结果进行PHP处理;然后,在另一个查询中,您可以将结果推回到数据库中。 |
4
1
根据你对大局的描述,听起来你有一个死胡同的设计。如果你能让它现在工作,它很可能是非常脆弱的,它不会扩大。 我猜,如果您无法控制外部服务,那么外部服务可能不高兴被这样的脚本重击。你有没有向他们提出你的总体计划? 你真的每次都需要做所有的用户吗?您是否可以使用任何类型的时间戳来选择哪些用户需要“更新”?如果你能更好地描述目标,我们也许能给出更具体的建议。 |
5
1
如果您明确希望同时运行用户处理… 最简单的解决方案是让每个用户都有一个线程。在Windows上,线程比进程便宜得多。 然而,无论您使用线程还是进程,同时运行数千个线程几乎肯定是行不通的。 相反,有一个 水塘 线程的池的大小取决于您的机器一次可以轻松处理多少线程。我希望像30-150这样的数字能达到你想达到的程度,但这在很大程度上取决于硬件的容量,我可能会以另一个数量级退出。 每个线程都将从共享队列中获取下一个要处理的用户,对其进行处理,并将其放回队列的末尾,可能具有不应在其之前进行处理的日期。 (根据处理的数量和类型,可以在数据库的单独框中执行此操作,以确保数据库不会被与数据库无关的处理超载。) 此解决方案确保始终处理尽可能多的用户,而不会使机器过载。随着用户数量的增加,处理它们的频率降低了,但总是尽可能快地处理硬件。 |
Jacco · 未能格式化我的日期以在php中正确工作 1 年前 |
jay ram · 如何在URL核心php中从API获取JSON? 1 年前 |
Ishwarya A · php电子表格在浏览器中显示多张excel 1 年前 |