私はMongoDBに比較的慣れておらず、この手法に触発されたトランザクションの実装をいじっています:
http://cookbook.mongodb.org/patterns/perform-two-phase-commits/
特定のソース/宛先アカウントの同時トランザクションをブロックする方法を考えています。たとえば、ソースを一意のインデックスとして宣言することで、同じソースでの同時トランザクションをブロックできます。
transactionsCollection.ensureIndex({"source":1}, {unique: true});
var newDoc = {source: sourceID, destination: destinationID,
amount: 100, state:"pending"}
transactionsCollection.save(newDoc, {safe:true}, function(error, t) {
if (error.name == "MongoError" && error.code == 11001)
// duplicate index, so I'm locked out
}
しかし、私が本当に望んでいるのは、ソースまたは宛先のいずれかが (ソースまたは宛先として) トランザクション テーブルに既に存在する場合にロックアウトされることです。
したがって、私の質問は、上記を許可する方法でインデックスを設定できるかどうか、またはこれを達成するために他にどのような方法があるかということです。
ありがとう!