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