Решение домашнего задания №2.

advertisement
Вариант решения домашнего задания №2.
Задача 1.
В каждом блоке для размещения кортежей отношения и записей индекса доступно
4096-500 = 4046 байт (50 байт на заголовок блока).
а) Строится разреженный первичный индекс для отношения Department. Такой
индекс должен хранить для каждого блока данных пару (ключ; указатель на блок) длиной
16(ключ)+10(указатель на блок)=26 байт. Кроме этого требуется хранить в каждом
индексном блоке указатель на следующий блок индекса (размером 10 байт).
 4046  10 
 155
26 

Количество записей, которое помещается в блок индекса = 
записей.
Количество кортежей отношения Department, которое помещается в блок данных =
 4046 
 8 кортежей.
 500 
=
Так как отношение Department имеет 1 500 кортежей, для хранения отношения
 1500 
требуется 
= 188 блоков данных.
 8 
188 
 2 блока.
Следовательно, количество блоков индекса = 
155 
б) Сначала определим размер первичного плотного индекса для отношения Employ.
Каждый блок этого индекса содержит пары (ключ; указатель на запись) длиной
32(ключ)+14(указатель на запись) = 46 байт и указатель на следующий блок индекса (10
байт).
Количество записей, помещаемых в блок индекса первого уровня =
 4046  10 
 87 записей.
46 

=
В каждом отделе работает 20 сотрудников. Поскольку всего отделов 1 500,
отношение Employ содержит 30 000 кортежей.
 30000 
 345 блоков.
Количество блоков индекса первого уровня = 
 87 
Каждый блок индекса второго уровня содержит пары (ключ; указатель на блок
индекса первого уровня) длиной 32(ключ)+10(указатель на блок)=42 байта и указатель на
следующий блок индекса второго уровня (10 байт).
 4046  10 
 96 записей.
42 

Количество записей в блоке индекса второго уровня = 
 345 
 4 блока.
 96 
Количество блоков индекса второго уровня = 
в) Сначала определим размеры индексов в блоках.
Вторичный индекс первого уровня должен быть плотным. Следовательно, он
содержит пары (ключ; указатель на запись) длиной 16(ключ – идентификатор
отдела)+14(указатель на запись) = 30 байт для каждой из 30 000 записей отношения
Employ. Каждый блок индекса первого уровня должен содержать также указатель на
следующий индексный блок.
 4046  10 
 134 записи.
 30 
 30000
 224 блока.
Количество блоков во вторичном индексе первого уровня = 
 134 
Количество записей в блоке индекса первого уровня = 
При построении индекса второго уровня для каждого блока индекса первого уровня
хранится пара (ключ; указатель на блок) длиной 16+10=26 байт.
 4046  10 
 155 записей.
26 

