Какие приложения не нуждаются в кислоте? - PullRequest
8 голосов
/ 25 апреля 2011

Извините за невежественный вопрос, но для каких приложений не требуется ACID-совместимый сервер баз данных? У меня есть опыт работы с SQL Server, где ACID всегда был "там", и теперь исследование других СУБД заставляет меня задуматься. Большинство приложений, о которых я могу подумать, хотели бы атомарности или изоляции. Спасибо!

Ответы [ 5 ]

10 голосов
/ 10 октября 2011

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

9 голосов
/ 24 октября 2011

Чего не хватает другим ответам, так это того, что общепринятая альтернатива ACID - это не «ничто», это то, что называется конечная согласованность (иногда по прозвищу BASE).

Когда люди говорят, что им нужна семантика ACID, часто то, что они действительно имеют в виду, по крайней мере с точки зрения требований к домену / бизнесу, это просто целостность данных . Они хотят убедиться, что данные не будут потеряны или повреждены. Многие базы данных NoSQL все еще предоставляют эту гарантию, они просто предоставляют ее по-другому и на своих собственных условиях.

Безусловно, можно использовать базу данных NoSQL или BASE в качестве небезопасной альтернативы базе данных SQL или ACID, если вы рассматриваете ее как просто «базу данных не-ACID». Принятие обоснованного решения означает, что вы понимаете, что необходимо сделать на уровне приложения , чтобы компенсировать отсутствие грубых транзакций и использовать сильные стороны EC. Некоторые общие методы:

  • Оптимистичный параллелизм , который уже используется для минимизации блокировок в транзакционной среде.

  • Идемпотентность операций, таких, что если длительная операция завершается неудачей на полпути, ее можно просто повторять снова и снова, пока она не будет успешной.

  • Методы длительных транзакций с использованием компенсирующих транзакций , часто называемые sagas в распределенных системах, где несколько независимых транзакций группируются по некоторому корреляционному идентификатору и состояние всей операции отслеживается независимо. Часто они фактически используют семантику ACID для самого саги, но это гораздо легче, чем двухфазный коммит.

На самом деле, если вы будете тратить много времени на работу с распределенными системами - даже с с семантикой ACID, доступной в каждой из отдельных подсистем, - вы найдете множество тех же методов, используемых для управления межсистемные операции, потому что без них вы просто снижаете производительность (вспомните BizTalk и BPEL).

Как только у вас появится некоторый опыт, вы поймете, что на самом деле это имеет большой смысл и часто проще , чем попытка применить семантику ACID. Вычислительные процессы - это просто модели для реальных процессов, и реальные процессы могут иногда давать сбой в середине потока. Вы забронировали рейс, но внезапно вы больше не можете идти. Чем ты занимаешься? Вы отменяете Может быть, вы вернете свои деньги, а может и нет, или, может быть, это что-то среднее - это ваши бизнес-правила. Или, может быть, вы начали бронирование, но отвлеклись или отвлеклись, или у вас отключилось питание, и теперь время вашей сессии истекло. Чем ты занимаешься? Просто начни сначала.

Чтобы по-настоящему ответить на вопрос, я бы ответил так:

Вам нужна семантика ACID, когда:

  • Можно ожидать, что несколько пользователей или процессов будут работать с одними и теми же данными в одно и то же время .

  • Порядок, в котором появляются транзакции, чрезвычайно важен;

  • Вы не можете допустить, чтобы устаревшие данные отображались пользователю.

  • Существуют значительные и / или прямые затраты на незавершенные транзакции (например, финансовая система, в которой несбалансированные итоги могут иметь серьезные последствия).

С другой стороны, вам не нужна семантика ACID, если:

  • Пользователи, как правило, обновляют только свои личные данные или вообще не обновляют (просто добавляют).

  • Не существует неявного (определенного бизнесом) упорядочения транзакций. Например, если за последний товар на складе конкурируют два покупателя, для вас не имеет значения, кто его получит.

  • Пользователи, как правило, будут находиться на одном и том же экране несколько секунд или минут за раз, и поэтому будут просматривать устаревшие данные в любом случае (это фактически описывает большинство приложений).

  • У вас есть возможность просто отказаться от незавершенных транзакций; нет никакого отрицательного эффекта от того, что они сидят в базе данных временно или в некоторых случаях навсегда.

Суть в том, что очень немногим приложениям действительно требуется семантика ACID везде . Однако многим приложениям потребуется их где-то - часто в изолированных карманах, таких как состояние саги или очереди сообщений.

В следующий раз, когда вы разрабатываете новое приложение или функцию, попробуйте подумать, возможно ли моделировать атомарную / изолированную «транзакцию» как асинхронную «цепочку событий» с небольшим дополнительным состоянием для связать их всех вместе. В некоторых случаях ответ будет нет , но вы можете быть удивлены тем, как часто ответ да .

2 голосов
/ 25 апреля 2011

Вы платите цену за семантику ACID.В случаях, когда вы управляете очень большим объемом данных и допускаете случайные несоответствия (т.е. вы не переводите деньги), могут быть предпочтительны решения, не связанные с ACID (например, большинство решений NoSQL).

http://www.schoonerinfotech.com/solutions/general/what_is_nosql

Facebook была одной из нескольких известных компаний, которые сделали этот компромисс на раннем этапе.На самом деле они написали Cassandra как хранилище данных, более соответствующее их потребностям в данных, и Cassandra явно не поддерживает семантику ACID.

0 голосов
/ 10 января 2018

Эрик Брюер о том, почему Банки БАЗА НЕ КИСЛОТА - Доступность есть доход

Тема здесь

Приложения, которым требуется КИСЛОТА

0 голосов
/ 25 апреля 2011

Все, что основано на базе данных типа NoSQL, приносит в жертву соответствие ACID в обмен на что-то, обычно скорость.

Twitter, Facebook, Reddit, Digg и т. Д. ... все они частично некислотные

...