midterm_an

advertisement
Вариант решения заданий промежуточного экзамена
Задача 1 (10 баллов).
И
а) Порядок вставки в B+tree влияет на окончательный вид дерева.
Различный порядок вставки может привести к различным расщеплениям блоков и,
следовательно, к различной окончательной форме B+tree.
Л
б) Обычно B+tree более эффективно, чем расширяемая или линейная хэш-схема.
Хэширование более эффективно для запросов, работающих с единственной записью
(определяемой, например, конкретным значением первичного ключа).
И
в) Время обслуживания запроса на ввод/вывод при использовании алгоритма «лифта» может
быть больше, чем «первым-пришел-первым-обслужен»
Запрос, пришедший раньше, но требующий удаленную дорожку или смену направления
движения головок может быть отложен алгоритмом «лифта» на более позднее время, чем
другие запросы, следовательно, может иметь большее время ожидания, являющееся частью
времени обслуживания.
Л
г) Рассмотрим отношения R(A,B) и S(B,C), где T(R) = 5000, T(S) = 3000, и B – первичный ключ
S. Ожидаемое число кортежей в естественном соединении R и S будет меньше или равно 3000.
Поскольку каждой записи из R(A,B) может соответствовать хотя бы одна запись из S(B,C),
Например, если В – внешний ключ по отношению к S(B,C), то результат может содержать 5000
записей.
И
д) Рассмотрим отношения R(A, B, C) и S(A, D, E) с общим атрибутом A. Известно, что R.A –
внешний ключ, ссылающийся на S.A, и что S.A - первичный ключ S. Ожидаемое число кортежей
в естественном соединении R и S будет T(R).
Смотри пояснение к предыдущему пункту.
Л
И
Л
е) Для любого файла записей можно построить два разреженных индекса первого уровня по
двум различным ключам.
Файл должен быть отсортирован одновременно по двум различным ключам.
ж) Для любого файла записей можно построить два плотных индекса первого уровня по двум
различным ключам.
з) Для любого файла записей можно построить разреженный индекс первого уровня и плотный
индекс второго уровня с условием полезности обоих индексов.
Плотный индекс второго уровня не дает ничего дополнительного по сранению с первым
уровнем.
И
и) Для любого файла записей можно построить плотный индекс первого уровня и разреженный
индекс второго уровня с условием полезности обоих индексов.
Л
к) S(E1 - E2) = S(E1) - S(E2)
Пусть E1(R,S)= {(1,2),(3,4)}, E2(R,S)={(3,2), (1,4)}, левая часть={(2),(4)}, правая – {}



