设计重复PHP / MySQL任务

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了设计重复PHP / MySQL任务脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
在这里遇到了设计问题,我将 PHPMysqL与Java结合使用(我的项目是一个 Android应用程序).我必须决定如何定期运行一系列服务器端计算.这里有很多关于如何创建cron作业的材料,这很好,我很可能会在那里结束,但我不确定如何在更广泛的意义上解决我的项目的这一部分.

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

任务

对于我的数据库中的每个记录,或者,我更喜欢实例,在每个时代,我想从其用户位置重新计算实例的质心(这很容易,特别是使用标量方法,因为它们非常接近),有效地改变了位置通过更新实例的数据库中的纬度和经度值来实例化实例.用户随后将在他们打电话回家时定期收到这些新的实例质心坐标.

方法

由于我缺乏经验,这就是它变得混乱的地方.我首先编写了一个相对简单的计算,涉及一个sql选择查询一个后续sql更新操作,每个实例,在每个时期.如果我们假设现在大约20-30秒的更新间隔,那不到一分钟,显然这违反了cron作业1分钟的限制. (应该注意的是,如果绝对必要的话,时期之间的时间差可以是硬编码的).

在短期内,由于实例/集群很少,因此该过程可能只需要花费的时间可以忽略不计.但是,如果实例的数量达到数千个,那么它可能会堆积很多SQL查询并且需要花费大量时间来处理所有计算…为了减少不必要的负载,我自然想要结合一些机制来排除非活动实例,但我想仍然可以想象所需的计算时间可能超过时期间隔.我想这是(很多)以后的问题.

问题

现在看来,问题是双重的:

>我想为所有活动实例执行相同的简单功能
在每个时代.那么,有没有更有效的方法做到一点
运行那么多次迭代?我可以以某种方式更新许多表行
一次,使用一个大的,最终的sql更新查询?是这样的
MysqLi_multi_query()在这里真的很有用吗? (此时我没有MysqLi).
>我如何才能最好地实现计时器或触发机制来重新启动
考虑到它可能违反1分钟的事实,在每个时代的这个过程
限制我一直在读cron工作?

我的想法

我目前的做法如下:

>运行一个sql select查询以将其全部设置为当前时期,
获取需要质心移位的实例ID号.
>使用这些实例ID填充PHP数组
>使用循环和一个或非常顺序地移动每个实例
许多sql更新(见上文)将新的坐标对写入数据库.
>安排在每个时代执行此任务(换句话说,
每隔x秒)

以上方法听起来不错吗?在这一点上,我打算这样做,除非有更好的建议.我真的没有办法确定如何安排在每个时期执行任务(第4点),但是……我已经到处寻找,我自己无法解决这个问题没有一些指导,我还不是很好. :)一如既往,任何建议将不胜感激.

您可以考虑根据需要从计划任务转移到更新.这很容易实现,但有一些权衡.

>添加名为Last Updated的日期时间字段
>每次查询对象时,请检查上次更新的字段
“新鲜度”(在你的情况下,如果它是>超过30秒前)
>如果是新鲜的,请将数据发送给用户.
>如果不是新鲜的,请重新计算数据并将其保存到数据库
(确保更改上次更新的字段).然后,发送新的
数据给用户.

这将消除对计划任务的需要.摆脱每行更新的浪费.但是,它可能会减慢对用户的响应速度.

脚本宝典总结

以上是脚本宝典为你收集整理的设计重复PHP / MySQL任务全部内容,希望文章能够帮你解决设计重复PHP / MySQL任务所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。