SQL:Select 先更新 - 对于并发用户

SQL: Select first and update - for concurrent users

长话短说;博士: 我希望我的数据库中有一个 table 作为优先队列(这里是 ID 上的最小队列),是否有任何免费(用于商业用途)的 DBMS 可以解决我的问题?查询会是什么样子?

我想让许多并发用户从 table 到 select 一行,例如我有 table

+------+-------+--------+------------+
| ID   | Col 1 | Col 2  | Processed  |
+------+-------+--------+------------+
| 1000 | data  | data   | False      |
+------+-------+--------+------------+
| 1001 | data  | data   | False      |
+------+-------+--------+------------+
| 1002 | data  | data   | False      |
+------+-------+--------+------------+

如果我有 3 个用户,我想做原子 SELECTUPDATE,这样第一个查询 returns Col 1Col 2 从具有最低 ID 的行开始并将 Processed 标记为 True,以便下一个查询将 return 具有 ID = 1001.[=22 的行=]

table预计会很小,即最多 100,000 行,预计队列将在大约 8 小时内清空(大约每秒 3-4 次查询,峰值可能在 50 次查询左右)一秒钟)。我习惯了PostgreSQL/MySQL,也用过MongoDB。

我应该如何设计我的系统来应对这种情况?查询会是什么样子? table 锁会很明显吗?

我认为 PostgreSQL 应该是一个很好的人选。

一些有趣的提示:

除非我遗漏了什么,否则每个线程都会执行 SELECT FOR UPDATE(使用 SKIP ROW LOCKED)以便它选择第一个非锁定行并为其他所有人锁定它,处理它并标记它/完成后将其删除。