Notes04r

advertisement
Принципы построения и
работы баз данных
Тема 4: Индексирование
Принципы
построения БД
Тема 4
1
Глава 13
Индексирование & Хеширование
запись
значение
Принципы
построения БД
?
Знач.
Тема 4
2
Вопросы
• Обычные индексы
• Двоичные деревья (B-trees)
• Различные схемы хеширования
Принципы
построения БД
Тема 4
3
Последовательный файл
10
20
30
40
50
60
70
80
90
100
Принципы
построения БД
Тема 4
4
Плотный индекс
10
20
10
20
30
40
30
40
50
60
70
80
50
60
70
80
90
100
90
100
110
120
Принципы
построения БД
Последоват. файл
Тема 4
5
Разреж. индекс
10
20
10
30
50
70
30
40
90
110
130
150
50
60
70
80
90
100
170
190
210
230
Принципы
построения БД
Последоват. файл
Тема 4
6
Последоват. файл
Разреж. индекс 2 уровня
10
90
170
250
330
410
490
570
10
20
10
30
50
70
30
40
90
110
130
150
50
60
70
80
90
100
170
190
210
230
Принципы
построения БД
Тема 4
7
•
•
•
Комментарий:
{Файл, Индекс} могут быть непрерывными или в
виде цепочек блоков
Вопрос:
Можно ли построить плотный 2 уровня индекс для
плотного индекса?
Замечания:
1. Указатель на блок (разреженный индекс) может
быть меньше, чем указатель на запись
Указатель на блок
указатель на запись
Принципы
построения БД
Тема 4
8
2. Если файл непрерывный, то указатели
можно не хранить (а вычислять)
R1
K1
R2
K2
K3
R3
Пусть в
блоке
1024 байта
K4
R4
если нужен блок K3:
получить его со смещением
(3-1)1024 = 2048 bytes
Принципы
построения БД
Тема 4
9
Сравнение плотных и разреженных
индексов
• разреженный: меньше индексного пространства в
расчете на 1 запись, можно хранить больше индексной
информации в памяти
• плотный: может дать информацию, существует ли
запись, без обращения к файлу
(Позже:
– разреженный лучше для вставок
– плотный необходим для вторичных индексов)
Принципы
построения БД
Тема 4
10
Терминология
• Индексно-последовательный файл
• Ключ поиска ( вообще говоря, отличен от
первичного ключа )
• Первичный индекс ( по упорядоченному полю )
• Вторичный индекс
• Плотный индекс (когда присутствуют все значения
ключа)
• Разреженный индекс
• Многоуровневый индекс
Принципы
построения БД
Тема 4
11
Следующие вопросы:
• Повторяющиеся значения ключа
• Удаление/вставка
• Вторичные индексы
Принципы
построения БД
Тема 4
12
Повторяющиеся значения ключа
10
10
10
20
20
30
30
30
40
45
Принципы
построения БД
Тема 4
13
Повторяющиеся значения ключа
Один из способов использования плотного индекса?
10
10
10
10
10
20
10
20
20
30
20
30
30
30
Принципы
построения БД
30
30
40
45
Тема 4
14
Повторяющиеся значения ключа
Плотный индекс. Лучший способ, чем предыдущий?
10
10
10
20
30
40
10
20
20
30
30
30
40
45
Принципы
построения БД
Тема 4
15
Повторяющиеся значения ключа
Необходима осторожность
при поиске записей с ключом
20 или 30!
Разреженный индекс, один способ.
Принципы
построения БД
10
10
10
10
20
30
10
20
20
30
30
30
40
45
Тема 4
16
Повторяющиеся значения ключа
Разреженный индекс, другой способ.
– индекс содержит первый новый ключ в блоке
Должно
быть 40?
10
10
10
20
30
30
10
20
20
30
30
30
40
45
Принципы
построения БД
Тема 4
17
Итоги
Повторяющиеся значения
ключа, первичный индекс
• Индех может указывать только на первое из
одинаковых значений
Файл
Индекс
a
a
a
.
.
b
Принципы
построения БД
Тема 4
18
Удаление из разреженного индекса
10
20
10
30
50
70
30
40
50
60
90
110
130
150
Принципы
построения БД
70
80
Тема 4
19
Удаление из разреженного индекса
– удалить запись с ключом 40
10
20
10
30
50
70
30
40
50
60
90
110
130
150
Принципы
построения БД
70
80
Тема 4
20
Удаление из разреженного индекса
– удалить запись с ключом 30
10
20
10
40 30
50
70
30 40
40
50
60
90
110
130
150
Принципы
построения БД
70
80
Тема 4
21
Удаление из разреженного индекса
– удалить записи с ключами 30 и 40
10
20
10
50 30
70 50
70
30
40
50
60
90
110
130
150
Принципы
построения БД
70
80
Тема 4
22
Удаление из плотного индекса
10
20
10
20
30
40
30
40
50
60
50
60
70
80
Принципы
построения БД
70
80
Тема 4
23
Удаление из плотного индекса
– удалить запись с ключом 30
10
20
10
20
40 30
40
30 40
40
50
60
50
60
70
80
Принципы
построения БД
70
80
Тема 4
24
Вставка, случай разреженного индекса
10
20
10
30
40
60
30
40
50
60
Принципы
построения БД
Тема 4
25
Вставка, случай разреженного индекса
– вставить запись с ключом 34
10
20
10
30
40
60
30
34
40
50
• удачный день, свободное.
пространство там, где нужно!
Принципы
построения БД
Тема 4
60
26
Вставка, случай разреженного индекса
– вставить запись с ключом 15
10
20 15
10
20 30
40
60
30 20
30
40
50
• В примере: Немедленная реорганизация
• Другой вариант:
– вставить новый блок (в цепочку)
– обновить индекс
Принципы
построения БД
Тема 4
60
27
Вставка, случай разреженного индекса
– вставить запись с ключом 25
10
30
40
60
10
20
25
Блок переполнения
(реорганизовать
позже ...)
30
40
50
60
Принципы
построения БД
Тема 4
28
Вставка, случай плотного индекса
• Много похожего
• Часто более трудоемкая . . .
Принципы
построения БД
Тема 4
29
Вторичные индексы
Поле упорядочения
30
50
20
70
80
40
100
10
90
60
Принципы
построения БД
Тема 4
30
Вторичные индексы
Поле упорядочения
Разреженный индекс
30
50
30
20
80
100
20
70
80
40
90
...
100
10
Не имеет смысла!
Принципы
построения БД
Тема 4
90
60
31
Вторичные индексы
Поле упорядочения
• Плотный индекс
10
50
90
...
10
20
30
40
30
50
50
60
70
...
80
40
20
70
100
10
Разреж. индекс более
высокого порядка
Принципы
построения БД
90
60
Тема 4
32
Для вторичного индекса
• Самый низкий уровень - плотный
• Другие уровни - разряженные
Также: Указатели ссылаются на записи (не блоки,
не вычисляются)
Принципы
построения БД
Тема 4
33
Повторяющиеся значения ключа и
вторичные индексы
20
10
20
40
10
40
10
40
30
40
Принципы
построения БД
Тема 4
34
Повторяющиеся значения ключа и вторичные индексы
Одна возможность...
Проблема:
Большие накладные
расходы!
• дисковое про-во
• время поиска
Принципы
построения БД
20
10
10
10
10
20
20
40
20
30
40
40
10
40
10
40
30
40
40
40
...
Тема 4
35
Повторяющиеся значения ключа и вторичные индексы
Другая
возможность...
Проблема:
Переменный
размер записей
в индексе!
10
20
10
20
20
40
10
40
30
40
10
40
30
40
Принципы
построения БД
Тема 4
36
Повторяющиеся значения ключа и вторичные индексы
10
20
30
40
20
10
20
40
50
60
...
10
40
Другая идея: Цепочка
записей с тем же ключом
Проблемы:
• Необходимо добавить поле к записи
• Необходимо пройти цепочку для
получения всех записей
Принципы
построения БД

