Я не фахівець з бази даних і не маю офіційного досвіду інформатики, тому поводьтеся зі мною. Я хочу знати, які реальні негативні речі можуть трапитися, якщо ви використовуєте стару версію MongoDB до версії v4 , яка не відповідала ACID . Це стосується будь-якої бази даних, не сумісних з ACID.
Я розумію, що MongoDB може виконувати атомні операції , але вони не "підтримують традиційні блокування та складні транзакції", переважно з міркувань продуктивності. Я також розумію важливість транзакцій із базами даних, і на прикладі, коли ваша база даних призначена для банку, і ви оновлюєте кілька записів, які потрібно синхронізувати, ви хочете, щоб транзакція повернулася до початкового стану, якщо є відключення електроенергії, тому кредит дорівнює покупці тощо.
Але коли я вступаю в розмови про MongoDB, ті з нас, хто не знає технічних деталей того, як реально реалізуються бази даних, починають обробляти твердження на зразок:
MongoDB набагато швидший, ніж MySQL та Postgres, але є невеликий шанс, як 1 на мільйон, що він "не збережеться правильно".
Ця частина "не збережеться правильно" посилається на таке розуміння: Якщо в момент, коли ви пишете в MongoDB, відключення електроенергії є шанс на певний запис (скажімо, ви відстежуєте перегляд сторінки в документах з 10 атрибутами кожен), що в одному з документів збережено лише 5 атрибутів ... це означає, що з часом ваші лічильники перегляду сторінок будуть "трохи" вимкнені. Ви ніколи не дізнаєтесь на скільки, знаєте, що вони будуть на 99,999% правильними, але не на 100%. Це тому, що, якщо ви спеціально не зробили цю атомну операцію монгобада , ця операція не гарантована як атомна.
Отже, моє запитання полягає в тому, що таке правильне тлумачення, коли і чому MongoDB може не "правильно зберегти"? Які частини кислоти не задовольняє, і за яких обставин, і як ви знаєте, коли вимкнено ці 0,001% ваших даних? Неможливо це якось виправити? Якщо ні, це, мабуть, означає, що не слід зберігати такі речі, як ваша users
таблиця, у MongoDB, оскільки запис може не зберегтись. Але знову ж таки, що 1/1000000 користувачеві може просто потрібно "спробувати підписатись ще раз", ні?
Я просто шукаю, можливо, список того, коли / чому трапляються негативні речі з невідповідною базою даних ACID, на зразок MongoDB, і в ідеалі, якщо є стандартне вирішення (наприклад, запустити фонове завдання для очищення даних або використовувати для цього лише SQL тощо). .