2016-11-04 3 views
1

transactionsというコレクションを用意して、ユーザー間ですべての通貨取引を保存したいと考えています。 transactionを作成する前に、senderに十分な金額のアカウントがあることを確認します。MongoDBの通貨取引

勘定残高については、私はオンデマンドで計算し、それを保存しない予定です。

競合状態を避けるためにMongoDBで使用できるパターンはありますか?

e。ユーザーAの残高が$ 10だとします。もし彼が同時に$ 10の2回の送金依頼をした場合、私は自分のアカウントでネガティブに終わることがあります。それを避ける方法はありますか?

+0

実際、気にしないでください。私はこのレシピをCouchDBで見つけました。これはMongoDBでも完璧に動作します:http://blog.codekills.net/2014/03/13/atomic-bank-balance-transfer-with-couchdb/ –

答えて

1

MongoDBはリレーショナルデータベースのようなトランザクションを処理しません。これらの取引を処理するには、Two Phase commitsを使用することをお勧めします。これを使用してロールバック機能を追加することもできます。

2相コミットパターンを追加する方法については、MongoDBドキュメントのthis美しい記事を参照してください。

+0

2フェーズコミットは私は書類に残高を残していましたが、私は計画していません。 –

+0

ええ、あなたのCouchDBのハックも機能します。 –