gpt4 book ai didi

ruby - 一个数据存储。多个进程。这个 SQL 会防止竞争条件吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:09:12 25 4
gpt4 key购买 nike

我正在尝试创建一个生成多个并发子进程的 Ruby 脚本,每个子进程都需要访问相同的数据存储(某种类型的队列)并对数据执行某些操作。问题是每行数据应该只处理一次,子进程无法知道另一个子进程是否可能在同一时刻对同一数据进行操作。

我还没有选择数据存储,但我倾向于 PostgreSQL,因为我已经习惯了。我已经看到以下 SQL 片段被建议作为避免竞争条件的方法,因为 UPDATE 子句应该在 SELECT 发生之前锁定表行:

UPDATE jobs
SET status = 'processed'
WHERE id = (
SELECT id FROM jobs WHERE status = 'pending' LIMIT 1
) RETURNING id, data_to_process;

但这真的有用吗? Postgres(或任何其他数据库)在执行 SELECT 之前锁定表行似乎并不直观,因为必须执行 SELECT 以确定需要锁定哪个表行以进行更新。换句话说,我担心这个 SQL 片段不会真正阻止两个单独的进程对同一表行进行选择和操作。

我是不是多疑了?有没有比传统 RDBMS 更好的选择来处理这样的并发情况?

最佳答案

如您所说,使用队列。 PostgreSQL 中的标准解决方案是 PgQ .它为您解决了所有这些并发问题。

关于ruby - 一个数据存储。多个进程。这个 SQL 会防止竞争条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7356915/

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