ええと、あなたが言及したリンクを使用する 、私はむしろカウンター収集アプローチ 。
カウンターコレクションのアプローチには、次のようないくつかの欠点があります:
- 常に複数のリクエスト(2つ)を生成します。1つはシーケンス番号を取得するためのもので、もう1つはシーケンスを介して取得したIDを使用して挿入を行うためのものです。
- mongodbのシャーディング機能を使用している場合、カウンター状態の保存を担当するドキュメントが頻繁に使用される可能性があり、そのたびに同じサーバーに到達します。
ただし、ほとんどの用途に適しているはずです。
あなたが言及したアプローチ("楽観的ループ」 )IMOを壊してはいけません、そしてなぜあなたがそれに問題を抱えているのか私は推測しません。しかし、私はそれをお勧めしません。複数のmongoクライアントでコードを実行した場合、1つに多くの遅延があり、他のクライアントがIDを取得し続けるとどうなりますか?このような問題は発生したくありません...さらに、成功した操作ごとに少なくとも2つのリクエストがありますが、成功するまでに最大で再試行することはできません...