2017-01-25 86 views
1

當兩位用戶更新同一個集合時,流星如何防止競爭狀態?我懷疑它必須與Fibers做些什麼。Meteor的競賽條件

下面的代碼來自待辦事項列表教程。如果兩個用戶同時切換複選框會怎麼樣。流星如何防止競爭狀況。你能指點我在源代碼中的正確位置嗎?

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在更新時實現鎖定。有人也在SO這裏應該證實這一點。另外,根據我的經驗,我沒有遇到這個問題。

無論如何,如果您還想限制調用某種方法(限制調用服務器中的某個方法),您可以使用包含大氣層的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僅在全球數據庫和收集級別使用意向鎖。當存儲引擎檢測到兩個操作之間的衝突時,將會發生寫衝突 ,導致MongoDB透明地重試該操作。