
8614aaf6766ec7da2eb053e849e18840.ppt
- Количество слайдов: 49
Принципы построения и работы баз данных Тема 05: Хэширование и другие вопросы. Принципы построения БД Тема 5 1
Хэширование <key> key h(key) . . . Принципы построения БД Тема 5 Ячейки (обычно 1 диск. блок ) 2
Две возможности . . . записи (1) key h(key) Принципы построения БД . . . Тема 5 3
Две возможности (2) key h(key) ключ запись Индекс (2) – для вторичного ключа поиска Принципы построения БД Тема 5 4
Пример функции хэширования • Ключ = ‘x 1 x 2 … xn’ строка символов длиной n байт • Пусть имеется m ячеек • h: сложить x 1 + x 2 + …. . хn как целые числа – вычислить сумму по модулю b Это может быть не лучшей хэш-функцией Д. Кнут. Искусство программирования для ЭВМ. Т. 3. (Если хотите Узнать как выбрать хорошую хэш-функцию. ) Хорошая функция обладает свойством: среднее ожидаемое количество ключей в ячейке одинаково для всех ячеек Принципы построения БД Тема 5 5
Внутри ячейки: • Нужно ли держать ключи отсортированными? • Да, если время обработки процессором критично & Вставки. удаления не слишком часты Далее: Пример для иллюстрации вставок, переполнения, удалений h(key) Принципы построения БД Тема 5 6
Пример 2 записи на ячейку Вставка: h(a) = 1 h(b) = 2 h(c) = 1 h(d) = 0 0 d 1 a c b 2 e 3 h(e) = 1 Принципы построения БД Тема 5 7
Пример: удаление Удалить: e f c 0 a 1 b c d e 2 3 Принципы построения БД f g Тема 5 d М. б. перенести “g” в предыдущий блок 8
Главное правило: Использование пространства ячейки от 50% до 80% Использование = число использованных мест общее число мест в ячейке • Если < 50%, теряем дисковое пространство • Если > 80%, переполнение может быть значительным, зависит от качества хэш-функции и количества ключей в ячейке Принципы построения БД Тема 5 9
Как бороться с ростом хэш-таблицы (файла)? • Переполнение и реорганизация • Динамическое хэширование • Расширяемая схема • Линейная схема Принципы построения БД Тема 5 10
Расширяемая схема: две идеи (a) Использовать j из b битов значения хэш-функции b 00110101 h(K) исп. j может расти со временем. . . (б) Использование оглавления h(K)[j ] . . . к ячейке . . . Принципы построения БД Тема 5 11
Пример: h(k) дает 4 бита; 2 ключа/ячейку j=2 1 0001 j= 1 00 01 10 1 2 1001 1010 1100 Вставить 1010 Принципы построения БД 11 Новое оглавление 1 2 1100 Тема 5 12
Продолжение примера j= 2 00 01 10 11 Вставить: 0111 2 0000 0001 1 2 0001 0111 2 1001 1010 2 1100 0000 Принципы построения БД Тема 5 13
Продолжение примера i= 2 00 0000 2 0001 0111 2 01 10 11 Вставить: 1001 Принципы построения БД 1001 3 1001 1010 1001 2 3 1010 1100 2 Тема 5 j=3 000 001 010 011 100 101 110 111 14
Расширяемая схема: удаление • Без слияния блоков • Слияние блоков и сокращение оглавления если возможно (процедура – обратная вставке) Пример удаления • Рассмотрите вставку в обратном порядке Принципы построения БД Тема 5 15
Итог Расширяемая схема + Справляется с растущими файлами - с меньшей потерей пространства - без полной реорганизации - Косвенная адресация (хорошо если оглавление в памяти) - Оглавление увеличивается в 2 раза (То умещается, то нет) Принципы построения БД Тема 5 16
Линейная схема • Другая динамическая схема Две идеи: (a) Использование младших j битов значения хэш-функции b 01110101 растет (б) Файл растет линейно (в) Пороговое значение U = число записей число ячеек Принципы построения БД Тема 5 j <= v (=1. 6) 17
Пример b=4 bits, j =1, 2 ключа/ячейку • вставка 0101 0000 1010 0101 1111 0 1 m = 01 (max номер блока) Правило Если h(k)[j ] m, то проверять ячейку h(k)[ j ], иначе проверять ячейку h(k)[j ] - 2 j -1 Принципы построения БД Тема 5 18
Пример b=4 bits, j =2, 2 ключа/ячейку 0000 0101 1111 1010 01 00 10 Ячейки для будущего роста 11 m = 01 (max номер блока) 10 Правило Если h(k)[j ] m, то проверять ячейку h(k)[ j ] иначе проверять ячейку h(k)[j ] - 2 j -1 Принципы построения БД Тема 5 19
Пример b=4 bits, j =2, 2 ключа/ячейку 0101 0000 00 • вставка 0101 • может иметь цеп. переполнения! 0101 1111 1010 01 Ячейки для будущего роста 10 11 m = 01 (max номер блока) 10 Если h(k)[j ] m, то проверять ячейку h(k)[ j ], Правило иначе проверять ячейку h(k)[j ] - 2 j -1 Принципы построения БД Тема 5 20
Пример b=4 bits, j =2, 2 ключа/ячейку 0101 0000 1010 00 0101 1111 • вставка 0101 1010 1111 Ячейки для будущего роста 01 10 11 m = 01 (max номер блока) 10 11 Принципы построения БД Тема 5 21
Продолжение примера: Как расти дальше? j=23 0000 0 00 100 0101 0 01 1010 0101 1111 010 110 0 11 100 101. . . m = 11 (max номер блока) 100 101 Принципы построения БД Тема 5 22
Когда расширяется файл? • Следите за: кол-во записей =U общее кол-во ячеек • Если U > порогового значения, то увеличить m (и может быть j ) Принципы построения БД Тема 5 23
Итог Линейная схема + Справляется с растущими файлами - с меньшей потерей пространства - без полной реорганизации + Нет необходимости в косвенной адресации - Может иметь цепочки переполнения Принципы построения БД Тема 5 24
Пример: «Плохой» частный случай Очень полная ячейка Очень пустые Принципы построения БД Нужно увел. m… Приведет к потере пространства. . . Тема 5 25
Далее: • Сравнение индексирования и хэширования • Определение индекса в SQL • Доступ с использованием нескольких ключей Принципы построения БД Тема 5 26
Сравнение индексирования и хэширования • Хеширование хорошо для выбора записей с заданным значением ключа, например SELECT … FROM R WHERE R. A = 5 • Индексирование (включая B-Trees) хорошо для поиска записей со значениями из (полу-) интервала SELECT. . . FROM R WHERE R. A > 5 Принципы построения БД Тема 5 27
Определение индекса в SQL • CREATE INDEX имя_индекса ON rel (attr) • CREATE UNIQUE INDEX имя_индекса ON rel(attr) Определяет возможный ключ отношения • DROP INDEX имя_индекса Принципы построения БД Тема 5 28
Замечания Нельзя задать тип индекса ( например, B-tree, хэширование, …) или параметры (заполненность, размер хэш-таблицы, . . . ) По крайней мере стандарт SQL этого не позволяет. . . Можно задавать список атрибутов в качестве ключа многомерный индекс CREATE INDEX Принципы построения БД имя_индекса ON R(A, B, C) Тема 5 29
Многомерный индекс Мотивация: Найти все записи, у которых DEPT = “Toy” AND SAL > 50 k Стратегия 1: • Использовать один индекс, например Dept. • Получить все записи с Dept = “Toy” и проверить зарплату I 1 Принципы построения БД Тема 5 30
Стратегия 2: Использовать 2 индекса; манипулировать указателями Toy Sal > 50 k Стратегия 3: Многомерный индекс I 2 I 1 Принципы построения БД Тема 5 I 2 31
Пример Art Sales Toy Dept индекс 10 k 15 k 17 k 21 k Пример записи Name=Joe DEPT=Sales SAL=15 k 12 k 15 k 19 k Salary индекс Принципы построения БД Тема 5 32
Для каких запросов хорош этот индекс? Найти записи с Dept = “Sales” & SAL=20 k Найти записи с Dept = “Sales” & SAL > 20 k Найти записи с Dept = “Sales” Найти записи с SAL = 20 k Принципы построения БД Тема 5 33
Интересное приложение: • Географические(пространственные) данные Данные: <X 1, Y 1, атрибуты> <X 2, Y 2, атрибуты>. . . y x Запросы: • Какой город находится в <Xi, Yi>? • Что находится в 5 милях от <Xi, Yi>? • Что ближе всех к <Xi, Yi>? Принципы построения БД Тема 5 34
40 Пример 10 25 20 20 10 e h 30 20 15 35 i n o j k m 10 5 h i f 15 15 j k g l Принципы построения БД m d e c b f l a d c g 20 a b • Поиск точек близких к f • Поиск точек близких к b n o Тема 5 35
Запросы • • Найти точки с Yi > 20 Найти точки с Xi < 5 Найти точки“близкие” к i = <12, 38> Найти точки“близкие” к b = <7, 24> • Используется несколько типов географических индексов • Q деревья • R деревья Принципы построения БД Тема 5 36
Еще два типа многомерных индексов • Сеточный файл(индекс) • Хэш-разбиение Сеточный индекс X 1 X 2 V 1 V 2 Key 1 Key 2 …… Xn Vn К записи с ключом key 1=V 3, key 2=X 2 Принципы построения БД Тема 5 37
Утверждение • Может быстро находить записи с – ключ 1 = Vi & ключ 2 = Xj – ключ 1 = Vi – ключ 2 = Xj • А также записи с ключами из диапазона. – ключ 1 Vi & ключ 2 < Xj Принципы построения БД Тема 5 38
Имеется загвоздка в сеточном индексе! V 2 V 3 X 1 X 2 X 3 X 4 Как массив V 1 X 2 X 3 X 4 • Как сеточный индекс хранится на диске? Проблема: • Необходима регулярность данных для вычисления позиции элемента <Vi, Xj> Принципы построения БД Тема 5 39
Решение: Использовать косвенную адресацию V 1 V 2 V 3 V 4 X 1 X 2 X 3 Ячейки Принципы построения БД ---- Ячейки ----- *сетка содержит указатели на ячейки ---Тема 5 40
При косвенной адресации: • Сетка может быть регулярной без потери пространства • Однако необходима дополнительные затраты на обработку косвенной адресации Принципы построения БД Тема 5 41
Можно индексировать сетку по интервалам Зарплата 8 0 -20 K 20 K-50 K 50 K- Сетка 1 2 3 Toy Sales Personnel Линейная шкала Принципы построения БД Тема 5 42
Сеточные файлы + Удобны для поиска по многомерному ключу - Дополнительные затраты памяти и обработки (нет ничего бесплатного) - Нуждается в равномерном разбиении значений ключей Принципы построения БД Тема 5 43
Хэш-разбиение Идея: ключ1 Принципы построения БД 010110 1110010 h 1 h 2 Тема 5 ключ2 44
Пример: h 1(toy) h 1(sales) h 1(art). . h 2(10 k) h 2(20 k) h 2(30 k) h 2(40 k). . Вставка Принципы построения БД =0 =1 =1 =01 =11 =00 001 010 011 100 101 110 111 <Fred> <Joe><Sally> <Fred, toy, 10 k>, <Joe, sales, 10 k> <Sally, art, 30 k> Тема 5 45
h 1(toy) =0 000 <Fred> h 1(sales) =1 001 <Joe><Jan> h 1(art) =1 010 <Mary>. 011. <Sally> h 2(10 k) =01 100 h 2(20 k) =11 101 h 2(30 k) =01 110 <Tom><Bill> <Andy> h 2(40 k) =00 111. . • Найти служащих с Dept. = Sales & Sal=40 k Принципы построения БД Тема 5 46
h 1(toy) =0 000 <Fred> h 1(sales) =1 001 <Joe><Jan> h 1(art) =1 010 <Mary>. 011. <Sally> h 2(10 k) =01 100 h 2(20 k) =11 101 h 2(30 k) =01 110 <Tom><Bill> <Andy> h 2(40 k) =00 111. . • Найти служащих с Sal=30 k Искать здесь Принципы построения БД Тема 5 47
h 1(toy) =0 000 <Fred> h 1(sales) =1 001 <Joe><Jan> h 1(art) =1 010 <Mary>. 011. <Sally> h 2(10 k) =01 100 h 2(20 k) =11 101 h 2(30 k) =01 110 <Tom><Bill> <Andy> h 2(40 k) =00 111. . • Найти служ. с Dept. = Sales Искать здесь Принципы построения БД Тема 5 48
Итоги - Индексирование против хэширокания - Определение индексов в SQL - Доступ при многомерном ключе - многомерный индекс Вариации: Сетка, Географические данные - Хэш-разбиение Принципы построения БД Тема 5 49
8614aaf6766ec7da2eb053e849e18840.ppt