1 つの MongoDB インスタンスで動作する 2 つのクライアントが、«forceServerObjectId: true» なしで同時に操作を実行および挿入するとどうなりますか。同一の ObjectID を生成することは可能ですか?競合が発生する可能性はありますか?
2165 次
1 に答える
2
すべてのコレクションの _id フィールドには暗黙の一意のインデックスがあり、同じ _id を持つ 2 つのオブジェクトが同じコレクションに存在することはできません。
同じ _id 値を持つ 2 つのオブジェクトが に保存されるとcollection.save
、一方のドキュメントが他方のドキュメントに置き換わります。
で保存するとcollection.insert
、挿入の 1 つが重複キー エラーで失敗します。
ただし、MongoDB ObjectIDには 24 ビットのマシン ID が含まれていることに注意してください。これにより、同じマシン ID を持たない限り、2 つのクライアントが同じ ID を生成することはできなくなります。そして、それでも可能性は低いです。もちろん、これは MongoDB ドライバー (またはシェル) に ObjectID を自動生成させた場合にのみ適用されます。MongoDB では、_id フィールドを手動で設定すると、任意の型の任意の値を _id フィールドの値として使用できます。これを行う場合 (すべきではありません)、一意性を確保するのはユーザーの責任です。
于 2013-05-22T13:05:15.560 に答える