Синхронизация запросов к БД с использованием блокировок. Элементы БД. Необходимость блокировки элементов БД. Элемент как примитив синхронизации. Легальное расписание

Основные элементы:

Поле – элементарная единица логической организации данных, которая соответствует неделимой единице информации – реквизиту.

Для описания поля используются следующие характеристики:

- имя, например, Фамилия, Имя, Отчество, Дата рождения;

- тип, например, символьный, числовой календарный;

- длина, например, 15 байт, причем будет определяться максимально возможным количеством символов;

- точность для числовых данных, например два десятичных знака для отображения дробной части числа.

Запись – совокупность логически связанных полей. Экземпляр записи – отдельная реализация записи, содержащая конкретные значения ее полей.

Файл (таблица) – совокупность экземпляров записей одной структуры.

Основные рабочие характеристики баз данных:

- полнота – чем полнее база данных, тем вероятнее, что она содержит нужную информацию (однако не должно быть избыточной информации);

- правильная организация – чем лучше структурирована база данных, тем легче в ней найти необходимые сведения;

- актуальность – любая база данных может быть точной и полной, если она постоянно обновляется, т.е. необходимо, чтобы база данных в каждый момент времени полностью соответствовала состоянию отображаемого ею объекта;

- удобство для использования – база данных должна быть проста и удобна в использовании, и иметь развитые методы доступа к любой части информации.


Блокировка.

Принудительное упорядочение транзакций обеспечивается с помощью механизма блокировок. Суть этого механизма в следующем: если для выполнения некоторой транзакции необходимо, чтобы некоторый объект базы данных (кортеж, набор кортежей, отношение, набор отношений,..) не изменялся непредсказуемо и без ведома этой транзакции, такой объект блокируется. Основными видами блокировок являются:

1) блокировка со взаимным доступом, называемая также S-блокировкой (от Shared locks) и блокировкой по чтению.

2) монопольная блокировка (без взаимного доступа), называемая также X-блокировкой от (eXclusive locks) или блокировкой по записи. Этот режим используется при операциях изменения, добавления и удаления объектов.

При этом:

1) если транзакция налагает на объект X-блокировку, то любой запрос другой транзакции с блокировкой этого объекта будет отвергнут.

2) если транзакция налагает на объект S-блокировку, то

3) запрос со стороны другой транзакции с X-блокировокй на этот объект будет отвергнут

4) запрос со стороны другой транзакции с S-блокировокй этого объекта будет принят

Транзакция, запросившая доступ к объекту, уже захваченному другой транзакцией в несовместимом режиме, останавливается до тех пор, пока захват этого объекта не будет снят.

Доказано, что сериализуемость транзакций (или, иначе, их изоляция) обеспечивается при использовании двухфазного протокола блокировок (2LP - Two-Phase Locks), согласно которому все блокировки, произведенные транзакцией, снимаются только при ее завершении. Т.е выполение транзакции разбивается на две фазы: (1) - накопление блокировок, (2) - освобождение блокировок в результате фиксации или отката.

К сожалению, применение механизма блокировки приводит к замедлению обработки транзакций, поскольку система вынуждена ожидать пока освободятся данные, захваченные конкурирующей транзакцией. Решить эту проблему можно за счет уменьшения фрагментов данных, захватываемых транзакцией. В зависимости от захватываемых объектов различают несколько уровней блокировки:

1) блокируется вся база данных - очевидно, этот вариант неприемлим, поскольку сводит многопользовательский режим работы к однопользовательскому

2) блокируются отдельные таблицы

3) блокируются страницы (страница - фрагмент таблицы размером обычно 2-4 Кб, единица выделения памяти для обработки данных системой)

4) блокируются записи

5) блокируются отдельные поля

6) Современные СУБД, как правило, могут осуществлять блокировку на уровне записей или страниц.

Элемент, как примитив синхронизации
// Адекватного ответа не нашел

Неблокирующая синхронизация — подход в параллельном программировании на симметрично-многопроцессорных системах, проповедующий отказ от традиционных примитивов блокировки, таких, как семафоры, мьютексы и события. Разделение доступа между потоками идёт за счёт атомарных операций и специальных, разработанных под конкретную задачу, механизмов блокировки.

Преимущество неблокирующих алгоритмов — в лучшей масштабируемости по количеству процессоров. К тому же, если ОС прервёт один из потоков фоновой задачей, остальные, как минимум, выполнят свою работу, не простаивая. Как максимум — возьмут невыполненную работу на себя.

Легальное расписание:

Расписание правильно оформленных логических элементов работы, в котором повторная блокировка ранее блокированного объекта происходит после его разблокирования, называется легальным расписанием.

Совокупность логических элементов работы, для которой все легальные расписания являются сериализуемыми, называется надежной.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: