Почему MongoDB не был совместим с ACID до v4 действительно означает?

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

222
задан Dan Dascalescu 28 September 2018 в 16:26
поделиться