0

場合によっては、MongoDB でアトミックかつ分離された複数の更新操作を実行して、他のプロセスまたはスレッドが処理中にデータを取得しないようにする必要があります。原子性と分離がドキュメント レベルでのみサポートされており、ロックも db レベルで維持されていることを認識しています。上記のケースに関して、次のクエリがあります。

  • 「$isolated」はクラスターでは機能せず、さらに findAndModify() は単一のドキュメントで機能するため、このような複数の更新をバッチで個別に実行できる方法はありますか?
  • 上記のケースを実現するために同時実行制御を行うにはどうすればよいですか?
  • ここで 2 フェーズ コミットを使用できますか?トランザクションを維持することによって、それは分離された方法で実行されますか?
  • 調査中に、複数バージョンの同時実行制御に MongoMVCC を見つけました。使用したことがある場合は、上記のユース ケースに関する経験を共有してください。
4

1 に答える 1

1

$isloated はシャードでは機能せず、さらに findAndModify() は単一のドキュメントで機能するため、このような複数の更新をバッチで個別に実行できる方法はありますか?

いいえ、$isolated最も近いものです

上記のケースを実現するために同時実行制御を行うにはどうすればよいですか?

できません。MongoDB 独自の同時実行性は、ACID の I を分割することによって機能します。

ここでトランザクションを維持することにより、ここで 2 フェーズ コミットを使用できますか?

サーバー側で分離されたトランザクションではない 2 フェーズ コミットは機能しません。

調査中に、複数バージョンの同時実行制御に MongoMVCC を見つけました。使用したことがある場合は、上記のユース ケースに関する経験を共有してください。

これは MongoDB の上に Java で記述されています。実際には MongoDB 自体ではなく、ACID の I を置き換えることはできません。また、MVCC は、分離された操作よりもロックレス データベースに関するものです。

于 2013-10-01T12:46:35.820 に答える