- •Курс лекцій з дисципліни «розподілені системи баз даних і знань» для студентів 5 курсу спеціальності 8.05010104 “системи штучного інтелекту” денної форми навчання
- •Оглавление
- •1. Лекция: Архитектура и принципы распределенного подхода. Требования и критерии построения информационных систем на базе распределенных баз данных (рбд)
- •2. Лекция: Многомерное представление данных. Общая схема организации хранилища данных. Характеристики, типы и основные отличия технологий olap и oltp. Схемы звезда и снежинка. Агрегирование
- •Olap и oltp. Характеристики и основные отличия
- •Правила Кодда для olap систем
- •Основные элементы и операции olap
- •Типы olap. Преимущества и недостатки
- •Моделирование многомерных кубов на реляционной модели данных
- •Основные понятия сетевой терминологии
- •Проектирование сетей рабочей группы (инженерный подход)
- •Тонкий коаксильный кабель (диаметр до 5 мм)
- •Толстый коаксиальный кабель (диаметр до 10 мм)
- •Кабель с витыми парами
- •Оптоволоконный кабель
- •Средства управления лвс
- •Способы и средства увеличения пропускной способности лвс
- •Защита информации и повышение безопасности работы в лвс
- •4. Лекция: Логическая модель рбд. Бизнес-логика файл-серверной, клиент-серверной и n-уровневой архитектуры Логическая модель рбд
- •Файл-сервер
- •Клиент-сервер с бизнес-логикой на клиенте
- •Клиент-сервер с бизнес-логикой на сервере
- •Базовые технологии. Сравнение на понятийном уровне
- •Понятие о технологии corba
- •Объектная архитектура распределенных систем. Понятие о технологии ejb
- •Объектная архитектура распределенных систем. Понятие о технологии .Net
- •Объектные модели corba и com. Основные различия
- •Идентификация объектов corba и com в сети. Основные различия
- •Языки описания интерфейсов corba и com. Основные свойства
- •Основные встроенные объектные службы corba и com
- •6. Лекция: Распределенные субд. Архитектура ms sql Server 2005 и oracle Server 10g
- •Процессы oracle. Отличия между shared и dedicated экземплярами
- •Табличные пространства. Структура табличных пространств. Типы табличных пространств Словарь данных (словарь данных Oracle)
- •Сегменты отката undo (rollback)
- •Временные (temporary)
- •7. Лекция: Понятие транзакции. Неявные и явные транзакции. Уровни изолированности транзакций в ms sql Server 2005 и oracle 10g. Понятие блокировок. Основные типы блокировок
- •Уровни изолированности транзакций, отличия реализации Oracle от других субд
- •Особенности реализации транзакций в Oracle и ms Sql Server Общие операторы управления транзакциями
- •Понятие блокировок. Основные типы блокировок
- •Взаимоблокировки
- •8. Лекция: Репликация данных. Виды и свойства репликации. Сравнение механизмов репликации в ms sql Server 2005 и oracle Server 10g
- •Протоколы на базе первичной копии, подразумевающие репликацию данных
- •Протокол первичного архивирования с удаленной записью
- •Протокол первичного архивирования с локальной записью
- •Пример решения задач поиска и смены владельца первичной копии
- •Алгоритм поиска первичной копии
- •Алгоритм смены владельца первичной копии
- •Протоколы реплицируемой записи
- •Активная репликация
- •Протоколы кворума
- •Замечания по поводу реализации свободной непротиворечивости
- •Задача получения новой непротиворечивой реплики
- •Алгоритм, иллюстрирующий 1-ый подход
- •Алгоритм получения глобального состояния системы
- •Алгоритм, иллюстрирующий 2-ой подход
- •Сравнение механизмов репликации в ms sql Server 2005 и oracle Server 10g
- •Методы разрешения конфликтов уникальности
- •Методы разрешения конфликтов удаления
- •Методы разрешения конфликтов обновления Приоритет узла (Site priority в Oracle и ms SqlServer)
- •Сложение(Additive в Oracle и ms SqlServer)
- •Усреднение(Average в Oracle и ms SqlServer)
- •Последняя временная метка(Latest Timestamp в Oracle, datetime (Earlier Wins) в ms SqlServer)
- •Первая временная метка(Earliest Timestamp в Oracle, datetime (LaterWins) в ms SqlServer)
- •9. Лекция: Внутренний язык субд. Сравнительные характеристики t-sql и pl/sql Введение
- •Основные характеристики pl/sql и t-sql
- •Именованные блоки
- •Управляющие конструкции
- •Неявное использование переменной цикла
- •Динамическое изменение границ
- •Использование меток
- •Основные объекты. Хранимые процедуры и функции
- •Основные объекты. Триггеры
- •10. Лекция: Хранимые процедуры и функции. Типы параметров, синтаксис описания формальных параметров
- •Параметры
- •Возврат результатов
- •Создание процедур
- •Создание функций
- •Вызов процедур и функций
- •Передача параметров. Атрибут nocopy
- •Модули pl/sql
- •Просмотр объектов и компиляция
- •Перекомпиляция процедур и функций
- •Скрипт для перекомпиляции процедур и функций
- •11. Лекция: Триггеры. Основные понятия. Типы триггеров. Общая схема активизации триггеров
- •Триггеры sql Server Создание триггеров
- •Синтаксис команды создания триггера creat trigger
- •Удаление триггеров
- •Триггеры Oracle Подготовка примера
- •Создание триггера
- •Типы триггеров и порядок их выполнения
- •Использование предикатов inserting, ... И new, old
- •Изменяющиеся таблицы
- •12. Лекция: Оптимизация выполнения запросов Выполнение запросов в Oracle. Общая схема и взаимодействие с клиентским приложением и машиной pl/sql
- •Оптимизатор. Его назначение. Этапы работы оптимизатора
- •Режимы работы оптимизатора по стоимости. Установка режимов. Параметры, влияющие на работу оптимизатора
- •Статистика. Назначение, способы формирования
- •Сбор статистики с помощью analyze
- •Сбор статистики с помощью пакета dbms_stats
- •Статистика по таблицам
- •Статистика по индексам
- •Статистика по столбцам
- •Пути доступа к данным Подготовка данных
- •Полное сканирование таблицы. Преимущества, недостатки
- •Классические индексы
- •Доступ к таблицам по индексам
- •Функциональные индексы
- •Битовые индексы
- •Индекс-организованные таблицы
- •Принципы построения запросов для эффективного использования индексов
- •Материализованные представления
- •Создание объектов
- •Информация по материализованным представлениям
- •Оценка требуемого размера
- •Способы построения
- •Частота обновления
- •Способ обновления
Доступ к таблицам по индексам
analyze table h compute statistics for table for all indexes for all indexed columns;
set autotrace on
set timing on
-- операции по индексу
drop index ind_s on h(s);
select * from h where s = 'aaaa';
create index ind_s on h(s);
select * from h where s = 'aaaa';
select * from h where s||'a' = 'aaaa';
select * from h where upper(s) = 'aaaa';
select * from h where s like 'aaaa%';
select * from h where s like '%aaaa';
drop index ind_nu;
select * from h where nu = 1222;
create index ind_nu on h(nu);
select * from h where nu = 1222;
select * from h where nu+1 = 1222;
select * from h where nu = 1222+1;
select * from h where abs(nu) = 1222;
select * from h where s = '123';
select * from h where s = 123;
-- выбор между доступом по индексам и full scan
delete from h;
insert into h(p, s, n, nu) select object_id, object_name, object_id, object_id from all_objects where rownum < 5;
analyze table h compute statistics for table for all indexes for all indexed columns;
select * from h where s = 'DUAL';
delete from h;
insert into h(p, s, n, nu) select object_id, object_name, object_id, object_id from all_objects;
-- со старой статистикой !!!
select * from h where s = 'DUAL';
analyze table h compute statistics for table for all indexes for all indexed columns;
-- с новой статистикой !!!
select * from h where s = 'DUAL';
-- обработка null значений
-- поля null не проверяются на уникальность
insert into h(p, s, n, nu) values(-1, 'asd', null, null);
insert into h(p, s, n, nu) values(-2, 'asd', null, null);
insert into h(p, s, n, nu) values(-3, 'asd', null, -1);
select * from h where s is null;
Листинг 12.3. (html, txt)
Функциональные индексы
Индексы по функции. Эти индексы на основе В*-дерева или битовых карт хранят вычисленный результат применения функции к столбцу или столбцам строки, а не сами данные строки. Это можно использовать для ускорения выполнения запросов вида:
SELECT * FROM T WHERE ФУНКЦИЯ(СТОЛБЕЦ) = НЕКОТОРОЕ_ЗНАЧЕНИЕ,
поскольку значение ФУНКЦИЯ(СТОЛБЕЦ) уже вычислено и хранится в индексе.
-- функциональные индексы
select * from h where n*n = 100;
-- надо иметь такие права для создания функциональных индексов
alter system set query_rewrite_enabled=true;
grant query rewrite to stud;
create index ind_f_n on h(n*n);
select * from h where n*n = 100;
create index ind_n on h(n);
select index_name, index_type, table_name,
status, funcidx_status from user_indexes where table_name =
'H';
select * from h where n = 100;
select * from h where n > 0;
Битовые индексы
Обычно в В*-дереве имеется однозначное соответствие между записью индекса и строкой - запись индекса указывает на строку. В индексе на основе битовых карт запись использует битовую карту для ссылки на большое количество строк одновременно. Такие индексы подходят для данных с небольшим количеством различных значений, которые обычно только читаются. Столбец, имеющий всего три значения — Y, N и NULL, — в таблице с миллионом строк очень хорошо подходит для создания индекса на основе битовых карт. Предположим, создается индекс на основе битовых карт по столбцу JOB в таблице ЕМР:
create BITMAP index job_idx on emp(job);
Сервер Oracle будет хранить в индексе примерно следующее:
увеличить изображение
Это показывает, что в строках 8, 10 и 13 находится значение ANALYST, тогда как в строках 4, 6 и 7 — значение MANAGER. Также понятно, что пустых строк нет (индексы на основе битовых карт содержат записи для пустых значений — отсутствие такой записи в индексе означает, что пустых строк нет). Если необходимо посчитать, в скольких строках хранится значение MANAGER, индекс на основе битовых карт позволит сделать это очень быстро. Если необходимо найти все строки, в которых в столбце JOB хранится значение CLERK или MANAGER, достаточно просто скомбинировать соответствующие битовые карты из индекса.
-- bitmap индексы
drop table bt;
create table bt(n number, s varchar2(100), b number, i number);
select min(object_id), max(object_id), 0.5*(max(object_id)+min(object_id)) from all_objects;
delete from bt;
insert into bt(n, s, b, i)
select object_id, object_name, case when object_id > 36116 then 1 else 2 end, case when object_id > 36116 then 1 else 2 end from all_objects;
create index ibt_i on bt(i);
create bitmap index ibt_b on bt(b);
select index_name, index_type, table_name, status, funcidx_status from user_indexes where table_name = 'BT';
analyze table bt compute statistics for table for all indexes for all indexed columns;
select i from bt where i = 1;
select b from bt where b = 1;
drop index ibt_i;
create bitmap index ibt_i on bt(i);
select * from bt where i = 0 or b = 0;
select * from bt where i = 1 or b = 0;
drop index ibt_i;
create index ibt_i on bt(i);
select /*+ index(bt ibt_b) */ * from bt where b = 1;
select /*+ index(bt ibt_i) */ * from bt where i = 1;
select count(*) from bt where b = 1;
select count(*) from bt where i = 1;
update bt set b = null where rownum < 100;
update bt set i = null where rownum < 100;
select * from bt where i is null;
select * from bt where b is null;
Листинг 12.4. (html, txt)