Разрешение блокировок базы данных в Mongo

У меня есть 2 коллекции, которые я уменьшаю во временную коллекцию, назовем их коллекция A и коллекция B и коллекция _queue. Пока я уменьшаю карту, пользователи пытаются читать и записывать в коллекцию A. Я получаю всевозможные блокировки и очереди на запись и чтение. Меня не волнует, есть ли грязные чтения или записи, есть ли способ читать и писать в коллекцию B и делать ее неатомарной? Заранее спасибо.


person Matt Kuhns    schedule 29.08.2016    source источник
comment
Обновление до mongo 3.2 устраняет эти блокировки.   -  person Matt Kuhns    schedule 26.09.2016


Ответы (1)


В MongoDB нет возможности указать что-либо в запросе относительно политики блокировки.

Во-первых, вам нужно проверить, действительно ли время для получения блокировки является проблемой (для этого вы можете использовать внутренний профилировщик MongoDB: https://docs.mongodb.com/manual/administration/analyzing-mongodb-производительность/#database-profiling)

Затем, если вы не используете последнюю версию MongoDB (или если вы выполняете обновление до последней версии без изменения механизма хранения), вы можете переключиться на WiredTigger, который перемещается из блокировки по коллекции (для серии 3.x, до 3. x MongoDB имеют блокировку по базе данных) на блокировку по документу. Поэтому, если вы используете WiredTiger и по-прежнему испытываете значительные задержки из-за конфликта блокировок, я не думаю, что вы можете что-то с этим поделать.

См. документацию WiredTiger здесь: https://docs.mongodb.com/manual/core/wiredtiger/

person loicmathieu    schedule 29.08.2016
comment
Спасибо, я собираюсь обновить Mongo до 3.0+. - person Matt Kuhns; 30.08.2016
comment
Обновление до Mongo 3.2 и использование движка WiredTiger решит проблему с блокировкой. - person loicmathieu; 30.08.2016