【问题标题】:Automatic Database reads/write every second每秒自动读取/写入数据库
【发布时间】:2010-12-14 23:23:16
【问题描述】:

我正在制作一个具有自动出价系统的拍卖网站。该系统让人们无需到场就可以出价。

我的问题是如何实施这样的系统。我已经制作了 php 文件,一切都准备好了,我制作了一个每秒刷新的 html 页面。它有效,但我想知道是否有更好的解决方案。

我尝试的第二个选项是制作一个每秒打开网页的 Java 应用程序。这会消耗“大量”内存/CPU。另外,我认为某处存在内存泄漏。

我在带有 centOS 和 Plesk 的专用 linux 服务器上运行此应用程序,所以我确信有很多替代方案。

例如:

  1. 每分钟执行一个 php 文件的 cronjob,其中 php 文件循环一分钟并休眠。

  2. 一个循环 1 秒的 php 文件休眠。

  3. 一个 cronjob 在一秒钟后执行并安排另一个 cronjob。

  4. MySQL 调度程序,但我不知道如何实现,听说它会锁定数据库以进行其他写入。

  5. 我也听说过 cli、perl、python 脚本,但我对它们都不熟悉。

请对这些选项有任何了解的人为我解释一下这个主题。我正在寻找最适合速度和内存使用的解决方案。

如果有人有其他替代解决方案,我也很乐意听到。

【问题讨论】:

  • 您需要在服务器端运行 PHP 来更新内部状态(数据库、拍卖等)还是需要自动更新客户端的网页(显示进度、出价等)?

标签: php mysql centos cron plesk


【解决方案1】:

创建一个以给定时间间隔执行相关 PHP 脚本的 cron 作业。如果它的编写方式与上下文无关(不需要访问$_GET$_POST 等),您可以execute the PHP script from the command line

【讨论】:

    【解决方案2】:

    如果你已经有一个页面可以完成这项工作,你可以安排一个每分钟调用一次 curl 命令的 cron (curl http://your/page.php)。唯一需要注意的是,如果页面从外部调用,您可能需要保护它,如果这是一个问题。

    【讨论】:

      【解决方案3】:

      每一秒都是一个如此小的间隔,无法选择 cronjobs,我也强烈建议不要按原样使用“网页”,因为性能很重要,只需为 CLI 编写的脚本就可以做到。

      我会做的是:

      • 当有人激活自动出价时 你应该在一个 数据库。
      • 创建一个轮询 要执行的条目的数据库 在那一刻。

      无论谁,您都需要非常小心地让脚本在每个循环后休眠,否则您将关闭数据库。

      顺便说一句,您真的需要每秒执行一次吗?在我看来,自动出价是由事件触发的,即在还剩 10 秒时有人出价高于你。这听起来更容易实现并且占用更少的资源(你也可以在那里使用守护进程,监听自动出价事件,但这是另一回事了 :)

      【讨论】:

        【解决方案4】:

        好吧,您可以尝试某种“基于事件的发布”,这基本上意味着一旦将数据插入到数据库中,就会触发一些事情发生。

        例如,MySQL 触发器,甚至是一个简单的 php 脚本,在插入新出价时,您检查是否有其他人提出的最高出价高于该出价。
        如果他们这样做了,则更新新的最高出价和当前最高出价者。

        如果有多个出价者,您可能需要做一个循环,看看谁将获得最高出价。

        关键是您不应该跑来跑去执行预定的工作来解决这个业务问题。我建议您使用触发器或事件。

        【讨论】:

          猜你喜欢
          • 2019-01-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-23
          相关资源
          最近更新 更多