Тема 4
10
40

30
40


37
Повторяющиеся значения ключа и вторичные индексы
20
10
10
20
30
40
20
40
10
40
50
60
...
10
40
30
40
сегменты
Принципы
построения БД
Тема 4
38
Почему полезна идея «сегментов»
Пусть таблица служащих (EMP) имеет несколько
индексов: первичный и 2 вторичных
Индексы
Записи
Name: первичный EMP (name,dept,floor,...)
Dept: вторичный
Floor: вторичный
Принципы
построения БД
Тема 4
39
Запрос: Получить список служащих в
(Toy Dept) & (2nd floor)
Dept. индекс
EMP
Toy
Floor индекс
2nd
Пересечение сегментов игрушек (toy сегмент) и 2-го
этажа (2nd сегмент) для получения списка служащих
удовлетворяющих обоим критериям выбора
Принципы
построения БД
Тема 4
40
Эта идея широко используется в информационных
системах для извлечения текстовой информации
Документы
cat
...the cat is
fat ...
dog
...was raining
cats and dogs...
...Fido the
dog ...
инвертированный список (список записей, имеющих
определенное значение вторичного ключа)
Принципы
построения БД
Тема 4
41
IR (information retrieval) запросы
• Найти документы со словами “cat” и “dog”
• Найти документы со словами “cat” или “dog”
• Найти документы со словом“cat”, но без “dog”
• Найти документы со словами “cat” в названии
• Find articles with “cat” and “dog”
within 5 words
Принципы
построения БД
Тема 4
42
Типичный прием: поместить больше информации в
инвертированный список
cat
dog
d1
Название 5
Автор
10
Аннотац. 57
d3
d2
Название 100
Название 12
Принципы
построения БД
Тема 4
43
Регистрация(Posting): элемент инвертированного
списка. Представляет появление термина в
документе.
Размер списка:
(в регистрации)
1
106
Редкое слово
или опечатка
Общеупотребительное
слово
Размер элемента регистрации: 10-15 bits (сжатый)
Принципы
построения БД
Тема 4
44
Предварительные итоги
• Обычный индекс
– Основные идеи: плотный, разреженный
многоуровневый…
– Повторяющиеся значения ключа
– Удаление/вставка
– Вторичные индексы
– Сегменты списков регистрации
Принципы
построения БД
Тема 4
45
Обычные индексы
Преимущества:
- Просты в использовании
- Индекс – последовательный файл, удобный для
чтения
Недостатки:
- Вставка записей - трудоемка, и/или
- Приводит к потере последовательности записей
Другой подход: Другой тип индекса
- Отказ от последовательности индекса
- Попытка сбалансировать доступ
Принципы
построения БД
Тема 4
46
Пример Индекс (последовательный)
непрерывный
10
20
30
33
40
50
60
39
31
35
36
32
38
34
своб.пр-во
70
80
90
Принципы
построения БД
Область переполнения
(не последовательная)
Тема 4
47
Пример сбалансированного
двоичного дерева (B+Tree) n=3
Принципы
построения БД
Тема 4
180
200
150
156
179
120
130
100
101
110
30
35
3
5
11
30
120
150
180
100
Корень
48
К ключам
< 57
Принципы
построения БД
95
81
57
Пример промежуточного узла «ветки» дерева (не листа)
К ключам
К ключам
К ключам
57 k<81
81k<95
95
Тема 4
49
Пример «лист»-узла:
Принципы
построения БД
Тема 4
95
к следующему
листу в последовательности
К записи с
ключом 95
81
К записи с
ключом 81
К записи с
ключом 57
57
от узла – «не-листа»
50
Обозначения в книге
n=3
Лист:
30
35
30 35
Не-лист:
30
30
Принципы
построения БД
Тема 4
51
Размер узлов:
n+1 указатель
n ключей
(фиксиров.)
Не хотим, чтобы узлы были слишком пустыми
Использовать, по крайней мере
Не-лист:
(n+1)/2 указателей
Лист:
(n+1)/2 указателей на данные
Принципы
построения БД
Тема 4
52
n=3
30
Лист
30
35
Принципы
построения БД
Тема 4
Считается, даже если NULL
Не-лист
120
150
180
Мин.узел
3
5
11
Полный узел
53
Сбалансированное двоичное
дерево(B+tree) порядка n
(1) Все листья – на одном и том же самом низком
уровне (сбалансированное дерево)
(2) Указатели в листьях ссылаются на записи, за
исключением указателей формирующих
«последовательность листьев»
Принципы
построения БД
Тема 4
54
Число указателей/ключей для B+tree
3-го порядка
Max Max Min
ptrs keys ptrsdata
Min
keys
Промежут.
(не-корень)
Лист
(не-корень)
n+1
n
(n+1)/2 (n+1)/2- 1
n+1
n
(n+1)/2
(n+1)/2
Корень
n+1
n
1
1
Принципы
построения БД
Тема 4
55
Вставка в B+tree
(a) Простой случай
– Есть место в «листе»
(б) Переполнение «листа»
(в) Переполнение промежуточного узла
(г) Новый корневой узел
Принципы
построения БД
Тема 4
56
n=3
Принципы
построения БД
30
31
32
3
5
11
30
100
(a) Вставить ключ = 32
Тема 4
57
n=3
Принципы
построения БД
30
30
31
3
57
11
3
5
7
100
(б) Вставить ключ = 7
Тема 4
58
n=3
Принципы
построения БД
Тема 4
180
200
180
160
179
150
156
179
120
150
180
160
100
(в) Вставить ключ = 160
59
40
45
40
Тема 4
30
32
40
20
25
10
12
1
2
3
10
20
30
новый корень
Принципы
построения БД
n=3
30
(г) новый корень, вставить 45
60
Удаление из B+tree
(a) Простой случай – нет примера
(б) Слияние с соседом
(в) Перераспределение ключей
(г) Случаи (б) или (в) промежуточном узле
Принципы
построения БД
Тема 4
61
(б) Слияние с соседом
– Удалить 50
Принципы
построения БД
40
50
10
20
30
40
10
40
100
n=4
Тема 4
62
(в) Перераспределение
ключей
n=4
Принципы
построения БД
35
40
50
10
20
30
35
10
40 35
100
– Удалить 50
Тема 4
63
(г) Слияние промеж. узлов
– Удалить 37
25
Тема 4
40
45
30
37
30
40
25
26
30
20
22
10
14
1
3
10
20
25
40
Новый корень
Принципы
построения БД
n=4
64
Удаление из B+tree на практике
– Часто слияние не реализуется
– Слишком трудоемко и не стоит затрат!
Принципы
построения БД
Тема 4
65
Сравнение: B+trees со статическим
индексно-последовательным файлом
Ссылка #1: Held & Stonebraker “B-Trees Re-examined”
CACM, Feb. 1978
- Параллельный доступ труднее в B+Tree
- B+tree требует больше пространства
Для сравнения использованы:
блок = 512 байт
ключ = указатель = 4 байта
4 записи в блоке
Принципы
построения БД
Тема 4
66
Пример: 1 блок статического индекса
k1
k1
127 ключей
k2
k2
k3
k3
(127+1)4 = 512 байт
-> указатели в индексе
- неявные!
Принципы
построения БД
1 блок
данных
до 127
блоков
Тема 4
67
пример: 1 блок для B+tree
k1
k1
1 блок
данных
k2
63 ключа
k2
...
k63
k3
След.
63x(4+4)+8 = 512 байт
-> указатели нужны в B+tree
блоках т.к. индекс не явл.
непрерывным
Принципы
построения БД
Тема 4
до 63
блоков
68
Сравнение размера Ссылка. #1
Статический индекс
Кол-во блоков
данных
высота
2 -> 127
128 -> 16,129
16,130 -> 2,048,383
Принципы
построения БД
2
3
4
B-tree
Кол-во блоков
данных
высота
2 -> 63
64 -> 3968
3969 -> 250,047
250,048 -> 15,752,961
Тема 4
2
3
4
5
69
Анализ приведенный в ссылаемой
статье #1 утверждает
• Для файла из 8,000 блоков,
после 32,000 вставок
после 16,000 поисков
 Статический индекс экономит достаточно
