0

私はアプリを書いていますが、それは複数のサーバーで実行されます。

2 つのコレクションXY.

X次のようなドキュメントがあります。{ _id : 123, name : "something"}

Y次のようなドキュメントがあります。{ _id : 456, parent_id : 123, name : "anything"}

ドキュメントを削除するときに、Xすべての子を削除しYたいのですが、何らかの方法でコレクションをロックしてYサーバー nYがその正確なparent_idで新しいドキュメントを書き込めないようにします。

私が理解したことMongoDBにはコレクションレベルのロックがないため、この問題をどのように解決すればよいですか?

また、2 つのコレクションを 1 つにマージすることは、私にとって選択肢ではないことに注意してください。

ありがとう!

4

1 に答える 1

0

evalMongoDB は実際にはデータベース レベルでロックするため、MongoDB のロックはここでは問題ではありません。つまり、単一のクエリで複数のコレクションに影響を与えることができる場合、これは簡単に可能になりますが、現状では、 edを使用しないと簡単には不可能です。JavaScript; これは複数の理由で行いません。1 つは、グローバル JS ロックが必要な効果を得るために、JS にアクセスする、xおよび/またはJS にある必要があるすべてのクエリです。y

lockこれをまともな方法で解決する唯一の実際の方法は、他のクエリが最初にクエリを実行する必要があるある種のコレクションを適用することです。またはlocked、コレクション内のドキュメントにフィールドを追加し、アトミック操作を使用して設定することもできます他のクエリがそれらのlockedドキュメントにアクセスできないようにします。同時実行機能により、データが他の操作のためにページインされていない場合、MongoDB は非アトミック操作を実際に抑えることができるため、これが必要になります。

これらの 2 つの方法は、現在、私が思いつくことができる最善の方法です。

于 2013-03-26T16:04:53.553 に答える