Что означает свойcтво "Согласованность" из ACID?
Определение из вики:
ACID - набор требований к транзакционной системе, обеспечивающий наиболее надёжную и предсказуемую её работу
Интересным тут является то, что требования предъявляются не в программисту, а к самой системе, которая обеспечивает работу транзакций.
И в данном контексте я не понимаю второе свойство - согласованность. Это разве не требование уже к программисту? Ведь определение согласованности относится уже к логике приложения, транзакция никак не может понять, согласованно текущее состояние или нет.
Ответы (2 шт):
Прежде всего надо понимать, что ACID - это мнемоническая аббревиатура. Буквы в ней подобраны для запоминающегося звучания, а не потому, что у реляционных БД именно четыре характеристики именно с такими названиями. Характеристик с одной стороны больше, а с другой они взаимосвязаны и могут рассматриваться, как разные аспекты одной характеристики. То есть согласованность вполне можно рассматривать, как вытекающую из атомарности, и наоборот.
Конкретно согласованность - это гарантия СУБД соблюдать ограничения, то есть набор правил заданных при определении схемы базы данных. И да, это требования к программисту. Только к программисту СУБД, а не прикладного кода, который потом эту СУБД использует. Если вы начнёте соблюдаение ACID реализовывать в своём коде, то в результате у вас получится новая СУБД и отпадёт необходимость в использовании сторонней. Потом придёт начальник и наругает вас, что вы потратили время компании на реализацию велосипеда, вместо использования готовых средств.
ACID - atomicity, consistency, isolation, durability.
Это требование к архитектуре ряда транзакционных систем (не только СУБД) и реализации их компонентов, как на уровне протокола, так и на низком уровне, выдвигаемые с целью определить их как высоконадежные. Стоит почитать о PACELC.
Атомарность, согласованность результатов, изоляция, устойчивость выполняемых операций. Откуда взялся перевод "согласованность" не знаю, к сожалению, русское слово несет слегка другую семантическую нагрузку (в английском есть подтекст "постоянство", "последовательность"). Отсюда и непонимание.
Атомарность - операция может быть либо завершена. либо отвергнута.
Согласованность - любой операция, которая была завершена, оставляет данные в легальном и строго детерминированном состоянии.
Изоляция - строго говоря, решение конфликта между первыми двумя. Если есть две одновременно выполняемые операции, их выполнение не влияет друг на друга. Т.е. если операция А началась после начала но до окончания операции Б, она будет работать с слепком состояния до начала работы Б.
В результате выполнения этих трех требований, не может быть промежуточного (аварийного) состояния вызванного невозможностью, логической или физической, завершить операцию. Это так же приводит к тому что повторение одной и той же неразрушающей операции (т.е. мы не удаляем данные) дает одни и те же результаты. Повторение разрушающей операции не приводит к аварии, нам просто нечего удалить.
Устойчивость - если операция получила статус завершенной, это значит что данные были изменены и никакие низкоуровневые проблем не привели к потере результатов. В рамках разумного. Если сервер взорвется или диск улетит в космос в следующую микросекунду после отправки статуса "завершено", это уже их проблемы.
В принципе, требование к реализации и есть требование к программисту, т.к. реализация (а имено сам код) является выражением его мыслей.Тут можно было бы притянуть за уши математику и попробовать доказать логически, что ИИ нельзя допускать к созданию СУБД или любой другой подобной системы, т.к. сам образ "мышления" языковых моделей не соответствует ACID, CAP и пр. т.к. на выходе мы имеет последовательность ошибок (в математическом смысле слова "ошибка") и отклонений, а не логически взаимосвязанных суждений. Сама нейронная модель в общем случае не соответствует ACID, но значит ли это что тогда человека тоже нельзя допускать? Парадокс. Следовательно, мы ограничиваемся требованиями к реализации.
TLDR: ACID является набором доказуемых требований к надежной транзакционной системе, ее создатель, человек-программист, таковой не является.