同时从rethinkdb抢工作

Concurrently grabbing jobs from rethinkdb

我最近一直在玩 rethinkdb 并尝试实现一个作业队列。我只是想知道同时从 table?

中获取工作的最佳技术是什么

线程不多,作业需要一些时间才能完成 运行,所以可以,例如如果存在给定值,则更新失败。例如,如果两个并发进程获取一个作业并尝试设置一个 workerId,则第二个竞争进程将失败并重试。

所以我想知道如何在 rethinkdb 中执行此操作?我当前的方法有点 hack,如果第二个进程发现 old_val 不为空,则第二个进程覆盖第一个进程 workerId 并重置它。我宁愿第二个过程只是失败......或者一些其他解决方案让 rethinkdb 处理这个(如果可能,只用 rethinkdb 而不是 MQ)。

您可以在单个查询中自动更新和检索文档。例如,在 JavaScript:

 r.table('foo').filter({status: 'pending'}).limit(1).update(
   r.branch(r.row('status').eq('pending'), {status: 'in progress'}, {}),
   {returnChanges: true})

该查询找到一个状态为 'pending' 的文档,将状态更改为 'in progress' 并且 returns 文档。