gpt4 book ai didi

mysql - 如何并行更新 MySQL(MyISAM) 表?

转载 作者:行者123 更新时间:2023-11-29 07:10:35 25 4
gpt4 key购买 nike

我有一个带有多个线程的并行 bash 脚本。每个线程检查记录是否存在然后更新值,否则插入新行。我应该关心线程并发吗?我应该锁定解锁表还是由 mysql 来处理?

我的更新通过命令行:

#get.sh script...
# set status Downloading
mysql -uroot -pmypass -ss -e "use filestatus; call changeStatus(\"$1/$2\", 1)"
rsync -ar rsync://user@server/$2/ $1/$2/
if [ $? -eq 0 ];
then
# set status OK
mysql -uroot -pmypass -ss -e "use filestatus; call changeStatus(\"$1/$2\", 0)"
else
# set status ERROR
mysql -uroot -pmypass -ss -e "use filestatus; call changeStatus(\"$1/$2\", 2)"
fi

我用不同的参数调用了几个 get.sh


先谢谢你
阿曼。

最佳答案

您可以实现锁定,但这将破坏拥有多个线程的目的。 MyISAM 仅支持表级锁定,因此一次只能有 1 个线程修改表。

如果可以,请在字段上放置唯一索引或主键。执行 INSERT ... ON DUPLICATE KEY UPDATE ... 然后 MySql 将确保操作是原子的。

对于多线程/处理,我通常做的是让第一个线程/进程获得所有需要执行的作业的“列表”,然后创建一个线程/fork 来处理每个作业或一批作业.父线程/进程将确保子进程不会尝试做同样的事情。我不确定这是否适用于您的情况。

关于mysql - 如何并行更新 MySQL(MyISAM) 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4767834/

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