Я не эксперт по базам данных и не имею формального образования в области компьютерных наук, так что терпите меня. Я хочу знать, какие реальные негативные явления могут произойти, если вы используете старый 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 для этого и т. Д.) .