поисков для реорганизации
#1 вывод
Принципы
построения БД
Статический индекс лучше!!
Тема 4
70
Ссылка #2: M. Stonebraker, “Retrospective on a
database system,” TODS, June 1980
B-tree лучше!!
#2 вывод
• Администратор БД не знает, когда нужна
реорганизация индекса
• Администратор БД не знает, насколько полно
загружать страницы нового индекса
Принципы
построения БД
Тема 4
71
Интересная задача:
Для B+tree насколько большим должен
быть порядок n ?
…
n – число ключей в узле
Простые предположения
(1) Время чтения узла с диска - (70+0.05n) msec.
(2) В памяти для отыскания ключа использется
двоичный поиск: (a + b LOG2 n) msec. Где a,b –
некоторые константы (предположим a << 70 )
(3) Предположим также, что B+tree заполнено, т.е.
число проверяемых узлов – LOGnN , где – N
число записей
Принципы
построения БД
Тема 4
72
Можно оценить: f(n) = время получения записи
f(n)
nopt
n
Найти nopt из уравнения f’(n) = 0
(подробнее в дом.работе)
Что будет происходить с nopt по мере того как
• Диск становится быстрее?
• Процессор становится быстрее?
Принципы
построения БД
Тема 4
73
Вариация B+tree: B-tree (без +)
• Основная идея:
– Избежание дубликатов ключей
– Ссылки на записи из промежуточных узлов
K1 P1
к записям
с ключом K1
К ключам
< K1
Принципы
построения БД
K2 P2
K3 P3
к записям
с ключом K2
К ключам
K1<x<K2
к записям
с ключом К3
К ключам
K2<x<k3
Тема 4
К ключам
>k3
74
Пример -tree
n=2
Принципы
построения БД
Тема 4
170
180
150
160
145
165
130
140
110
120
90
100
70
80
50
60
30
40
10
20
25
45
85
105
65
125
• указатели задающие
последовательность
листьев бесполезны
(но место за ними для
Простоты сохранено)
75
Замечание по поводу вставки
• Предположим, вставляется запись с ключом = 25
10
20
30
лист
n=3
Принципы
построения БД
25
30
10
–
20
–
• После вставки:
Тема 4
76
Итак, для B-tree:
MAX
MIN
Указ Указ Ключ
узел зап.
Не-лист
Не-кор.
Лист
Не-кор.
Корень
Не-лист
Корень
Лист
Принципы
построения БД
Указ
узел
Указ
зап.
Ключ
(n+1)/2 (n+1)/2-1 (n+1)/2-1
n+1
n
n
1
n
n
1
n+1
n
n
2
1
1
1
n
n
1
1
1
Тема 4
(n+1)/2
(n+1)/2
77
Сравнение:
 Поиск в B-tree быстрее, чем в B+trees
 В B-tree, промежуточные узлы и листья имеют
