Стажировка-2015. Разработка. Занятие 12. Транзакции в БД,...

Preview:

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

Стажировка-2015

Email: at@7bits.itSkype: anna_tarasenkoWeb: 7bits.ru

Вопросы?

Recommended