2017-11-05 10 views
-1
間の要素を交換

はのは、オブジェクトを見てみましょうMongoDBのC#のドキュメント

Document1.Value -= X; 
Document2.Value += X; 

私は一度に二つの文書を選択することはできませんので、私はそれを2つのトランザクションにする必要があります(XをDocument1から取り出し、XをDocument2にします)。

転送中にリスク(クラッシュ、電源切断、エラーなど)を最小限に抑える最良の方法は何ですか。

答えて

0

これは、MongoDBのドキュメントでは約読み取ることができ、それは全くのユースケースに応じていますが、それは2つのフェーズコミットを使用するのが一般的です:https://docs.mongodb.com/manual/tutorial/perform-two-phase-commits/

しかし2フェーズ・コミットは、MongoDBのために限定されるものではなく、よそを使用していますアプリケーションで。

+0

私はこの記事に似た場所に「保留」システムを持っています。私はDocument1の特定の金額をDocument1のフィールドに保持し、次にDocument2を更新し、Document1の保留を解除または確認します。しかし、それは本当に理想的ではありません – Thomas

+0

どんな解決策をとっても、システム内で回復可能な状態を達成しようとしています。これまでスリップルーティングやサガを使ってキューを使用してきました。あなたのソリューションは理想的ではないのはなぜですか? –

+0

これは、私がスキャンして未完了の取引を見つけ出すツールを必要としていることを意味しています。再起動などの場合に備えてですが、これには完全な解決策はありません。 – Thomas

関連する問題