разные размеры
 В B-tree, удаление более сложное
 B+tree предпочтительнее!
Замечание.
Если блоки фиксированного размера (из-за
ограничений диска или буферизации) то поиск в
B+tree на самом деле лучше!!
Принципы
построения БД
Тема 4
78
Пример:
- Указатели
4 байта
- Ключи
4 байта
- Блоки
100 байт (для примера)
- Рассмотрим полное 2-х уровневое дерево
B-tree:
Корень имеет 8 ключей + 8 указателей на записи
+ 9 указателей на детей= 8x4 + 8x4 + 9x4 = 100 bytes
Каждый из 9 сыновей: 12 указателей на записи(+12
ключей) = 12x(4+4) + 4 = 100 bytes
2-х уров. B-tree, макс.кол-во записей =12x9 + 8 = 116
Принципы
построения БД
Тема 4
79
B+tree:
Корень имеет 12 ключей + 13 указателей на детей =
12x4 + 13x4 = 100 bytes
Каждый из 13 сыновей: 12 указателей на записи(+12
ключей) = 12x(4 +4) + 4 = 100 bytes
2-х уров. B+tree, макс.кол-во записей =13х12 = 156
8 записей
Более «кустистое»
B+
B
ooooooooooooo
ooooooooo
108 записей
156 записей
Принципы
построения БД
Тема 4
80
Download