Что означает свойcтво "Согласованность" из ACID?

Определение из вики:

ACID - набор требований к транзакционной системе, обеспечивающий наиболее надёжную и предсказуемую её работу

Интересным тут является то, что требования предъявляются не в программисту, а к самой системе, которая обеспечивает работу транзакций.

И в данном контексте я не понимаю второе свойство - согласованность. Это разве не требование уже к программисту? Ведь определение согласованности относится уже к логике приложения, транзакция никак не может понять, согласованно текущее состояние или нет.


Ответы (2 шт):

Автор решения: Sergey Gornostaev

Прежде всего надо понимать, что ACID - это мнемоническая аббревиатура. Буквы в ней подобраны для запоминающегося звучания, а не потому, что у реляционных БД именно четыре характеристики именно с такими названиями. Характеристик с одной стороны больше, а с другой они взаимосвязаны и могут рассматриваться, как разные аспекты одной характеристики. То есть согласованность вполне можно рассматривать, как вытекающую из атомарности, и наоборот.

Конкретно согласованность - это гарантия СУБД соблюдать ограничения, то есть набор правил заданных при определении схемы базы данных. И да, это требования к программисту. Только к программисту СУБД, а не прикладного кода, который потом эту СУБД использует. Если вы начнёте соблюдаение ACID реализовывать в своём коде, то в результате у вас получится новая СУБД и отпадёт необходимость в использовании сторонней. Потом придёт начальник и наругает вас, что вы потратили время компании на реализацию велосипеда, вместо использования готовых средств.

→ Ссылка
Автор решения: Swift - Friday Pie

ACID - atomicity, consistency, isolation, durability.

Это требование к архитектуре ряда транзакционных систем (не только СУБД) и реализации их компонентов, как на уровне протокола, так и на низком уровне, выдвигаемые с целью определить их как высоконадежные. Стоит почитать о PACELC.

Атомарность, согласованность результатов, изоляция, устойчивость выполняемых операций. Откуда взялся перевод "согласованность" не знаю, к сожалению, русское слово несет слегка другую семантическую нагрузку (в английском есть подтекст "постоянство", "последовательность"). Отсюда и непонимание.

Атомарность - операция может быть либо завершена. либо отвергнута.

Согласованность - любой операция, которая была завершена, оставляет данные в легальном и строго детерминированном состоянии.

Изоляция - строго говоря, решение конфликта между первыми двумя. Если есть две одновременно выполняемые операции, их выполнение не влияет друг на друга. Т.е. если операция А началась после начала но до окончания операции Б, она будет работать с слепком состояния до начала работы Б.

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

Устойчивость - если операция получила статус завершенной, это значит что данные были изменены и никакие низкоуровневые проблем не привели к потере результатов. В рамках разумного. Если сервер взорвется или диск улетит в космос в следующую микросекунду после отправки статуса "завершено", это уже их проблемы.

В принципе, требование к реализации и есть требование к программисту, т.к. реализация (а имено сам код) является выражением его мыслей.Тут можно было бы притянуть за уши математику и попробовать доказать логически, что ИИ нельзя допускать к созданию СУБД или любой другой подобной системы, т.к. сам образ "мышления" языковых моделей не соответствует ACID, CAP и пр. т.к. на выходе мы имеет последовательность ошибок (в математическом смысле слова "ошибка") и отклонений, а не логически взаимосвязанных суждений. Сама нейронная модель в общем случае не соответствует ACID, но значит ли это что тогда человека тоже нельзя допускать? Парадокс. Следовательно, мы ограничиваемся требованиями к реализации.

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

→ Ссылка