2017-01-20 3 views
1

1秒あたり約100回と呼ばれる操作のために、いくつかの永続性整数IDが必要です。私はidがlastIdフィールドに格納されているSettingsコレクション内に単一のドキュメントを持っています。mongoのシーケンス - findAndModify()に依存できますか?

mongodb docfindAnyModify()オペレーションを使用して実装する場合は、update: { $inc: { lastId: 1 } }パラメータを使用します。次の呼び出しが新しい(インクリメントされた)番号を返すことに頼ることができますか?

または、JavaのAtomicLongカウンタを使用するのがよい方法ですか?開始時にmongoからlastIdが読み込まれ、各インクリメントにmongoから書き込む(しかし読み込まない)のだろうか?

答えて

1

mongodbで永続化されたシーケンスが必要な場合は、カウンターとして使用する特定のフィールドをサーバー側でアトミックにインクリメントするには、実際には演算子$incを使用する必要があります。

AtomicLongを使用すると、複数のドキュメントで同じIDになる状況に直面するようなシーケンス(特にクラスタ環境)の一貫性を保証することはほとんどできません。

+1

ありがとうございます! – awfun

関連する問題