2017-01-20 46 views
1

我需要一些持久性整數Id,用於一個稱爲每秒約100次的操作。我在Settings集合中有一個文檔,其中id存儲在lastId字段中。mongo中的序列 - 可以依賴findAndModify()嗎?

按照mongodb doc我想實現它使用findAnyModify()操作與update: { $inc: { lastId: 1 } }參數。我可以依靠每次下一個呼叫返回一個新的(增加的)號碼嗎?

還是更好的解決方案使用java AtomicLong計數器?它將從mongo開始讀取lastId,並且在每次增量時,我將寫入(但不讀取)mongo?

回答

1

如果您需要mongodb中的保留序列,您確實需要使用運算符$inc以在服務器端原子增量您將用作計數器的給定字段。

如果您使用AtomicLong,則幾乎無法保證序列的一致性(特別是在羣集環境中),以至於您可能面臨最終使用多個文檔的相同ID的情況。

+1

感謝您的解釋! – awfun

相關問題