русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Метод сортировки-слияния (SMJ – Sort Merge Join)


Дата добавления: 2015-07-09; просмотров: 966; Нарушение авторских прав


 

Соединение таблиц включает следующие шаги:

1. Соединяемые таблицы сортируются по атрибуту соединения (обозначим его через "а").

2. Организуется вложенный цикл, где выполняется сравнение значений атрибутов соединения.

Условием соединения может быть только равенство атрибутов соединения.

Пример выполнения соединения методом сортировки-слияния приведен на рис. 1.15.

 

Рис. 1.15. Метод соединения SMJ.

 

Выполняется сравнение записей, на которые указывают указатели таблиц Q1 и Q2 . Перемещение указателей выполняется следующим образом: если выполняется условие "<", то осуществляется перемещение указателя Q1 к следующей записи; если выполняется условие ">", то к следующей записи перемещается указатель Q2 ; при "=" указатели не перемещается и выполняется сравнение со следующей записью таблицы Q2.

Будем полагать, что используются левосторонние деревья и каналы. Схема назначения буферов приведена на рис. 1.16.

Рис. 1.16. Схема назначения буферов.

 

Формулы для оценки стоимости соединения SMJ имеют следующий вид.

 

 

Здесь

T(Q1), T(Q2) – число кортежей в таблицах Q1 и Q2;

B(Q1), B(Q2) – число блоков в таблицах Q1 и Q2;

I(Q1,a), I(Q2,a) – мощности атрибутов соединения "а" в таблицах Q1 и Q2;

b – число блоков в ОП, отводимых под сортировку таблицы Q1 или Q2;

Ccomp – время соединения двух кортежей из таблиц Q1 и Q2 в ОП;

Cmove – время перемещения одного кортежа в ОП при сортировке;

CB – время чтения/записи одного блока на диск;

- округление с избытком;

- округление с недостатком;

- не учитывается, если таблицы были уже отсортированы перед началом соединения.

Некоторые формулы требуют пояснений. Рассмотрим сначала, как выполняется сортировка записей достаточно большой таблицы.



Блоки 1¸b таблицы R читаются в буфер (рис. 1.17) и записи этих блоков сортируются. Результат сортировки сохраняется в виде файла. Затем читаются следующие "b" блоков (b¸2b, см. рис. 1.17) и их записи также сортируются, результат сортировки сохраняется во втором файле и т.д.

 

 

Рис. 1.17. Чтение большой таблицы в буфер из b блоков.

 

Сохранённые файлы представлены в виде уровня 1 на рис. 1.18.

Известно, что число операций сравнений и перемещений при сортировке пропорционально величине , где - число сортируемых записей. - это количество файлов уровня 1. Поэтому для одного файла . С учётом числа файлов получаем первое слагаемое в формуле 3 (см. выражения (5.9)).

 

Рис. 1.18. Последовательное укрупнение отсортированных промежуточных файлов.

 

Далее из 1-го файла уровня 1 записи читаются в 1-й блок буфера, из 2-го файла уровня 1 записи читаются во 2-й блок и т.д., и из b-го файла уровня 1 записи читаются в b-й блок (рис. 1.19). В каждом блоке записи уже отсортированы на предыдущем этапе. Поэтому сравниваются первые записи этих блоков по атрибуту сортировки (b сравнений). Запись с минимальным значением атрибута перемещается в файл (одно перемещение). Остальные записи соответствующего блока сдвигаются вверх (блок работает как стек). Затем снова сравниваются первые записи b блоков по атрибуту сортировки и т.д. Если записи в каком-либо блоке исчерпаны, то в этот блок подгружаются записи из связанного с ним файла. После обработки таким способом b файлов уровня 1 будет сформирован файл уровня 2 (см. рис. 1.18), записи в котором отсортированы. Далее в блоки буфера подгружаются записи следующих b файлов уровня 1 и т.д.

По аналогичной схеме (см. рис. 1.19) объединяются файлы уровня 2 и т.д. В конце концов, будет сформирован один отсортированный результирующий файл (см. рис. 1.18). Количество уровней L может быть получено из уравнения (число файлов на самом нижнем уровне равно 1), т.е. .

 

Рис. 1.19. Сортировка записей из b промежуточных файлов.

 

На каждом уровне (кроме последнего) по описанной выше схеме (см. рис. 1.19) обрабатываются все записи таблицы R (их число равно T(R)). Это объясняет второе слагаемое в формуле 3. В файлах каждого уровня хранятся B(R) блоков. Это объясняет формулу 4. Здесь коэффициент 2 учитывает, что каждый файл каждого уровня записывается на диск, а потом читается.

Чтение блоков таблицы R с диска (см. рис. 1.17) учитывается в стоимости выбора записей из исходной таблицы.

В формуле 5 первое слагаемое определяет процессорное время сравнения соединяемых записей. Если , то каждая запись из (их число равно ) сравнивается и соединяется с записями из (т.е. с числом записей из , приходящихся на одно значение атрибута соединения). Константа 2 учитывает сравнения записей при перемещении указателей. Второе слагаемое в формуле 5 связано с холостыми проверками. Количество таких сравнений равно числу записей в , у которых значение атрибута соединения отличается от всех значений атрибута "а" в (мощность таких значений атрибута "а" в равно ).

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

 



<== предыдущая лекция | следующая лекция ==>
Метод вложенных циклов (NLJ – Nested Loop Join) | Метод хешированного соединения (HJ – Hash Join)


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 6.047 сек.