Upload
7bits
View
216
Download
5
Embed Size (px)
Citation preview
Стажировка-2015
Транзакции в БД, работа с БД из Java-приложения
Занятие 12
Стажировка-2015
Пример: в БД студентов нужно сменить старосту группы, не нарушая условие, что в каждый момент времени в группе ровно 1 староста.
Транзакции
Стажировка-2015
Транзакция – группа последовательных операций, которая логически неделима, и выполняется целиком или не выполняется вовсе.
Транзакции
Стажировка-2015
Atomicity (атомарность) – гарантирует, что транзакция фиксируется в системе только полностью (гарантируется СУБД).
Свойства транзакций
Стажировка-2015
Consistency (согласованность) – если система находилась в согласованном состоянии до транзакции, то будет в этом состоянии и после фиксации транзакции (зависит от разработчиков).
Свойства транзакций
Стажировка-2015
Isolation (изолированность) – гарантирует, что параллельно исполняющиеся транзакции могут видеть только разрешенные данные друг друга (гарантируется СУБД, управляется разработчиками).
Свойства транзакций
Стажировка-2015
Durability (надежность) – гарантирует, что результат зафиксированной транзакции останется в системе даже после отключения питания (гарантируется СУБД).
Свойства транзакций
Стажировка-2015
DB server
Соединение (connection)
Память
Параллельные транзакции
Стажировка-2015
select * fromstudent where id = 3;
delete fromstudent where id = 3;
Параллельные транзакции
Стажировка-2015
Non-repeatable read (неповторяемое чтение) – при повторном чтении данных в рамках транзакции они могут оказаться удаленными или измененными другой транзакцией.
Проблемы параллельных транзакций
Стажировка-2015
Phantom reads (фантомное чтение) – при повторном чтении одних и тех же данных в рамках транзакции возможны отличия (новые строки, значения столбцов и т.д.).
Проблемы параллельных транзакций
Стажировка-2015
Lost update (потерянное обновление) – при параллельном обновлении одних и тех же данных одно из обновлений теряется.
Проблемы параллельных транзакций
Стажировка-2015
Dirty read («грязное» чтение) – чтение незафиксированных данных другой транзакции, которая в последствии откатится.
Проблемы параллельных транзакций
Стажировка-2015
Serializable (упорядоченный) – идентичен ситуации, когда все транзакции выполняются строго последовательно. Решает все упомянутые проблемы.
Уровни изолированности транзакций
Стажировка-2015
Repeatable read (повторяемое чтение) – гарантирует повторяемость чтения, отсутствие «грязного» чтения и отсутствие потерянных обновлений. Возможны фантомные чтения.
Уровни изолированности транзакций
Стажировка-2015
Read commited (чтение зафиксированных данных) – гарантирует отсутствие «грязного» чтения и потерянных обновлений. Возможны фантомные и неповторяемые чтения.
Уровни изолированности транзакций
Стажировка-2015
Read uncommited (чтение незафиксированных данных) – гарантирует отсутствие потерянных обновлений. Возможны «грязные», фантомные и неповторяемые чтения.
Уровни изолированности транзакций
Стажировка-2015
«+» - предотвращает, «-» - нет
Уровни изолированности транзакций
Стажировка-2015
Операция установления соединения с БД – очень «дорогая» по времени и ресурсам
Соединения приложения с БД
Стажировка-2015
Пул соединений (connection pool) – модуль, осуществляющий контроль за открытием, переиспользованием и закрытием подключений к БД
Соединения приложения с БД
Стажировка-2015
Транзакции приложений работают в рамках
соединений.
Соединения приложения с БД
Стажировка-2015
Connection pool для Java: dbcp
Соединения приложения с БД
Стажировка-2015
Ссылка только для авторизованных
Пример работы с БД в Spring