Можем ли мы выполнять одновременные операции чтения и записи в mongodb?

#mongodb

Вопрос:

У меня есть вопрос относительно MongoDB. Я прочитал документацию, но не получил четкого представления об этом, поэтому спрашиваю здесь. У меня есть одна коллекция, в которой мне нужно выполнять 24/7 операции чтения и записи из разных источников. Итак, вопрос в том, можем ли мы одновременно выполнять операции чтения и записи в одной и той же коллекции одновременно? Если нет, то какова альтернатива или какова главная причина этого .

У меня есть несколько крон python, которые выполняют операции R/W над коллекциями одновременно, у меня есть серверный API на стороне узла, который выполняет операции R/W над одной и той же коллекцией, так что это вызовет какие-либо проблемы? В настоящее время все это выполняется на стороне MySQL, но теперь, согласно требованиям клиента, мне нужно перейти на MongoDB из MySQL. Поэтому, пожалуйста, помогите мне разобраться в этой проблеме.

Ответ №1:

Прочитайте часто задаваемые вопросы: Параллелизм

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

В дополнение к режиму блокировки общего доступа (S) для чтения и режиму блокировки исключительного доступа (X) для операций записи, режимы общего доступа с намерением (IS) и исключительного доступа с намерением (IX) указывают на намерение прочитать или записать ресурс с использованием более тонкой блокировки детализации. При блокировке с определенной степенью детализации все более высокие уровни блокируются с помощью блокировки намерения.

И относительно проводного двигателя Tiger

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

Текущий движок mongodb по умолчанию WiredTiger таков, что если вы его используете — все в порядке. Чтобы проверить двигатель, выполните это db.serverStatus().storageEngine