Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ SQL\T-SQL ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

FreeBSD and Nix

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Свойства ACID и транзакции баз данных


 
Свойства ACID и транзакции баз данных
 
 
В реляционных базах данных логическая операция называется - транзакцией
 
Транзакция может состоять из нескольких операций (create, read, update, delete – CRUD)
 
 
Свойства ACID
 
 
Атомарность:
Все или ничего, если любая часть транзакции завершается неудачно, то неудачно завершается вся транзакция
 
 
Согласованность (Консистентность):
Транзакция переводит базу данных из одного непротиворечивого состояния в другое непротиворечивое состояние
 
Т.е. все требования уникальности и требования были соблюдены для каждой совершенной транзакции:
Требования по ключам (primary и foreign keys), уникальности, типам данных, триггерам успешно пройдены
 
 
Изолированность:
Во время выполнения транзакции, параллельные ей транзакции не должны оказывать влияние на ее результат
 
Стандарт SQL определяет 4 уровня изолированности
 
Уровни (кроме SERIALIZABLE) подвержены аномалиям (отличия см. в документации используемой БД):
 
Обычно, уровень изоляции БД - READ_COMMITTED
 
СУБД Уровень по умолчанию
 
Примечание! Далее будут примеры, в которых у БД PostgreSQL уровни изоляции по другому меняют логику аномалий!
 
Чтож, посмотрим, как ведет себя postgreSQL на разных уровнях изоляции, попробуем подловить аномалии
 
Грязное чтение
Происходит когда транзакция может прочитать незаконченные изменения другой выполняемой транзакции
Происходит ввиду того, что нет предотвращающих чтение блокировок это
 
Неповторяющееся чтение 
Происходит когда повторные чтения в одной транзакции дают разные результаты ввиду действий параллельных транзакций
Например параллельная транзакция обновила запись, которую читает первая транзакция
 
Примеры ниже показаны на PostgreSQL
 
Создадим базу и таблицу для тестов:
 
Прочтите до выполнения текст всех трех транзакций
 
Транзакция 1 (выполняется параллельно Транзакии 2):
 
Транзакция 2, версия 1:
 
Результат 1, 1, 21, 21, При параллельной работе SELECT в транзакции 2 не ожидает окончания транзакции 1
 
Вернем значение назад:
 
Транзакция 2, версия 1:
 
Результат 1, 1, 1 и 21, При параллельной работе SELECT в транзакции 2 не ожидает окончания транзакции 1
 
Фантомное чтение (PostgreSQL пытается исключить аномалию)
Когда одна транзакция пытается прочитать строку, которая еще не существует в начале транзакции
Однако строка вставляется другой транзакцией и успешно заканчивается, прежде чем закончится первая транзакция
Если первая транзакция снова выполнит поиск этой строки, то обнаружит ее неожиданное появление
Эта новая строка называется - фантомной строкой
 
Вернем значение назад:
 
Прочтите до выполнения текст всех трех транзакций
 
Транзакция 1 (выполняется параллельно Транзакии 2):
 
Транзакция 2, версия 1
 
Результат 1, 1, 1 и 21, При параллельной работе SELECT в транзакции 2 не ожидает окончания транзакции 1
 
Транзакция 2, версия 1
 
Результат 1, 1, 1 и 21, При параллельной работе SELECT в транзакции 2 не ожидает окончания транзакции 1
 
Долговечность:
Результат зафиксированных (успешно выполненных) транзакций сохраняется даже в случае аварии (сбоя) сервера
 

Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект