gpt4 book ai didi

php - 设计重复的 PHP/MySQL 任务

转载 作者:可可西里 更新时间:2023-11-01 06:33:37 25 4
gpt4 key购买 nike

我在这里遇到了一个设计难题,我将 PHP 和 MySQL 与 Java 结合使用(我的项目是一个 Android 应用程序)。我必须决定如何定期运行一系列服务器端计算。 SO 上有大量 Material 可以解决如何创建 cron 作业等问题,这很好,我很可能就此结束,但我不确定如何从更广泛的意义上处理我的项目的这一部分。

该应用程序完全以用户的地理位置为中心。它们总是组织成 4 到 40 个之间的集群,这些集群在我的数据库中形成一个实例记录。这些实例可以随时变为事件或非事件状态。

任务

对于我数据库中的每条记录,或者,我更喜欢实例,在每个时期,我想从它的用户位置重新计算实例的质心(这很简单,特别是使用标量方法,因为它们很接近),有效通过更新实例数据库中的纬度和经度值来移动实例本身的位置。用户随后会在打电话回家时定期收到这些新的实例质心坐标。

方法

由于我的排名经验不足,这就是它变得困惑的地方。我首先编写了一个相对简单的计算,涉及一个 SQL 选择查询和一个后续的 SQL 更新操作,针对每个实例,在每个时期。如果我们现在假设更新间隔大约为 20-30 秒,则不到一分钟,显然这违反了 cron 作业 1 分钟的限制。 (需要注意的是,如果绝对必要,可以硬编码 epoch 之间的时间差)。

在短期内,这个过程可能只需要很少的时间来执行,因为实例/集群很少。但是,如果实例数量达到数千,它可能会堆积很多 SQL 查询和大量时间来处理所有计算。为了减少不必要的负载,我自然想要结合一些机制来排除非事件实例,尽管我想仍然可以想象所需的计算时间可能会超过纪元间隔。我想这是(很多)以后的问题。

问题

就目前而言,问题有两个方面:

  1. 我想为所有事件实例执行相同的简单功能在每个时代。那么,有没有比运行那么多次迭代?我能以某种方式更新许多表行吗一次,使用一个大的、最终的 SQL 更新查询?是不是有点像mysqli_multi_query() 在这里真的很有帮助吗? (此时我没有 mysqli)。
  2. 我怎样才能最好地实现定时器或触发机制来重新触发这个过程在每个时期,考虑到它可能违反 1min我一直在阅读关于 cron 作业的限制?

我的想法

我目前的做法如下:

  1. 运行一个 SQL 选择查询来为当前时代设置所有,获取需要质心偏移的实例 ID 号。
  2. 用这些实例 ID 填充 PHP 数组
  3. 使用循环顺序移动每个实例,一个或多个许多 SQL 更新(见上文)以将新的坐标对写入数据库。
  4. 安排在每个时期执行此任务(换句话说,每 x 秒)

上述方法合理吗?在这一点上,除非有更好的建议,否则我打算这样做。对于如何安排任务在每个时期执行(第 4 点),我真的没有一个可靠的把握,但是......我已经到处看了看,我自己无法解决这个问题没有一些指导,我还不是很好。 :) 一如既往,我们将不胜感激任何建议。

最佳答案

您可能会考虑从计划任务转移到按需更新方法。这很容易实现,但需要权衡取舍。

  • 添加一个名为 Last Updated 的日期时间字段

  • 每次查询对象时,检查最后更新的字段
    “新鲜度”(在你的情况下,如果它是 > 30 秒前)

  • 如果是最新的,将数据发送给用户。

  • 如果不新鲜,重新计算数据并保存到数据库
    (确保更改最后更新的字段)。然后,发送新的
    数据给用户。

这将消除对计划任务的需要并消除更新每一行的浪费。但是,它会减慢对用户的响应速度。

关于php - 设计重复的 PHP/MySQL 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11524115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com