Двухфазная блокировка: различия между версиями

[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Добавлена переведенная информация
 
обновление
Строка 8:
 
В базовом протоколе используются два типа замков: Shared и Exclusive locks. Уточнения базового протокола могут использовать больше типов блокировок. Используя блокировки, блокирующие процессы, 2PL могут подвергаться [[Взаимная блокировка|взаимоблокировкам]], которые являются результатом взаимной блокировки двух или более транзакций.
 
Блокировка - системный объект, связанный с общим ресурсом, например элемент данных элементарного типа, строка в базе данных или страница памяти. В базе данных перед доступом к объекту может потребоваться блокировка объекта базы данных (блокировка доступа к данным) путем транзакции. Правильное использование блокировок предотвращает нежелательные, неправильные или непоследовательные операции с общими ресурсами другими параллельными транзакциями. Когда к объекту базы данных с существующей блокировкой, полученной одной транзакцией, необходимо получить доступ другой транзакцией, существующая блокировка объекта и тип предполагаемого доступа проверяются системой. Если существующий тип блокировки не разрешает этот конкретный тип одновременного доступа, транзакция, пытающаяся получить доступ, блокируется (в соответствии с предопределенным соглашением / схемой). На практике блокировка объекта не блокирует транзакцию непосредственно над объектом, а блокирует транзакцию от приобретения другой блокировки на одном и том же объекте, которая должна быть сохранена / принадлежит транзакции перед выполнением этой операции. Таким образом, с блокирующим механизмом необходимая блокировка операций контролируется надлежащей схемой блокировки блокировки, которая указывает, какие блоки блокировки блокируют тип блокировки.
 
Используются два основных типа замков:
 
* '''Запись-блокировка (эксклюзивная блокировка)''' связана с объектом базы данных транзакцией (терминология: «транзакция блокирует объект» или «получает блокировку для нее») перед записью (вставка / изменение / удаление) этого объекта.
 
* '''Считывание-блокировка (разделяемая блокировка)''' связана с объектом базы данных транзакцией перед чтением (извлечением состояния) этого объекта.
 
Общие взаимодействия между этими типами блокировки определяются путем блокирования поведения следующим образом:
 
* Существующая блокировка записи в объекте базы данных блокирует предполагаемую запись на том же объекте (уже запрошенном / выпущенном) другой транзакцией, блокируя блокировку записи от другой транзакции. Вторая блокировка записи будет получена, и запрошенная запись объекта будет выполнена (материализоваться) после освобождения существующей блокировки записи.
 
* Блокировка записи блокирует предполагаемую (уже запрошенную / выпущенную), прочитанную другой транзакцией, блокируя соответствующую блокировку чтения.
 
* Блокировка чтения блокирует запланированную запись другой транзакцией, блокируя соответствующую блокировку записи.
 
* Блокировка чтения не блокирует предполагаемое чтение другой транзакцией. Соответствующая блокировка чтения для предполагаемого считывания приобретается (совместно с предыдущим чтением) сразу после запроса на чтение, а затем происходит само предназначение считывания.
 
Существует несколько вариантов и усовершенствований этих основных типов блокировок с соответствующими вариациями поведения блокировки. Если первый замок блокирует другой замок, два замка называются ''несовместимыми''; в противном случае замки ''совместимы''. Часто блокирующие взаимодействия блокировки представлены в технической литературе по таблице совместимости Lock. Ниже приведен пример с основными основными типами блокировок:
 
{| class="wikitable"
|+Таблица совместимости замков
!'''Тип блокировки'''
!'''блокировка чтения'''
!'''блокировка записи'''
|-
|'''блокировка чтения'''
|
| '''Х'''
|-
|'''блокировка записи'''
| '''Х'''
| '''Х'''
|}
 
== Примечания ==
Строка 15 ⟶ 50 :
== Ссылки ==
 
* [[Граф предшествования]]
* [http://www.example.com/ example.com]
* [[Блокировка (программирование)]]