Это парадокс, что каждый парень RDBMS думает, что небо упадет без ACID, но большинство парней NoSQL с удовольствием разворачивают и поддерживают приложения конечного пользователя, даже не думая, что «мое приложение будет лучше с ACID». Вопреки ответу Марка Б, базы данных NoSQL не являются базами данных, где обновления случайно теряются или данные случайно повреждены. Ключевое отличие состоит в том, что в базах данных NoSQL вы можете использовать ограниченные версии атомарности, изоляции и т. Д., Но для реализации транзакций произвольной сложности требуется значительное количество усилий.
Нет никаких причин, по которым вы не можете внедрить банковскую систему, используя базу данных без ACID. Большинство баз данных NoSQL позволяют вам использовать микротранзакции, которые вычитают деньги с одного счета и добавляют их к другому, с вероятностью 0% от общей суммы денег в системе.
Чтобы обсудить этот вопрос в контексте реальных примеров, я опишу наше приложение. Моя компания продает программное обеспечение для средних школ, в первую очередь, для составления расписания, а также для переклички, управления отсутствием / заменой учителей, экскурсий и бронирования номеров. Наше программное обеспечение основано на разработанном компанией ядре базы данных, не поддерживающем ACID, под названием Mrjb (доступен только внутри), который имеет ограничения, типичные для баз данных NoSQL.
Пример различия между ACID и NoSQL в отношении конечного пользователя заключается в том, что если два пользователя пытаются отметить один и тот же бросок в одно и то же время, существует (очень) небольшая вероятность того, что конечный результат будет комбинация данных, представленных обоими пользователями. База данных ACID гарантирует, что конечный результат будет либо данными одного пользователя, либо данными другого, либо, возможно, обновление одного пользователя завершится неудачно и вернет пользователю сообщение об ошибке.
В этом случае я не думаю, что нашим пользователям будет важно заботиться о том, соответствуют ли статусы «отсутствия» отдельных учеников обновлению одного пользователя или их комбинации, хотя их будет беспокоить, если мы назначим статусы отсутствия, которые вопреки мнениям обоих пользователей. Этот пример не должен встречаться на практике, и если это так, то это «условие гонки», когда по существу нет правильного ответа о том, какому пользователю мы верим.
В связи с нашей базой данных Mrjb был задан вопрос о том, можем ли мы реализовать ограничения, такие как «не разрешать объекту Student существовать без соответствующего объекта Family». («C» в «ACID» = согласованность). Фактически мы можем поддерживать это ограничение - еще один пример микротранзакции.
Другой пример - загрузка новой версии школьного расписания (обычно двухнедельный цикл), на котором основано ежедневное расписание. Нам было бы трудно сделать эту транзакцию обновлением атомарной или разрешить другим транзакциям выполняться изолированно от этого обновления. Таким образом, у нас, в основном, есть выбор: «остановить мир» во время этой крупной транзакции, которая занимает около 2 секунд, или предоставить возможность студенту распечатать расписание, содержащее комбинацию данных до и после обновления (есть вероятно, окно 100 мс, в котором это может произойти). Вариант «остановить мир», вероятно, является лучшим вариантом, но на самом деле мы делаем последнее. Вы можете утверждать, что смешанное расписание хуже, чем расписание до обновления, но в обоих случаях нам нужно полагаться на то, что в школе есть процесс уведомления учеников об изменении расписания - ученик отрабатывает устаревшее расписание это большая проблема, даже если это согласованное расписание. Также обратите внимание, что студенты обычно просматривают свое расписание онлайн, и в этом случае проблема значительно уменьшается.
Я также написал «базу данных BLOB на основе файловой системы» для http://brainresource.com, чтобы хранить их сканирование мозга. Это важная база данных, которая не имеет свойств ACID, хотя они и используют СУБД для других данных об их субъектах.
Для справки, наша компания описана здесь: http://edval.com.au, а наша технология NoSql описана здесь (описана как методика): http://www.edval.biz/memory-resident-programming-object-databases.Была обеспокоенность тем, что эта публикация была спамом, что дало толчок нашей компании, но я бы сказал, что (а) на заданный вопрос нельзя ответить только с теоретической точки зрения - вам нужны реальные примеры и (б) отказлюбая идентифицирующая информация о продукте или технологии базы данных не подходит.