Задача 2 (10 баллов).
Найти все(сколько сможете) нарушения B+tree структуры в следующей диаграмме. Обвести
кружком каждый неправильный узел и дать краткое пояснение каждой ошибки.
Предполагается, что порядок равен 4 (4 ключа, 5 указателей).
20
10
6,8
1,2,3
8,9 6,7
30,40
13,20
22,27
33,36
47,52
10,11 13,14 20,21 22,23 24,25 27,28 30,31 33,34 36,37 40,43 47,49 52,55
Ответ:
1. Промежуточный узел 10 имеет только одно значение при минимально допустимых двух
(3 балла).
2. Промежуточный узел 13,20 имеет значение 20 равное корню – все значения в узлах слева
от корня должны быть меньше 20 (3 балла).
3. Листья 8,9 и 6,7 должны быть переставлены местами (2 балла).
4. Для листа 20,21 оба значения не меньше чем у корня (2 балла).
5. Для листа 22,23 оба значения не меньше минимального ключа родителя (2 балла).
Замечание. Ошибки, упомянутые в пунктах 2 и 4 могут быть исправлены заменой значения 20 в
корне на значение 22.
Задача 3 (10 баллов).
База данных использует вариант B-tree для поддержки сортированных таблиц. В этом варианте
листы дерева содержат не указатели, а сами записи. Лист может содержать столько записей,
сколько может вместить блок(с учетом указателя на следующий блок). Остальные узлы (нелисты) также имеют размер один блок и содержат столько ключей (и соответствующих
указателей) сколько может вместить блок. Предположим также:
1. Размер блока 4096 байт.
2. Каждая запись имеет длину 300 байт.
3. Указатель на блок 10 байт.
4. Указатель на запись 12 байт.
5. Длина ключа 8 байт.
6. Заполненность узлов - 85%. Например, если лист может содержать 100 записей, он будет
содержать только 85. Если не-лист может содержать 100 ключей, он будет содержать только 85.
(Для вычисления 85%, округляйте результат до ближайшего целого снизу)
7. Индексируемый файл имеет 1,000,000 записей.
Сколько блоков будет занимать такой индекс? (Не забудьте, что листья являются частью этого
индекса)
Ответ:
Каждый лист может содержать floor( (4096-10)/300 ) = 13 записей. Если стремиться к
заполненности 85%, в листе может храниться 11 записей. Число листьев будет
ceil( 1000000/11) = 90910. Для промежуточных узлов с n ключами и (n+1) указателем должно
выполняться 8*n +10*(n+1) <= 4096, или 18*n + 10 <=4096 , откуда
n =ceil( (4096-10)/18 ) *0.85 ~193. Следовательно, промежуточный блок будет хранить 194
указателя. Для адресации 90910 листьев потребуется сeil( 90910/194 ) = 469 первого
промежуточного уровня. Следующий уровень потребует еще 3 блока, которые будут потомками
одного корня. Итого 90910 + 469 + 3 + 1 = 91383 блока.
Задача 4 (15 баллов).
Рассматриваются хэш-индексы со следующими характеристиками:
1. Блок может вместить 50 пар значение/указатель. (Хэш-структура не содержит самих записей,
только указатели на них)
2. Индексируемый файл содержит 1000 записей.
3. Индексируемый файл может содержать дублированные ключи.
a) Для линейной схемы со средней заполненностью 50%, сколько блоков потребуется для ячеек
в худшем случае?
б) В случае а), каково наибольшее число операций I/O, которое может потребоваться для
получения нужной записи в памяти?
в) Для расширяемой схемы каков наихудший (наибольший) размер оглавления? Если размер
неограничен - обоснуйте.
г) Для расширяемой схемы каков наилучший (наименьший) размер оглавления?
Ответ:
а) Заполненность 50% означает, что, в среднем, на одну ячейку должно приходиться не более 25
пар значение/указатель, т.е. число ячеек в окончательной таблице будет 1000/25 = 40. В
наихудщем случае все 1000 записей будут иметь одно и тоже значение (или, более слабое
условие, значения 10 младших значащих битов, 210 = 1024) и попадут в одну и ту же ячейку с 19
блоками переполнения. Остальные 39 ячеек в этом случае будут пустыми.
Общее число блоков 40+19 = 59. (4 балла)
б) 20 – для чтения хэш таблицы (1 – для чтения первого блока ячейки плюс 19 блоков
переполнения) и 1 – для чтения записи, итого – 21 блок. (4 балла)
в) В наихудшем случае, когда все значения одинаковы, размер не ограничен (даже для 51
записи, если значения одинаковы их невозможно разделить на 2 блока). (3 балла)
г) Для расширяемой схемы минимальное число ячеек – 1000/50 = 20. Для их адресации
необходимо 32 элемента оглавления, 16-ти будет недостаточно. Размер оглавления является
степенью 2-ки. (4 балла)
Задача 5 (10 баллов).
Пункты а), б) и в) ссылаются на диск с фактической (форматированной) емкостью 8 Гигабайт
(233 байт). Диск имеет 16 поверхностей и 1024 дорожки. Скорость вращения 7200 об/мин.
Среднее время поиска (передвижения головок) 9мсек. Размер блока 8KB.
Для каждого из вопросов определите, достаточно ли информации для ответа. Если да – дайте
ответ, если нет – скажите, чего не хватает.
a) Какова емкость одной дорожки?
б) Предположим, что читается файл, занимающий ровно одну дорожку, и что дорожка может
читаться только начиная с определенной позиции. Сколько времени потребуется для
последовательного чтения всего файла?
в) Сколько времени требуется для чтения одного блока?
Ответ:
а) Поскольку диск имеет 16*1024 = 214 дорожек, то размер дорожки (в среднем) будет равен
233/214 = 219 байт= 521 Кбайт (3 балла)
б) Время одного оборота диска 60/7200 = 1/120 сек ~ 8.3 мсек. Время чтения состоит из времени
поиска (перемещения головок) – 9 мсек + среднее время задержки вращения 1000/240 мсек +
время чтения дорожки (включая чтение последнего промежутка, в сравнении с временем
чтения всей дорожки этим можно пренебречь) 1000/120 мсек = 9 + 3000/240 = 21.5 сек. (4 балла)
в) не достаточно информации – необходимо знать процент межблочных промежутков на
дорожке. (3 балла)
Задача 6 (15 баллов).
Рассмотрим отношение R(A,B) хранимое с использованием хэш-структуры. Хэш-таблица
содержит 1024 ячеек(блоков), и записи(кортежи) хранятся в этих блоках.
Для обращения к кортежу (A,B), мы применяем хэш-функцию h1 к атрибуту A, получая X бит.
Затем мы применяем хэш-функцию h2 к атрибуту b B, получая 10-X бит. Обе части сливаются,
образуя 10 битовое значение, определяющее блок, в котором хранится кортеж (A,B).
Предположим, что 20% запросов к R имеют вид Q1: SELECT * from R where A=a, и 80%
запросов имеют вид Q2: SELECT * from R where B=b, где a и b - константы.
a) К скольким блокам обращаются запросы Q1? К скольким блокам обращаются запросы Q2?
(ответ должен быть функцией от X.)
б) Получите выражение, дающее среднее ожидаемое число блоков, к которым обращаются
запросы.
в) Какое значение X минимизирует это ожидаемое значение количества операций IOs?
(Подсказка: Вспомните, что производная по z функции 2az+b есть a2az+b ln2.)
Ответ:
Download