2017-01-25 4 views
1

Как Метеор предотвращает гонку, когда два пользователя обновляют одну и ту же коллекцию? Я подозреваю, что он должен что-то сделать с помощью Fibers.Состояние гонки в Метеор

Код приведен в учебнике списка дел. Что делать, если два пользователя переключают флажок одновременно. Как метеор препятствует состоянию гонки. Можете ли вы указать мне нужное место в исходном коде?

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

Meteor не делает ничего в вашем сценарии, это до MongoDB, чтобы справиться с этим. и это зависит от того, какой механизм хранения вы используете.

WiredTiger позволяет записывать блокировку на уровне записи. проверьте здесь: https://docs.mongodb.com/manual/faq/concurrency/#how-granular-are-locks-in-mongodb

Для большинства операций чтения и записи, WiredTiger использует оптимистическое управление параллелизма. WiredTiger использует только блокировки намерений на глобальном уровне базы данных и сбора данных . Когда механизм хранения обнаруживает конфликты между двумя операциями, возникает конфликт записи , заставляющий MongoDB прозрачно повторять эту операцию.

Смежные вопросы