Блокируется ли чтениезапись при сохранение на диск?

В MongoDB блокировки чтения и записи работают на уровне коллекций. Это означает, что при выполнении операции сохранения (например, при вызове метода insert() или update()) на коллекции, все параллельные операции чтения и записи для этой коллекции будут заблокированы до завершения операции сохранения.

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

Когда операция сохранения выполняется, MongoDB использует механизмы записи на диск, для того чтобы обеспечить надежность данных и сохранить их после перезапуска сервера. Однако, по умолчанию MongoDB не ожидает записи на диск для подтверждения операции сохранения, чтобы минимизировать задержку операций записи. Вместо этого, она использует механизмы журналирования, чтобы обеспечить целостность данных. В памяти операционной системы происходит запись в журнал (oplog), а фактическая синхронизация на диск происходит в памяти в фоновом режиме.

Поэтому, хотя записи на диск происходят в фоновом режиме, это не блокирует операции чтения и записи. Операции чтения могут выполняться параллельно с операциями сохранения, даже если запись на диск еще не выполнена.

Для обеспечения дополнительной надежности данных, MongoDB предоставляет различные опции, такие как подтверждение записи на диск (write concern) и ожидание журналирования (journaling). При включении данных опций MongoDB будет блокировать операции чтения и записи до подтверждения записи на диск, что может повлиять на производительность системы, но обеспечит более высокую надежность данных.

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