Я не эксперт по базам данных и не имею формальной основы информатики, поэтому несите меня. Я хочу знать виды негативных вещей в реальном мире, которые могут произойти, если вы используете MongoDB, который не соответствует ACID. Это относится к любой несоответствующей базе данных ACID.
Я понимаю, что MongoDB может выполнять Atomic Operations, но они не поддерживают традиционную блокировку и сложные транзакции, в основном по соображениям производительности. Я также понимаю важность транзакций базы данных и пример того, когда ваша база данных предназначена для банка, и вы обновляете несколько записей, которые все должны быть синхронизированы, вы хотите, чтобы транзакция вернулась в исходное состояние, если есть отключение питания, поэтому кредит равен покупке и т.д.
Но когда я вхожу в разговоры о 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 для этого, и др.).