Я не эксперт по базам данных и не имею официального опыта работы с информатикой, так что терпите меня. Я хочу знать , виды реальных негативных вещей , которые могут произойти , если вы используете старую версию MongoDB до v4 , которые не были ACID требований. Это относится к любой базе данных, несовместимой с ACID.
Я понимаю, что MongoDB может выполнять атомарные операции , но они не "поддерживают традиционную блокировку и сложные транзакции", в основном по соображениям производительности. Я также понимаю важность транзакций базы данных и пример, когда ваша база данных предназначена для банка, и вы обновляете несколько записей, которые все должны быть синхронизированы, вы хотите, чтобы транзакция вернулась в исходное состояние, если есть перебои в подаче электроэнергии, поэтому кредит равен покупке и т. д.
Но когда я вхожу в разговоры о MongoDB, те из нас, кто не знает технических деталей о том, как на самом деле реализованы базы данных, начинают разбрасываться такими заявлениями:
MongoDB работает намного быстрее, чем MySQL и Postgres, но есть небольшой шанс, например, 1 на миллион, что он «не сохранит правильно».
Эта часть «не сохранит правильно» относится к следующему пониманию: если в момент записи в MongoDB происходит сбой питания, есть шанс для конкретной записи (например, вы отслеживаете просмотры страниц в документах с 10 атрибутами). каждый), что один из документов сохранил только 5 атрибутов… что означает, что со временем ваши счетчики просмотров будут «слегка» выключены. Вы никогда не узнаете, насколько, вы знаете, что они будут правильными на 99,999%, но не на 100%. Это потому, что, если вы специально не сделали это атомарной операцией mongodb , эта операция не гарантированно была атомарной.
Поэтому мой вопрос: какова правильная интерпретация того, когда и почему MongoDB может «не сохранять правильно»? Каким частям ACID он не соответствует, и при каких обстоятельствах, и как вы узнаете, что эти 0,001% ваших данных отключены? Разве это не может быть исправлено как-то? Если нет, то это означает, что вы не должны хранить такие вещи, как ваша users
таблица, в MongoDB, потому что запись может не сохраниться. Но опять же, этому 1/1 000 000 пользователей может просто понадобиться «попробовать зарегистрироваться снова», нет?
Я просто ищу, может быть, список, когда / почему негативные вещи случаются с несовместимой с ACID базой данных, такой как MongoDB, и в идеале, если есть стандартный обходной путь (например, запустить фоновое задание для очистки данных или использовать только SQL для этого и т. Д.) ,