首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >长时间运行的作业& sql事务

长时间运行的作业& sql事务
EN

Stack Overflow用户
提问于 2015-12-23 20:20:19
回答 1查看 342关注 0票数 0

假设我有一个包含有关机器人的数据的表,其中一列是当前机器人的自主性。我有一个节点作业,它每分钟调用一个PHP脚本,用于选择所有未完全充电的机器人("current_autonomy < max_autonomy"),然后按一定的数量(也来自数据库)更新它们。

为此,我启动了一个事务,选择所有需要更新的机器人,然后浏览它们("foreach")并执行"UPDATE“查询。我不只是做一个大的“更新”,因为如果"current_autonomy + reload > max_autonomy允许“,那么自治应该设置在"max_autonomy_allowed”上,而不是被“重新加载”所增加(以避免当前的自治性高于允许的最大值)。

它运行得很好,但我认为当我在数据库中有很多记录时,它可能会引起一些问题。实际上,假设有大量的数据,脚本需要10秒才能执行。还可以说,机器人"X“之所以被选中,是因为它具有"90/100”的自主性。然后,前奏开始,机器人开始更新。

现在,假设脚本在更新机器人"X“之前,拥有它的玩家会执行一个应该将其自主性降低2的操作。操作查询会等到作业的脚本完成后再执行吗(因为表锁定?)如果没有,这是否意味着自治会减少,然后由脚本更新呢?因为如果是这样的话,当作业的“选择”选择机器人数据时,它选择"90“作为当前的自主,当它将更新这个值时,它将执行"90 +重新加载”,而不是"88 +重新加载“,因此就像玩家没有支付他的最后一个动作。

我不知道我是否很清楚,如果你不明白的话,请问我更多的细节,因为我对这个问题很感兴趣(数字……)。

问题是,我读了很多文章/帖子(包括这篇文章:PDO Transactions Locks?),有些人说“为每件事都使用事务”,而另一些人则说“当你确信你绝对需要它们时才使用它们”。

现在,我的所有请求都被包装到一个事务中,甚至是原子选择或插入,我正在考虑更改它,以便只在真正需要的时候使用事务,但是我读到一篇文章说:“如果你不知道你是否应该使用一个事务,那就使用它”,所以我有点迷路了。

一般信息:我的项目是一个由页面组成的游戏,通过查询来执行一些操作。还有一些节点js cron作业调用一些php脚本来执行预定的操作(例如更新机器人自主性或在满足某些条件时向玩家发送邮件等)。我希望它是最有效率的。我真正不希望的是,如果有很多用户,因为到处都是锁表的事务,网站就会变得非常慢。

谢谢你的回答

EN

回答 1

Stack Overflow用户

发布于 2015-12-23 20:50:07

为了减轻负担,您可以将InnoDB存储引擎用于MySQL或实现行锁定而不是表锁定的任何其他DB表提供程序。

除此之外,你还有两个选择。重构基础结构或向服务器添加更多资源以处理缓慢问题。你只能做这么多的优化工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34443107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档