Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в СУБД HyTech.doc
Скачиваний:
11
Добавлен:
01.03.2025
Размер:
2.67 Mб
Скачать

Монитор замков

Другой не менее важной задачей СУБД является разграничение доступа пользователей к таблицам и их записям. Это особенно важно при одновременной работе нескольких пользователей с одними и теми же таблицами. Для этих целей в СУБД HyTech применяется механизм замков (захватов). Замки позволяют пользователю таблицы уведомить других пользователей о том, что он распоряжается конкретной записью (группой записей или таблицей целиком) в данный момент времени. Наличие замков не мешает выполнению операций поиска в таблице и доступа к найденным записям и проверяется при выполнении операций модификации.

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

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

Реализация системы захватов

Для реализации системы захватов используются специальные файлы замков. Для каждой совместно используемой таблицы создается общий файл замков, содержащий битовую строку. Каждый бит этой строки соответствует записи таблицы. Номер бита равен номеру записи. Файл замка удлиняется по мере увеличения числа записей в таблице. Захваченные записи метятся в этом файле установленными битами. Для того, чтобы отличить «свои» захваты от прочих, для каждого пользователя таблицы, работающего с замками, создается еще один файл замка – локальный замок. Структура этого файла полностью совпадает с файлом общего замка.

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

Для обслуживания замков предлагается следующий набор функций: захватить таблицу, захватить запись, заданную номером, захватить группу записей, найти группу записей по некоторому условию и захватить их (операция атомарна), захватить запись и считать ее актуальное состояние (операция атомарна), освободить таблицу, освободить захваченную запись, освободить группу записей.

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

Оптимизация запросов

В СУБД HyTech особое внимание уделяется уменьшению времени, необходимого для извлечения информации из базы данных. На любом этапе выполнения запроса количество отобранных записей известно, а, значит, решение о выборе между использованием индексов и непосредственным чтением данных сервер принимает автоматически. Порядок выполнения отработки поисковых условий и слияния таблиц по умолчанию соответствует тому, как они перечислены в SQL-предложении. Автоматическое изменение порядка обычно используется при обработке запросов, сформировананных без учёта особенностей СУБД, например, из ODBC. Для слияния таблиц имеется возможность явно указать, следует ли производить слияние по ключу попарно с последующим объединением или следует вычитывать записи