2011-01-12 35 views
0

假設我有10個並行運行的cron作業,它們從數據庫獲取條目並處理它們。正確地爲每個數據庫條目分配公共標識

第一計劃作業獲取所有從數據庫具有「commonId」字段作爲1的條目, 第二個獲取所有從數據庫具有「commonId」字段作爲2等,直到10

條目

解決方案 - 當我從前端將條目添加到數據庫時,我有一個文件保存了「最後」公用標識。此ID將遞增至10,然後再次爲數據庫中的每個條目設置爲1。

跨欄 - 前臺有很多用戶,當添加條目時,兩個或三個連續條目使用相同的公共標識。這不應該發生。數據庫中的每個條目都應具有1-10的串行公共標識。

有沒有解決方案?要得到最新的最新的通用id?

我正在使用MongoDB。

如果這是不可能的。可以做什麼?

回答

1

你想要的是一個ATOMIC操作,MongoDB有辦法做到這些。請參閱http://www.mongodb.org/display/DOCS/Atomic+Operations

你有什麼理由想特意分配它們嗎?如果您允許任何時鐘作業使用任何掛起的作業,它會不會更快處理?

我建議僅僅依靠生成的MongoID(請參閱http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-TheBSONObjectIdDatatype),按照它們的逆序排列並找到第一個未分配的工作項,然後使用提到的一種原子技術來抓取它。如果找不到工作,請重新睡眠並重試或退出(取決於您重新安排這些工作人員的時間長短)。

+0

`消耗任何未完成的作業`<---這給了我想法鎖定條目本身,當它正在處理。謝謝 :) – kapeels 2011-01-14 05:43:22

相關問題