Редактирование: Базы Данных, 08 лекция (от 29 сентября)

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

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

Текущая версия Ваш текст
Строка 21: Строка 21:
# Nested loops. Хорошо работает, когда один из операндов имеет небольшую мощность. Если он помещается в память, то по нему пускается внутренний цикл. В тех случаях, когда одно из отношний имеет небольшую можность, его пытаются использовать
# Nested loops. Хорошо работает, когда один из операндов имеет небольшую мощность. Если он помещается в память, то по нему пускается внутренний цикл. В тех случаях, когда одно из отношний имеет небольшую можность, его пытаются использовать
# Sort-merge. Позаимствован из алгоритмов внешней сортировки. На первом шаге оба отношения сортируютсся по атрибуту, по которому они соединяются. Предположим, образовалось два списка. Работает только на отношении равно. Плох тем, что работает только на сортированных списках.Выбирается, как правило, в тех случаях, когда к моменту сеодинения мы имеем отсортированный список.
# Sort-merge. Позаимствован из алгоритмов внешней сортировки. На первом шаге оба отношения сортируютсся по атрибуту, по которому они соединяются. Предположим, образовалось два списка. Работает только на отношении равно. Плох тем, что работает только на сортированных списках.Выбирается, как правило, в тех случаях, когда к моменту сеодинения мы имеем отсортированный список.
-
# Hashjoin. Для потроения таблиц в основной памяти. Нужно организовать данные таким образом, чтобы, зная ключ, получить доступ к данным за одно обращение. Каждая запись имеет вид ключ-данные. Выбирается функция, называющаяся хэш-функция. Единственное требование к ней&nbsp;&mdash; генерировать ключи не длиннее длины ключа. Идея хеширования состоит в том, что по ключу делаем его свёртку. Есть хэш-таблица, в которой для каждого ключа есть значение хэш-функция. Если плотность таблицы маленькая, то мы действительно получаем доступ ха одно обращение. Если таблица заполнена, то возникают коллизии. Как ни странно, есть много людей, которые не могут сказать ни одну хорошую хэш-функцию, а может этому мешает наш любимый перл, в котором есть много полуфабрикатов. Наиболее часто используемая функция&nbsp;&mdash; получающая от деления на простое число. Множество остатков от деления на простые числа&nbsp;&mdash; поле. Хорошее хэширование&nbsp;&mdash; когда элементы разразываются равномерно по области. Идея hashjoin: выбирается хэш-функция, которая работает для обоих отношений, применяется к атрибуту а, и все полученные значения помещаются в bucketы, они попадают в кортежи, для которых свётрка даёт одно и то же значение. Пусть у R1 образовалось n bucket'ов (p<sub>1</sub>, &hellip;, p<sub>n</sub>), у R2&nbsp;&mdash; m (q<sub>1</sub>...q<sub>m</sub>). Кортежи смогут соединится только тогда, когда значения хэш-функции совпадают. Чем хорош алгоритм&nbsp;&mdash; дешёвая операция, если есть ;l bucketов первого и второго отношения, которе образуются, которые соединяются, то их можно запустить параллельно. А если хорошо выбрана hash-функция, то bucket'ы могут быть маленькими. Алгоритм придумал Дэвид Де Вито.
+
# Hashjoin. Для потроения таблиц в основной памяти. Нужно организовать данные таким образом, чтобы, зная ключ, получить доступ к данным за одно обращение. Каждая запись имеет вид ключ-данные. Выбирается функция, называющаяся хэш-функция. Единственное требование к ней&nbsp;&mdash; генерировать ключи не длиннее длины ключа. Идея хеширования состоит в том, что по ключу делаем его свёртку. Есть хэш-таблица, в которой для каждого ключа есть значение хэш-функция. Если плотность таблицы маленькая, то мы действительно получаем доступ ха одно обращение. Если таблица заполнена, то возникают коллизии. Как ни странно, есть много людей, которые не могут сказать ни одну хорошую хэш-функцию, а может этому мешает наш любимый перл, в котором есть много полуфабрикатов. Наиболее чатсо используемая функция&nbsp;&mdash; получающая от деления на простое число. Множество остатков от деления на простые числа&nbsp;&mdash; поле. Хорошее хэширование&nbsp;&mdash; когда элементы разразываются равномерно по области. Идея hashjoin: выбирается хэш-функция, ктороая работтает для обоих отношений, применяется к атрибуту а, и все полученные значения помещаются в bucketы, они попадают в кортежи, лдля которых свётрка даёт одно и то же значение. Пусть у R1 образовалось n bucket'ов (p<sub>1</sub>, &hellip;, p<sub>n</sub>), у R2&nbsp;&mdash; m (q<sub>1</sub>...q<sub>m</sub>). Кортежи смогут соединится только тогда, когда значения хэш-функции совпадают. Чем хорош алгоритм&nbsp;&mdash; дешёвая операция, если есть ;l bucketов первого и второго отношения, которе образуются, которые соединяются, то их можно запустить параллельно. А если хорошо выбравна hash-функция, то bucket'ы могут быть маленькими. Алгоритм придумал Дэвид Де Вито.
<div class="comment">Естественное соединение стоит того, чтобы перед ним покурить.</div>
<div class="comment">Естественное соединение стоит того, чтобы перед ним покурить.</div>

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Личные инструменты
Разделы