2017-04-04 50 views
0

我有一個使用Mongo作爲主數據庫的應用程序,它工作正常,適合我的數據。我可以將MongoDB集合信任爲任務隊列嗎?

現在我需要另一個進程添加到應用程序,將在後臺處理任務。

什麼不應該發生越來越兩次執行相同的任務。
這意味着:當再次查詢數據庫的任務時,他們被標記爲完成(即使他們被標記爲0.0001毫秒前)後,我想確保狀態是正確的。

它總是使用PostgreSQL或MySQL時,工作對我很好,但我聽說過很多這MongoDB是不可靠的,因爲它插入階段實際稍後執行。

我應該爲我的情況擔心嗎?

回答

0

您可以使用db.collection.findAndModify(),這將確保原子的上一個大臺階。像下面的東西。這將確保您正在處理已標記爲已完成的文檔,並且沒有其他進程可以獲取該文檔。

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

參考文檔here

+0

假設只有一個進程會與收藏,我可以把它關閉,而不'findAndModify'工作?我的ORM不支持它,我寧願保持我的代碼一致。 – user3134477

+0

您使用的是什麼ORM? – titogeo

+0

我使用python的mongoengine如果它很重要... – user3134477