Количество записей в блоке индекса второго уровня = 
Следовательно, для хранения 224 записей о блоках вторичного индекса первого
уровня требуется 2 блока индекса второго уровня.
В худшем случае кортежи сотрудников одного отдела будут расположены в 20
различных блоках данных. В индексном файле ключевые значения будут отсортированы.
Так как количество записей в блоке индекса первого уровня равно 134, может оказаться,
что записи индекса о сотрудниках одного отдела будут распределены между двумя
блоками индекса (например, 14 в одном блоке, 6 – в следующем). Поэтому в худшем
случае потребуется прочитать все блоки индекса второго уровня (2 блока) + два блока
индекса первого уровня + прочитать 20 блоков данных. Таким образом, в худшем случае
требуется осуществить 24 операции ввода/вывода.
Задача 2.
Итак, дано В-дерево порядка 4.
Q
DJN
AB
DEF
UY
JKL
NO
QRS
UV
YZ
а) удаление ключа, приводящее к слиянию узлов.
Примером такого удаления является удаление ключа N. Тогда четвертый листовой
узел (ключ О) будет содержать всего 1 ключ и указатель на записи блока данных (при
минимальном количестве 2). Соседний слева узел (ключи J, K, L) содержит столько
ключей и, соответственно, указателей на записи, что при слиянии образуется полностью
заполненный листовой узел. При этом требуется удалить ключ N и указатель на
удаляемый блок из узла второго уровня.
Таким образом, структура В-дерева будет следующей:
Q
DJ
AB
DEF
UY
JKLO
QRS
UV
YZ
б) удаление ключа, приводящее к перераспределению ключей.
Пусть удаляется ключевое значение A. Тогда первый листовой блок будет
содержать всего одно ключевое значение B, что меньше минимального числа ключей 2.
Соседний справа листовой узел содержит 3 ключевых значения и, следовательно,
указателя на записи файла данных. Одно из ключевых значений можно перенести в
первый листовой блок без нарушения требования на минимальное количество
используемых указателей. Итак, переносим в первый листовой блок ключевое значение D
и соответствующий ему указатель. Требуется также изменить ключевые значения в
первом блоке второго уровня. Теперь разделяющим два первых листовых блока
значением является E. Именно это значение ставится на место ключевого значения D.
Таким образом, получим следующее В-дерево:
Q
EJ
B D
EF
UY
JKLO
QRS
UV
YZ
в) удаление ключа, приводящее к смене корневого узла.
Пусть удаляется ключевое значение U. В пятом листовом блоке после этого
останется всего один ключ (V), что меньше минимального числа ключей в листовом
блоке. Соседний слева листовой узел имеет одно свободное место для оставшегося ключа
V. Осуществляем слияние четвертого и пятого листовых узлов. В результате потребуется
удалить один ключ (U) и соответствующий указатель из узла второго уровня. Тогда этот
узел будет использовать только одно ключевое значение и 2 указателя на листовые блоки,
что при порядке В-дерева n=4 меньше минимально допустимого. Следовательно,
требуется либо осуществление перераспределения ключей между узлами второго уровня,
либо слияние с соседом. Поскольку первый узел второго уровня В-дерева содержит ровно
минимальное число ключей и указателей на листовые узлы, осуществляется процедура
слияния с соседом. Эта процедура приводит к тому, что корневой узел становится не
нужным. Ключевое значение Q из корневого узла переносится на второй уровень в узел
слияния. Именно этот узел слияния становится новым корнем. Таким образом, получим:
E
B D
EF
J
JKLO
Q
Y
QRSV
YZ
г) вставка ключа, приводящая к разбиению промежуточного узла В-дерева.
Пусть осуществляется вставка ключевого значения M. Согласно правилам
формирования В-дерева это ключевое значение и указатель на кортеж должны быть
помещены в третий листовой узел с ключами (J, K, L, O). Однако этот узел полностью
заполнен. Следовательно, требуется разбивать листовой узел. В результате формируется
два листовых узла – в первом остаются ключевые значения J, K, L, во втором – M, O.
Требуется разделить два вновь полученных узла на верхнем уровне. Разделяющим
ключевым значением является M – наименьшее ключевое значение нового узла. Его и
указатель на новый узел требуется поместить в корневой узел, однако тот полностью
заполнен. Разбиваем корневой узел на 2 узла. Пять ключевых значений распределяются
так, что первый узел второго уровня содержит ключи E и J, второй узел – ключи Q и Y.
Ключевое значение M будет разбивать два промежуточных узла, помещаясь в новый
корневой блок вместе с указателями на промежуточные узлы. Таким образом, структура
В-дерева имеет следующий вид:
М
EJ
B D
EF
QY
JKL
MO
QRSV
YZ
д) вставка ключа, приводящая к разбиению листового узла.
Пусть осуществляется вставка ключевого значения Т. Это ключевое значение
должно попасть в пятый листовой узел с ключами Q, R, S, V, однако этот узел полностью
заполнен. Требуется осуществить разбиение листового узла. Создается новый листовой
узел. Ключевые значения перераспределяются между блоками так, что в первом (старом)
узле остаются ключи Q, R и S, во второй узел переходят ключи T и V. Ключевое значение
T(минимальное в новом узле) вместе с указателем на вновь созданный узел помещаются
во второй узел второго уровня, в котором достаточно места для этого.
Таким образом, окончательная структура В-дерева выглядит так:
М
EJ
B D
EF
QTY
JKL
MO
QRS
T V
YZ
Задача 3.
В-дерево имеет 3 уровня. Пусть n – порядок В-дерева.
а) Количество узлов на первом уровне В-дерева – 1 (корень В-дерева). На втором
уровне при условии максимального заполнения будут задействованы n+1 внутренних
(промежуточных) узлов. Каждый из них приведет к n+1 листовому блоку. Таким образом,
общее число узлов В-дерева – 1+(n+1)+(n+1)2, из них (n+1)2 узлов – количество листовых
узлов.
Таким образом, доля листовых узлов В-дерева =
( n  1) 2
( n  1) 2  ( n  1)  1
.
Требуется найти минимальное n из тех, для которых выполняется неравенство
(n  1) 2
(n  1) 2  (n  1)  1
 0.9 .
Минимальное целое число, удовлетворяющее данному неравенству, n=9. В этом
случае количество записей, индексируемых данным В-деревом = количество листовых
узлов * количество ключевых значений в листовом узле = (n+1)2n=100*9=900 кортежей.
б) При ответе на те же вопросы при условии минимального заполнения В-дерева
следует учесть, что минимальное число указателей в корне – 2, в узле второго уровня -
 n  1
 2  , в листовом узле -
 n  1
 2  ключевых значений и указателей на кортежи.
 n  1
Тогда общее число узлов В-дерева = 1+2+2* 
узлов. Тогда требуется найти
 2 
минимальное целое n из тех, для которых выполняется неравенство
 n  1
2*
 2   0.9 , или  n  1   13.5 ,
 2 
 n  1
3  2
 2 
т.е.
n 1
 13 . Таким образом,
2
минимальное целое n, удовлетворяющее неравенству, n=26.
Число индексируемых записей при этом = количество листовых узлов *
 n  1   n  1
*
= 364 записи.
 2   2 
минимальное количество ключей в листовом узле = 2* 
Download