Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Транзакции.
Транзакция последовательность нескольких операций, рассматриваемая как единое целое.
Понятие транзакции пришло из банковской деятельности, предположим что в банковской системе есть 2 счета:
Счет А:= Счет А-1000
Счет Б:=Счет Б+1000
Две эти операции должны либо одновременно выполниться, либо одновременно не выполниться.
UPDATE ACCOUNT SET MONEY = MONEY 100 WHERE ID=СЧЕТ Ф
UPDATE ACCOUNT GET MONEY = MONEY + 100 WHERE ID=СЧЕТ Б
ACID
Atomicity Транзакция неразделима на части.
Conssistency целостность, БД до начала транзакции в целостном состоянии, как с точки зрения СУБД, так и с точки зрения логики приложения и после выполнения транзакции тоже должна остаться целостной
Isolation Две транзакции, которые работают одновременно, должны оказывать друг на друга минимально возможное влияние. Идеально, если 2 транзакции, работающие одновременно не оказывают никакого влияния друг на друга.
Durability - Если транзакция завершилась успешно и приложение получило подтверждение ее успешного завершения, то результаты работы транзакции сохраняются в базе, в независимости, что происходит с базой дальше.
Варианты завершения транзакции:
В некоторых СУБД транзакция начинается автоматически, после подачи первой DML операции или другой операции, меняющей данные( все, кроме SELECT), в других СУБД подается явная команда начала транзакции BEGIN TRANSACTION.
Для того, чтобы обеспечивать целостность базы в процессе выполнения транзакций, СУБД ведет так называемый "Журнал транзакций". В журнал последовательно записываются операции, выполняемые в БД.
INSERT 5000 Счет Б
ГЗВФЕУ Счет <
6000->5000
Это производится для того, чтобы можно было откатить транзакции обратно к 6000.
Журнал дисковый файл или совокупность дисковых данных, часто журнал хранят на отдельном устройстве, не на том, на котором БД.
Второе назначение Журнала восстановление Базы после сбоя.
Для этого при старте СУЮД происходит последовательный переход по журналу транзакции.
Для того, чтобы журнал обеспечивал целостную работ транзакции, должен соблюдаться принцип Write_Ahead losing это означает, что данные о некоторой операции должны быть записаны в журнал и страницы с этими записями сохранены на диске. Мы сначала пишем в Журнал, потом в данные.
Уровни изоляции транзакций.
Самый низкий уровень изоляции транзакции READ UNCOMMITED (грязное чтение) , в случае этого уровня никакой изоляции практически нет.
Пусть у нас есть 2 транзакции
W1 ROLLBAC
Т1
R1
Т2
READ COMMITED Если параллельно работыют 2 транзакции, то 2 транзакция увидит данные, обновленные первой, только после того, как 1 транзакция подала коммит
W1 ROLLBAC
Т1
R1 R1
Т2
READ UN COMMITTED неповторяемое чтение состоит в том что в процессе транзакции, Считанные нами данные могут изменить свое состояние в результате чьих-то посторонных действий
R1 R1
Т1
Т2
REPEATABLE READ
FANTOM самый сложный уровень влияния транзакций друг на друга
SERRIALIZABLE предотвращает FANTOM
Для обеспечения изоляции транзакций существуют 2 основных механизма:
Если транзакция обращается к данным, которые заблокированы в данный момент, то она ждет, пока эти данные будут освобождены, либо получает сообщение о блокировки. Основной минус блокировочного механизма кому-то приходится ждать.
Индексы.
Индексы специальные вспомогательные структуры для ускорения поиска данных.
B*-tree
Построение этих индексов основано на том, что любое построение может быть упорядоченным.
Индекс строится по определенным значением, Чаще всего то значение столбца таблицы. Тогда говорят, что на этот столбец построен индекс. Надо иметь ввиду что наряду с ускорением поиска, наличие индексов замедляет выполнение DML операций.
Индексы могут быть простыми и составными.
Формат операции создания удаления индексов
Create index имя_индекса
On имя_таблицы(список_столбцов)
DROP INDEX имя_индекса
В некоторых СБД существуют и другие типы индексов, кроме Б дерева, например Битовые карты.