У меня есть 2 коллекции, которые я уменьшаю во временную коллекцию, назовем их коллекция A и коллекция B и коллекция _queue. Пока я уменьшаю карту, пользователи пытаются читать и записывать в коллекцию A. Я получаю всевозможные блокировки и очереди на запись и чтение. Меня не волнует, есть ли грязные чтения или записи, есть ли способ читать и писать в коллекцию B и делать ее неатомарной? Заранее спасибо.
Разрешение блокировок базы данных в Mongo
Ответы (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/