- •1. Методы распределенной обработки данных
- •1.1. Цели распределенной обработки данных
- •1.3. Архитектура удаленного доступа
- •1.5. Многоуровневые модели. Модель сервера приложений
- •1.6. Физическая модель срод
- •Основные понятия сетевой терминологии
- •2. Распределенные базы данных
- •2.2. Режимы работы с бд
- •2.3. Классификация систем по способам обработки данных
- •2.6. Свойства распределенных баз данных
- •2.7. Функции и архитектура сурбд
- •2.8. Распределенная база данных на примере вуЗа
- •3. Параллельные процессы (или процесс транзакций)
- •3.1. Транзакции
- •Свойства транзакций
- •3.2. Параллелизм операций над бд
- •3.3. Проблемы параллельных процессов
- •3.4. Элементы блокировки.
- •3.5. Расписание транзакций Последовательное исполнение транзакции при использовании блокировок элементов замедляет процесс работы с бд, хотя и работает правильно. Т1: lock a; unlock a;
- •3.6. Модели с блокировками для чтения и записи
- •3.7. Блокировки в Visual FoxPro
- •4. Структурированный язык запросов sql
- •5. Безопасность бд
- •5.3. Целостность данных
- •5.4. Шифрование данных
- •6. Хранилище данных
- •6.1. Концепции хранилища данных
- •6.2. Многомерная модель данных
- •6.4. Интеллектуальный анализ данных
- •7. Базы данных в Интернете
- •7.1. Язык html
- •Гипертекстовые ссылки
- •7.3. Средства взаимодействия.
- •8.1. Архитектура сервера
- •8.2. Табличные пространства и файлы данных
3.6. Модели с блокировками для чтения и записи
Проводя различия между доступами только чтения и для чтения и записи, можно разработать более детальную модель транзакций, которая будет допускать некоторые виды параллелизма. Различают два вида блокировок:
1. Блокировки для чтения. RLOCK A (READ-LOCK A), что препятствует записи нового значения А любой другой транзакций во время чтения А транзакций Т. Однако блокировку А для чтения может одновременно установить любое число транзакций. 2. Блокировки для записи. WLOCK A (WRITE-LOCK). При блокировках для записи никакая другая транзакция не может установить для этого элемента блокировку для чтения, ни блокировку для записи. И блокировки для чтения, и блокировки для записи снимаются операторами UNLOCK (разблокировать). Два расписания эквивалентны, если - они продуцируют одно и то же значения для каждого элемента; - каждая блокировка для чтения, применяемая данной транзакцией, встречается в обоих расписаниях, когда блокируемый документ имеет одно и то же значение. В системе поддерживается два типа блокировок:
1. Х – блокировка (XLOCK – exclusive lock) – блокировка без взаимного доступа. WLOCK обозначает то же самое.
2. S – блокировка (SLOCK- shared lock) – блокировка с взаимным доступом. RLOCK обозначает то же самое.
X – блокировка записи S – блокировка чтения
1. Если транзакция Т блокирует кортеж А (Х-блокировка), то запрос любой другой транзакции к А будет отменён.
2. Если транзакция Т, блокирующая элемент А (S – блокировка), то · запрос со стороны транзакции Т2 на Х-блокировку будет отвергнут · запрос со строки Т2 на S-блокировку будет принят Эти правила можно представить в виде матрицы совместимости (рис.3.15). Запрос транзакций Т1 и Т2 к одному элементу А. N-означает конфликтную ситуацию. Т2 – находится в состоянии ожидания. Y – полная совместимость, «–» - отсутствие блокировок.
Рис.3.15. Матрица совместимости транзакций
Проверка сериализуемости: Алгоритм 2. Проверка сериализуемости расписаний с блокировками для чтения/записи. Входные данные. Расписание S для совокупности транзакций T1,…,Tk. Выходные данные. Получение ответа, является ли S сериализуемым. Метод. Строим граф предшествований G следующим образом. Узлы, как и прежде, соответствуют транзакциям. Дуги определяются следующими правилами: 1. Пусть в S транзакция Ti устанавливает блокировку элемента А для чтения, а Tj – следующая за ней транзакция (если она существует) – устанавливает блокировку А для записи. Тогда строим дугу из Ti в Tj. 2. Пусть транзакция Ti в S блокирует А для записи, а Tj – следующая за ней (если, конечно, такая существует) транзакция – устанавливает блокировку А для записи. Тогда строим дугу Ti -> Tj. 3. Пусть далее Tm – какая-либо транзакция, блокирующая А для чтения после того, как Ti снимает свою блокировку для записи, но перед тем, как Tj устанавливает блокировку А для записи (если Tj не существует, то Tm – любая транзакция, которая блокирует А для чтения после того, как Ti разблокирует его. Тогда строим дугу Ti -> Tm. Если граф G имеет циклы, то S не сериализуемо. Если же G ацикличен, то любая его топологическая сортировка определит последовательный порядок для транзакций. Процесс топологической сортировки определяется следующим образом. Из ацикличности G следует, что в нём существует узел Ti, который не имеет входящих дуг. Занесём Ti в список, удалив его из графа. Процесс повторяется до тех пор, пока в графе не останется узлов. Порядок перечисления узлов в списке даёт последовательный порядок транзакций.
Пример 3.7: Показано расписание 4-х транзакций.
Рис.3.16. Расписание транзакций
Первый оператор UNLOCK A выполняется на шаге 3, когда T3 снимает свою блокировку элемента А для записи. За шагом 3 следует блокировка А для чтения транзакциями Т1 и Т2 (шаги 4 и 7) и блокировка этого элемента для записи транзакцией Т4 на шаге (12). Таким образом Т1, Т2 и Т4 должны следовать за Т3 и мы строим дуги из Т3 в эти узлы.
Рис.3.17. Граф проверки сериализуемости
В связи с тем, что Т4 снимает блокировку В для записи на шаге 5, а следующую блокировку В для записи устанавливает Т3 строится дуга из Т4 и Т3. Образуется цикл, свидетельствующий о том, что расписание не является сериализуемым. Как и в модели, приводимой ранее, достаточной гарантией сериализуемости является двухфазный протокол, в соответствии с которым установление блокировок для чтения и записи предшествует всем операциям разблокирования.
Упражнение для самостоятельного выполнения:
Дано расписание 4-х транзакций (рис.3.18). Постройте граф предшествований и определите, является ли это расписание сериализуемым.
N |
T1 |
T2 |
T3 |
T4 |
1 |
|
RLOCK A |
|
|
2 |
|
|
RLOCK A |
|
3 |
|
WLOCK B |
|
|
4 |
|
UNLOCK A |
|
|
5 |
|
|
WLOCK A |
|
6 |
|
UNLOCK B |
|
|
7 |
RLOCK B |
|
|
|
8 |
|
|
UNLOCK A |
|
9 |
|
|
|
RLOCK B |
10 |
RLOCK A |
|
|
|
11 |
|
|
|
UNLOCK B |
12 |
WLOCK C |
|
|
|
13 |
UNLOCK A |
|
|
|
14 |
|
|
|
WLOCK A |
15 |
|
|
|
UNLOCK A |
16 |
UNLOCK B |
|
|
|
17 |
UNLOCK C |
|
|
|
Рис.3.18. Расписание транзакций