Record locking
-
Основы блокировки данных
- Блокировка данных предотвращает одновременный доступ к данным для предотвращения несогласованных результатов.
- Классический пример: два банковских клерка пытаются обновить одну и ту же банковскую учетную запись для двух разных транзакций.
- Клерк 1 копирует запись и применяет транзакцию, в то время как клерк 2 изменяет копию и сохраняет результат, перезаписывая транзакцию клерка 1.
- Чтобы предотвратить перезапись данных, можно заблокировать файл при изменении записи любым пользователем.
-
Реализация и управление блокировками
- Блокировка позволяет нескольким пользователям редактировать таблицу базы данных одновременно, предотвращая конфликты.
- При попытке получить одну и ту же запись для редактирования, доступ к записи блокируется.
- После сохранения или отмены редактирования блокировка снимается.
- Блокировка предотвращает сохранение данных таким образом, чтобы они не перезаписывали другие изменения, сохраняя целостность данных.
-
Гранулярность блокировки
- Если учетные записи клиентов находятся в одной бухгалтерской книге, то для редактирования каждой учетной записи требуется доступ ко всей книге.
- Если учетные записи клиентов распределены по разным страницам, то несколько клиентов могут обслуживаться одновременно.
- Если учетные записи находятся на одной странице, то только один клиент может быть обслужен одновременно.
- Более высокая степень гранулярности достигается, если каждый клиент может получить доступ к отдельной учетной записи.
-
Проблемы с блокировкой
- Использование блокировки может привести к тупиковой ситуации, если используется инкрементная блокировка.
- Для предотвращения тупиковых ситуаций используются различные методы.
-
Использование блокировки
- Необходимо управлять блокировками между запросами на записи, чтобы не предоставлять слишком много услуг одному пользователю и не блокировать других пользователей.
- Блокировки могут быть запрошены как отдельными приложениями, так и всем процессором.
- Важно, чтобы блокировка удерживалась как можно короче и чтобы чтение заблокированных записей было разрешено.
-
Типы блокировок
- Эксклюзивные блокировки удерживаются одним пользователем для записи.
- Неэксклюзивные блокировки могут быть получены несколькими пользователями для чтения содержимого записи.
- Эксклюзивные блокировки не могут быть получены, если запись уже заблокирована другим пользователем.
- Если запросы на блокировку для одного и того же пользователя находятся в очереди, то после предоставления общей блокировки все ожидающие общие блокировки также могут быть предоставлены.
-
Улучшение производительности
- Если ожидающий блокировки объект переходит в спящий режим, производительность улучшается, если объект уведомляется о предоставлении блокировки, а не просыпается по системному таймауту.