Сокращение времени обработки за счет применения вертикального и горизонтального параллелизма.
Методы фрагментации выполнения применяется в обеих моделях серверов, с той разницей, что
Informix-ODS для выполнения подзапросов и подзадач создает потоки, выполняемые параллельно
на нескольких процессорах, а в Informix-OXPS выполнение подзапросов и подзадач распределяется
между ко-серверами. Фрагментация выполнения дает многократный выигрыш в
производительности на следующих типах задач:
- обработка характерных для приложений DSS сложных запросов, которые
включают сканирование, сортировку, соединения огромных объемов данных,
распределенных по множеству дисков и/или ко-серверов, группирование,
вычисление агрегатных функций;
- массовые вставки;
- построение индексов;
- резервирование журналов транзакций, сохранение и восстановление
данных;
- загрузка, выгрузка данных, реорганизация баз данных;
Informix - единственная на сегодня СУБД, которая обладает средствами распараллеливания для
столь обширного набора операций.
3.3.1. Вертикальный параллелизм. Итераторы
Элементарные операции, из которых состоит реализация любого запроса, называются
итераторами. Итератор - это программный объект, который воспринимает потоки строк от одного
или двух источников, выполняет над ними некоторый вид обработки и выдает результирующий
поток строк. Источниками данных могут служить дисковые файлы, сетевые соединения,
результирующие потоки других итераторов. Основное свойство итераторов - единообразие их
внешнего интерфейса, благодаря которому они могут произвольным образом объединяться.
Рассмотрим пример выполнения запроса:
SELECT state, SUM(order_item)
FROM customer, order
WHERE order.customer_id = customer.id
GROUP BY state
ORDER BY SUM(order_item)
Дерево его реализации (рис. 2) включает следующие типы итераторов:
SCAN - Сканирует таблицы и индексы.
HASH JOIN - Реализует алгоритм соединения методом хеширования.
GROUP - Группирует данные (GROUP BY) и вычисляет агрегатные функции.
SORT - Сортирует данные.
Дерево итераторов на рис. 2 реализует одновременное выполнение на разных процессорах или ко-
серверах множества циклов обработки данных за счет конвейеризации промежуточных
результатов. Так, результаты сканирования таблиц могут передаваться другому ко-серверу (в
OXPS) или другому потоку (в ODS), который сможет начать соединение по мере поступления
строк исходных таблиц. Результат соединения передается еще одному ко-серверу или потоку,
который начнет выполнять суммирование, и т. д.
3.3.2. Горизонтальный параллелизм. Рефрагментация промежуточных
результатов
Для того чтобы ускорить выполнение запроса, для каждой элементарной операции создается
несколько итераторов, которые распределяются между ко-серверами (OXPS) или выполняются как
отдельные потоки (ODS). Координацией совместной деятельности множества однотипных
итераторов занимается итератор типа EXCHANGE. EXCAHGE рефрагментирует результаты,
полученные от нижележащих итераторов и передает их итераторам верхнего уровня (рис. 3).
3.3.3. Баланс между приложениями OLTP и DSS
Задачи, выполняемые на сервере СУБД, можно разделить на три категории: OLTP, DSS и пакетной
обработки.
Пример OLTP-запроса: Есть ли свободный номер в какой-либо берлинской гостинице на 8-е
декабря?
Пример DSS-запроса: Каковы будут затраты на реализацию стратегии X охраны здоровья
сотрудников по сравнению со стратегией Y с учетом демографического профиля компании?