@razoronline

Зачем/когда использовать Mongodb (document/collection level) blocking?

Только что прочитал на хабре про релиз Mongodb 3. Там есть новинка - блокировка на уровне документов, до этого было на уровне коллекции.
В мире БД я не профессионал. Хотел бы понять зачем и когда нужно использовать блокировку (не важно на каком уровне). И в чем же преимущество блокировки на уровне документа чем на уровне коллекции.

Уже погуглил. Простого ответа не нашел. Пожалуйста кто прошу просветить.
Заранее Спасибо
  • Вопрос задан
  • 3302 просмотра
Пригласить эксперта
Ответы на вопрос 4
@kazmiruk
Когда вы производили изменения записи, то база блокирует эту запись, чтобы никто другой не залез и не начал тоже пытаться что-то поменять. Если она это не сделает, то неминуемо пойдут баги. Так вот, когда это делалось на уровне коллекций, то при изменении одной записи блокировались вся коллекция, содержащая запись. И даже если пытаться поменять совершенно другую запись, то все равно придётся ждать предыдущую блокировку. Т.е. обращение ко всей коллекции было синхронным 1 запись за раз. Сейчас блокируется только документ, над которым производится манипуляция. Это позволяет 10 разным пользователям работать с 10 разными документами в коллекции одновременно и не ожидать друг друга, что существенно повышает скорость ответа
Ответ написан
Комментировать
disc
@disc
веб-разработчик
Когда блокировка идет на всю коллекцию, вы не можете изменять любой документ из этой коллекции.
Если на уровне документа, вы смело и без дедлоков меняете другие документы коллекции.
Ответ написан
Комментировать
rajdee
@rajdee
Front-end developer
Вопрос блокировки возникает при одновременном обращении к ресурсу, т.е. в предыдущих версиях MongoDB, при одновременном обращении блокировалась вся коллекция, а в новой версии только документ.
Ответ написан
Комментировать
onyxmaster
@onyxmaster
Программист, ненастоящий сисадмин
Небольшое уточнение -- до 3.0 (2.8) блокировка была на уровне БД, а не коллекции. В новой версии блокировки зависят от используемого storage engine. Совместимый со старыми версиям на уровне файлов storage engine MMAPv1 теперь поддерживает блокировки на уровне коллекций, а новый storage engine WiredTiger поддерживает блокировку на уровне документов (на самом деле не совсем документов, а записей но в общем можно и так сказать).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы