Блокировкой называется временное ограничение, которое накладывается системой на использование тех или иных ресурсов. Блок-ки необходимы для обеспечения изолированности транзакций.
Простейшим способом обеспечения изолированности транзакций является запрещение любого обращения к данным, которые используются в транзакции. Часто бывает достаточно запретить изменение данных, можно оставить возможность чтения данных. Но если транзакция вносит изменения в данные, они должны блокироваться полностью с тем, чтобы другие транзакции не использовали промежуточные данные.
В SS имеется несколько различных типов блокировок. Блокировки могут накладываться на отдельную строку таблицы, в целом на таблицу. Управлением блокировками занимается менеджер блокировок (МБ). В СУБД, которые не имеют механизмов изоляции транзакций, могут возникнуть следующие проблемы:
1) проблема последнего обновления/изменения (The last update problem).
При одновременной попытке транзакций изменять одни и те же данные часть их будет утеряна.
Изменения, которые были внесены ранее выполненными транзакциями, будут утеряны. Внесутся изменения, выполненные последними транзакциями. При этом транзакции не будут знать, что их изменения потеряны.
2) проблема грязного чтения (The uncommitted depending problem).
Эта проблема возникает, когда транзакция пытается считать данные, которые находятся на стадии обработки другими транзакциями. При этом данные могут нарушать ограничения целостности и правила.
3) проблема неповторяемого чтения (The inconsistent analysis problem).
Возникает, если транзакция многократно читает одни и те же данные. Между операциями чтения другая транзакция может изменить данные, и в результате первая транзакция будет оперировать изменёнными данными.
|
4) проблема чтения фантомов (The phantom read problem).
Возникает, если во время выполнения транзакции в таблицу добавляются новые строки, которые могут быть обработаны транзакциями.
Имеется стандарт, который определяет уровни блокировки:
Level 0 – запрещение загрязнения данных (реш-ся пробл. посл. загрязнения): одни и те же данные в каждый момент времени может изменять только одна транзакция.
Level 1 – запрещение грязного чтения. Если транзакция начинает изменение данных, СУБД должна блокировать ресурсы с тем, чтобы ни 1 из транзакций не могла прочитать данные до тех пор, пока транзакция, которая вносит изменения, не будет зафиксирована или изменена.
Level 2 – запрещение неповторяемого чтения. Если транзакция обращается к каким-либо данным, СУБД организует блокировку таким образом, чтобы ни 1 из транзакций не могла изменить эти данные. Если транзакция только читает данные, то достаточно запретить лишь изменение данных, если изменение – то необходимо полностью блокировать ресурсы.
Level 3 – запрещение фантомов. Если транзакция производит выборку по логическому условию, никакая другая транзакция не должна добавлять или удалять строки, которые удовлетворяют этому логическому условию. В SS поддерживаются все эти уровни блокировок.
Приложение по работе с базой данных: основные требования, структура.
1. Сбор информации. Вам необходимо знать все, что хотят пользователи, заказчик или Ваше руководство от этой системы. В цивилизованном обществе принято давать разработчику ТЗ, а также разделять программистов-аналитиков, проектирующих систему, от просто-программистов, пишущих код, и тем более различать администраторов и разработчиков Баз Данных.
|
2. Выбор платформы. Включает в себя как выбор железа, в соответствии с планируемой нагрузкой на БД с учетом масштабируемости, так и выбор СУБД. Существует множество критериев, и для каждого они свои. Для кого-то важна цена/бесплатность продукта, для кого-то производительность.
3. Грамотное проектирование структуры БД, с максимальным вынесением логики работы на уровень сервера БД.
4. Собственно проектирование и разработка интерфейса к БД. Ни один пользователь никогда не полезет в дебри утилит администрирования БД, а тем более не будет использовать SQL для получения или изменения каких-либо данных.
При проектировании интерфейса также можно выделить несколько этапов:
· Примерно представить как все это должно выглядеть и какую функциональность выдавать пользователям. Исходя из этого, определиться с минимально необходимым набором компонентов для реализации.
· Найти данные компоненты.
· Создать программу