我的一个应用程序使用Mongo作为其主要数据库,它工作正常并适合我的数据。
现在我需要向应用程序添加另一个进程,该进程将在后台处理任务。
不应该发生的事情是两次执行相同的任务 这意味着:当再次查询数据库中的任务时,在标记为完成后(即使它们标记为0.0001毫秒之前),我想确保状态是正确的。
使用PostgreSQL或MySQL时,它总是很好用,但我听说很多MongoDB不可靠,因为它会将插入分段实际执行起来。
我应该担心我的情况吗?
答案 0 :(得分:0)
您可以使用db.collection.findAndModify()
来确保极高的原子性。像下面的东西。这将确保您正在处理已标记为已完成的文档,而其他任何进程都无法获取该文档。
db.car.findAndModify({
query: { task : 'new' },
sort: { _id : 1 },
update: { $set: { task: 'done'} }
});
参考文档here。