Создание клиентских частей SQL БД под ОС Windows'95 и WindowsNT

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



?ользователями (до завершения транзакции). В Oracle необходимость обеспечения блокировок учитывается уже в организации хранения данных, а сам этот механизм является неотъемлемой частью ядра сервера, "переплетаясь" со всеми его внутренними алгоритмами.

И все-таки, проблема блокировки (моды изоляции чтения) продолжает существовать (пока один пользователь читает данные, другой пользователь может эти данные изменять). Стандарт ANSI SQL-92 описывает требования к реализации нескольких мод изоляции операций чтения от выполняющихся одновременно с ним транзакций. Они варьируются от самой "слабой" моды - "незафиксированного" (часто называемого "грязного") чтения, при котором допускается считывание данных незафиксированных транзакций, до самой "сильной" - "повторяемого" чтения, при котором гарантируется повторяемость результата при повторении операции в рамках транзакции. Беда в том, что само наличие всех этих различных мод изоляции в стандарте SQL отражает отнюдь не потребности пользователей, а различные степени компромисса с возможностями разработчиков СУБД. Пользователей же волнует совсем другое: как избежать тех неприятных эффектов, которые могут быть связаны с использованием всех стандарных мод изоляции, кроме самой "сильной" из них.

Сущность моды изоляции "согласованное чтение", реализуемой сервером Oracle состоит в том, что любая операция чтения в Oracle выдает пользователю данные только тех транзакций, которые были завершены к моменту начала операции. Oracle реализует "согласованное чтение" без использования блокировок вообще. Операция чтения в Oracle никогда не блокируется и никогда не блокирует других. Данный режим работы является среди коммерческих СУБД уникальным. Мода "согласованного чтения" не совпадает ни с одной из мод изоляции, принятых в стандарте SQL-92. Она "сильнее" (и следовательно покрывает) все моды, кроме "повторяемого чтения", но она "слабее" последней. Действительно, при повторе операции в моде "согласованного чтения" можно получить совсем другой результат, ибо изменится момент времени, по которому синхронизуется "срез" данных. Oracle, правда, предоставляет возможность объединять несколько операций чтения в read-only транзакцию, синхронизуя их при этом к одному моменту времени. В версии 7.3 Oracle позволяет в явном виде установить моду изоляции "repeatable read", причем опять без использования блокировок.

Функциональные новшества. В Oracle 7.3 появилась возможность читать и писать поля таблиц типа Long по частям (на уровне Oracle Call Interface), что безусловно полезно, ибо размер таких полей может доходить до 2 Гбайт. Расширился набор типов представлений (views), для которых допускается их непосредственная модификация. Появился ряд новшеств в языке PL/SQL (процедурном расширении SQL), самое заметное из которых - поддержка таблиц, хранимых в памяти сервера. Новые алгоритмы обработки запросов. Выполнение SQL-запроса - особенно имеющего сложную структуру - обычно распадается на несколько взаимосвязанных операций. Само это разбиение, а тем более выбор методов выполнения операций, как правило, допускают множество альтернативных решений. Выбор оптимальной их комбинации - задача оптимизатора, который на основании как характера запроса, так и имеющейся информации о задействованных таблицах и индексах, наличии тех или иных системных ресурсов (в Oracle 7.3 расширен набор видов предоставляемой оптимизатору информации: теперь он может учитывать частотные гистограммы индексируемых полей) строит оценку стоимости разных вариантов решения.

Помимо "джентльменского" набора более или менее универсальных методов существует также целый ряд более узкоспециализированных, т. е. таких, которые очень хорошо работают в некоторых ситуациях, но могут быть совсем неэффективными (или даже неприменимыми) в других. Несмотря на такой недостаток, применение этих методов может дать очень заметный эффект, особенно при выполнении сложных запросов над большими объемами данных, что характерно для систем поддержки принятия решений (DSS) (хранилищ данных). В Oracle 7.3 введен целый ряд таких специализированных алгоритмов.

"Звездообразные запросы" (star queries). В DSS-системах довольно часто применяются запросы, выполняющие соединение одной большой таблицы (таблицы фактов) с несколькими маленькими (справочными таблицами). При выполнении подобных запросов оказывается эффективным достаточно экзотический алгоритм, выполняющий сначала вычисление декартова произведения справочных таблиц, а затем слияние сортировкой полученного результата с таблицей фактов.

"Слияние хэшированием". Альтернативный слиянию сортировкой метод выполнения соединений таблиц (еще одна альтернатива - вложенные циклы).

Применение битовых строк для индексирования. До версии 7.3 Oracle применял для индексирования только B-деревья и хэш-функции (если таблица помещалась в хэш-кластер). В версии 7.3 появилась возможность использования индексов с битовыми строками (bit-map indexes). Их идея очень проста. Если некоторое поле таблицы может принимать ограниченное число значений, то каждому такому значению можно сопоставить битовую строку (количество бит равно количеству записей в таблице), в которой единицы находятся в позициях, соответствующих тем записям, которые имеют данное значение в индексируемом поле. Ясно, что такой индекс позволяет очень быстро находить нужные записи по значениям проиндексированного поля (и любым их логическим комбинациям), а также выполня