【问题标题】:Mysql trigger/events vs CronjobMysql 触发器/事件与 Cronjob
【发布时间】:2010-12-16 14:03:00
【问题描述】:

我有一个拍卖网站,让我的用户可以无限制地进行自动出价。

要监控这些自动出价,必须每秒检查一次数据库。

我的问题是使用 mysql 触发事件或每分钟使用一个 cronjob 执行 60 秒循环 php 脚本是否更好。

如果我使用 mysql 触发事件,则会有数百个事件堆栈相互叠加,并在不同时间触发。这甚至可能吗?而且服务器负载不会很大。我在某处听说,当有计划的事件时,数据库将被锁定。顺便说一句,我正在使用 innoDB 表。

我希望有人能对这个话题有所了解。

问候!

【问题讨论】:

  • 您对自动出价的定义是什么,当有两个待定的自动出价时,它们如何相互作用?是什么让拍卖结束?也许计划在拍卖结束时运行一个 cron 作业来评估谁赢了。该网站只会阻止对已完成拍卖的竞标。 cron 作业将通过电子邮件发送获胜者。
  • 嗨,让我进一步解释一下这个概念。拍卖起价为 0.00 欧元。当有人下注时,价格会上涨 0.01 欧元。出价是他们购买积分的地方。当拍卖即将结束并且有人出价时,拍卖会延长 60 秒。因此,当人们想离开时,他们可以进行自动出价。这些出价将并且必须在拍卖结束之前随机放置,将时间延长一分钟,等等。出价不会相互影响。一个自动出价是随机选择的,而不是最后一个出价者。
  • +1 因为我有同样的问题

标签: php mysql events triggers cron


【解决方案1】:

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

但您可能需要重新考虑您的整个问题。实际上没有必要每秒更新一次出价。当有人实际将他的浏览器指向拍卖或进行手动出价时,您只需要填写过去 x 分钟/小时。如果都是自动出价,您可以轻松计算向前和向后。

【讨论】:

  • 您好,感谢您的反应。这可能是解决问题的方法。但我希望能够在他们赢得行动的那一刻向用户发送电子邮件。如果让我们看到 3 个人启用了他们的自动出价,并且他们离开了网站,那么所有出价都必须在有出价的时间内随机完成。投标完成后,必须发送电子邮件。我真的希望整个过程都不​​需要有人在网站上。
  • 然后我的答案的第一部分,即永久运行的单独脚本(带有 while(true) 循环和睡眠 1 秒)将是最好的选择
【解决方案2】:

数据库处理计划的请求与其他请求没有什么不同。但由于许多计划请求包含确实会锁定数据库的数据库和表维护操作,因此他们这样做并不少见。

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

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

【讨论】:

  • 您好,谢谢您的回答。我对此有一个后续问题。这似乎是一个初学者的问题,但究竟什么是触发器,mysql 触发器。什么是存储过程。我假设存储过程是我编写的更新数据库的 php 脚本。如果我制作一个永远循环直到永恒的 php 脚本,这会消耗大量 cpu 功率吗?
  • 触发器是在表中的数据发生变化时自动执行的 SQL 代码。存储过程是捆绑在一起的 SQL 命令的集合。只需查看 MySQL 站点上的文档即可。
【解决方案3】:

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

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

这有以下好处:

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

【讨论】:

  • 嗨,谢谢你的回答,但我认为我不能使用这个模型。假设有 3 人启用了他们的自动出价,然后离开了网站。现在网站上没有人,或者网站上很忙。所有出价都必须在拍卖结束前完成。
  • 据我了解,它仍然可以工作,因为如果没有人访问这些网站,就没有人可以出价,所以不需要处理自动出价,对吧?当然,如果您想在拍卖结束时发送通知(电子邮件、短信……),那么您需要观察系统。虽然我想使用每 5 分钟运行一次并检查所有已结束的拍卖的 cron 就足够了。这对您有用还是对拍卖的运作方式有其他要求?
  • 人们付钱出价,所以所有的自动出价都被放置是很重要的。
【解决方案4】:

您可以使用 bash & shell 脚本来实现这个自动出价过程的工作。 参考这个链接你会得到一个想法:Bash script that executes php file every 5 seconds

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多