Mysql触发/事件与Cronjob

时间:2009-11-14 12:09:44

标签: php mysql events triggers cron

我有一个拍卖网站,让我的用户可以进行无限量的自动操作。

要监视这些自动操作,必须每秒检查一次数据库。

我的问题是,如果最好每分钟使用mysql触发器事件或用户执行一个60秒循环php脚本的cronjob。

如果我使用mysql触发器事件,则会在彼此上有数百个事件堆栈,并在不同时间触发。这有可能吗? ANd不是服务器负载控制是非常有用的。我听说在某个schedueled事件时数据库将被锁定。我正在使用innoDB表btw。

我希望有人可以对这种情况有所了解。

问候!

4 个答案:

答案 0 :(得分:1)

您最好运行一个永久运行并监视数据库的单独脚本。那样你就不需要cron了。也没有大量的触发因素。

但您可能想重新考虑整个问题。没有必要每秒实际更新出价。您只需填写过去x分钟/小时,当有人实际将其浏览器指向拍卖或进行人工出价时。如果是全部自动操作,您可以轻松地向前计算向后。

答案 1 :(得分:1)

数据库处理与其他请求无异的预定请求。但是,由于许多计划请求包含锁定数据库的数据库和表维护操作,因此它们并不罕见。

话虽如此:由于您的系统必须对用户的操作作出反应,因此技术上更好的方法是使用触发器。实际上,当您的站点具有高负载时,这可能会导致性能问题 - 尽管使用预定事件可能会导致同样的问题。

我的建议是将您的逻辑放在存储过程中,并从触发器调用这些存储过程。当您发现触发器无法跟上时,您始终可以删除触发器并从cron作业调用存储过程。

答案 2 :(得分:0)

我可能会对您的自动出价问题的解决方案进行一些不同的建模:

基于事件的方法怎么样?您存储了用户的自动出价请求,如果有人实际出价对象,则会处理之前排队的自动出价。

这有以下好处:

  • 数据库上的负载是有机分发的
  • 您只进行当时实际需要的查找。
  • 它是实时的而不是基于刻度的
  • 更容易推理业务/应用程序逻辑,因为它是本地的而不是全局的

答案 3 :(得分:0)

你可以使用bash& shell脚本实现了这个自动出价过程的工作。 请参阅此链接,您将获得一个想法:Bash script that executes php file every 5 seconds