2017-01-25 12 views
1

2人のユーザーが同じコレクションを更新した場合、Meteorは競合状態をどのように防止しますか?私はそれが繊維で何かをしなければならないと思う。流星の競合条件

以下のコードは、todoリストのチュートリアルのものです。 2人のユーザーがチェックボックスを同時に切り替えるとどうなりますか?流星はどのように競争状態を防ぎますか?あなたはソースコードの正しい場所に私を指摘できますか?

Template.task.events({                        
    'click .toggle-checked'() { 
    // Set the checked property to the opposite of its current value 
    Tasks.update(this._id, { 
     $set: { checked: ! this.checked }, 
    }); 
    }, 
    'click .delete'() { 
    Tasks.remove(this._id); 
    }, 
}); 

答えて

0

これは端のケースだと思います。 MeteorはMongodbにバインドされ、Mongodbは更新時にロックを実装します。それでここにいる誰かがこれを確認しなければなりません。また、私の経験ではこの問題は発生しませんでした。とにかく

、あなたはまた、制限を評価したい場合は、(サーバー内のメソッドへの呼び出しを制限する)特定のメソッドを呼び出して、あなたは大気からhttps://atmospherejs.com/meteor/ddp-rate-limiterパッケージを使用することができます!これを使用すると、現在のユーザーのメソッドへの呼び出しを制限できます。素敵なガイドでは、流星シェフのブログで提供されています:https://themeteorchef.com/tutorials/rate-limiting-methods

は流星があなたのシナリオでは何もしません

1

、それはそれを処理するためにMongoDB次第です...私を知ってみましょう。それは使用しているストレージエンジンによって異なります。

WiredTigerでは、レコードレベルのロックが可能です。ここで確認してください。ほとんどの読み取りおよび書き込み操作のためにhttps://docs.mongodb.com/manual/faq/concurrency/#how-granular-are-locks-in-mongodb

は、WiredTigerは楽観 同時実行制御を使用しています。 WiredTigerは、グローバルな データベースおよびコレクションレベルでインテントロックのみを使用します。ストレージエンジンが2つの操作間で の競合を検出すると、書き込み競合が発生して が発生し、MongoDBはその操作を透過的に再試行します。