我可以信任MongoDB集合作为任务队列吗?



我有一个使用 Mongo 作为其主数据库的应用程序,它运行良好且适合我的数据。

现在我需要向应用程序添加另一个进程,该进程将在后台处理任务。

永远不应该发生的是同一个任务被执行两次。
这意味着:当再次查询数据库以获取任务时,在它们被标记为完成之后(即使它们在 0.0001 毫秒前被标记为完成),我也想确保状态正确。

当使用PostgreSQL或MySQL时,它对我来说总是很好用,但是我听说很多MongoDB是不可靠的,因为它将插入分阶段以稍后实际执行。

我应该为我的案子担心吗?

您可以使用db.collection.findAndModify()来确保高水平的原子性。如下所示。这将确保您正在处理已标记为已完成的文档,并且没有其他进程可以获取该文档。

db.car.findAndModify({
query: { task : 'new' },
sort: { _id : 1 },
update: { $set: { task: 'done'} }
});

请参阅此处的文档。

最新更新