Está en la página 1de 32

UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA

DEPARTAMENTO DE INFORMÁTICA
CAMPUS SANTIAGO

RECUPERACIÓN DE INFORMACIÓN
CERTAMEN 2: Estructuras Básicas de Archivos

Profesor: José Luis Martí L.


Ayudantes: Cinthia Muñoz M. - Pablo Serrano C.

Pregunta 1: (Archivos Secuenciales Ordenados - Algoritmos de Ordenamiento)


Considerar un archivo de 50.000 bloques y un disco que posee una latencia de 5 mseg, un
tiempo de seek de 10 mseg y con un tiempo de transferencia de 1 mseg por página. Ante la posibilidad
de realizar consultas que requieren los datos ordenados, se ha decidido optar por una estructura
secuencial ordenada. Sin embargo, no es posible realizar un ordenamiento en memoria principal de la
totalidad de los registros de este archivo, por lo que será necesario realizar un proceso de ordenamiento
y mezcla. ¿Cuánto de las siguientes alternativas de configuración permite reducir el tiempo total de
ordenamiento?:
i) Se utilizan 5 buffers de entrada de 4 bloques y 4 buffers de salida de 5 bloques.
R.: En cada paso del proceso de ordenamiento y mezcla se trabaja con las 50.000 páginas;
considerando los buffers de entrada se generan 50.000/4 = 12.500 particiones, lo que a su vez
significa que la cantidad de etapas necesaria para el ordenamiento y mezcla es de 1 +
log5(12.500) ~= 7, tomando en cuenta una etapa para el ordenamiento de las particiones y el
resto para su mezcla. Luego, el tiempo asociado a la entrada y salida de los datos es:

TENTRADA = 7 etapas * (10 mseg + 2,5 mseg + (1 mseg * 4) ) * (50.000 / 4) = 1.443 seg

TSALIDA = 7 etapas * (10 mseg + 2,5 mseg + (1 mseg * 5) ) * (50.000 / 5) = 1.225 seg

por lo que el tiempo asociado con el proceso total del ordenamiento es de 2.668 seg

ii) Se usan 8 buffers de entrada de 4 bloques y 2 buffer de salida de 6 bloques.


R.: En este caso el número de particiones se mantiene en 12.500, mientras que la cantidad de
etapas necesaria para el ordenamiento y mezcla baja a 1+ log8(12.500) ~= 6. Luego, el tiempo
asociado a la entrada y salida de los datos es:

TENTRADA = 6 etapas * (10 mseg + 2,5 mseg + (1 mseg * 4) ) * (50.000 / 4) = 1.237,5 seg

TSALIIDA = 6 etapas * (10 mseg + 2,5 mseg + (1 mseg * 6) ) * (50.000 / 6) = 925 seg

por lo que el tiempo asociado con el proceso total del ordenamiento es de 2.162,5 seg

Como conclusión se tiene a la segunda alternativa como la mejor opción, justificado porque
posee un buffer de salida de mayor tamaño, lo que implica ir menos veces al disco a escribir
datos.
(30 puntos)
Pregunta 2: (Archivos Secuenciales - Archivos de tipo Hashing Estático)
Considerar un archivo secuencial de 1.000 registros, cada uno de 200 bytes, almacenado sobre
un disco con bloques de 2 KB. Dados el aumento importante que ha tenido en el último tiempo, y que
el tipo de consulta más frecuente es sobre la clave primaria, se ha decidido reestructurarlo a un archivo
de tipo hashing estático.
Calcular el costo de esta operación, tomando en cuenta que cada archivo tiene asignado sólo un
buffer de memoria principal, y que solamente uno de cada 25 registros leidos del archivo secuencial es
guardado en el último bloque actualizado del archivo de tipo hashing.
Por simplicidad, las claves del archivo secuencial permiten que su distribución dentro del archivo
de tipo hashing no genere colisiones.
R.: Cálculos iniciales referentes al archivo de datos…

2.048 bytes/bloque
Factor de bloqueo del archivo de datos = ---------------------------- = 10 registros / bloque
200 bytes / registro

1.000 registros
Número de bloques ocupados por los datos = ------------------------------ = 100 bloques
10 registros / bloque

Al no tener más información se considerará que el archivo de tipo hashing estático ocupa
también 100 bloques.
Para realizar la reorganización, es preciso leer los bloques del archivo secuencial, y por cada uno
de ellos leer un bloque del segundo archivo; en principio, esto se traduce en la lectura de 1.000
bloques. En principio cada registro del archivo secuencial implica la lectura de un bucket del archivo
hashing y su correspondientes actualización (escritura) en el disco; sin embargo, uno de cada 25
registros reutiliza el último bloque leido (en ese momento, presente en el buffer de memoria
principal)…luego, 1000/25 = 40 bloques no son necesarios de leer.
Finalmente, el costo de la reorganización considera:
100 bloques a leer del archivo secuencial
(1000 - 40 =) 960 bloques a leer sobre el archivo de tipo hashing estático
1000 bloques a escribir del archivo de tipo hashing estático

Total: 2.060 bloques


(35 puntos)
Pregunta 3: (Archivos de tipo Árbol B)
Un archivo se encuentra organizado como un árbol B, de orden 3, con el siguiente contenido (por
limitaciones de espacio sólo se muestran las claves de los registros):

342 593

180 450 1472

125 287 367 467 658 1502


901

determinar el costo de responder las consultas:


• select * from archivo;
R.: Considerando que se tienen 3 buffers disponibles, cada uno de los nodos del árbol es leido
una sola vez; luego, el costo de la operación es de 10 bloques. Para el caso de tener 2 buffers
disponibles, la raíz tendrá que ser leida tres veces y no una, subiendo el total anterior a 12
bloques.

• select * from archivo where clave = 901;


R.: Ésta es una consulta directa sobre una clave única, usada para estructurar el árbol; de la
gráfica se sabe que está en el nivel hoja, de modo que el costo de ejecutarla es de 3 bloques.

• select * from archivo where clave < 450;


R.: Es preciso realizar un recorrido que considere la recuperación de la raíz, los dos primeros
nodos del nivel interno y las tres primeras hojas; considerando que se tienen 3 buffers
disponibles, el costo de la operación es de 6 bloques. Para el caso de tener 2 buffers
disponibles, la raíz tendrá que ser leida dos veces y no una, subiendo el total anterior a 7
bloques.

• select * from archivo where otra_clave = 467;


R.: Acá se pueden presenter dos escenarios:
• otra_clave es clave única: en promedio bastaría con recorrer la mitad del archivo;
considerando 3 buffers disponibles, el costo sería de 6 bloques.
• otra_clave no es clave única: es preciso recorrer el archivo completo, lo que se traduce
en que el costo de la operación sería de 10 bloques, sobre la base de 3 buffers
disponibles.

• select * from archivo group by clave;


R.: Se pide la salida agrupada por clave, pero dado que ésta es clave única, es equivalente a
entregar un resultado ordenado por la misma. Dado que al hacer un recorrido inorden del archivo
se obtiene dicho resultado sin necesidad de ordenar, basta con recuperar el archivo completo de
dicha forma, con un costo de 10 bloques (tomando en cuenta 3 buffers disponibles).
(35 puntos)

JLML/jlml.
260508.
Pregunta 4: (Archivos organizados como Árboles)
Considerar un archivo de vehículos con 10.000.000 registros, de 120 bytes cada uno, almacenado en un
disco con bloques de 4KB. Dados los requerimientos de los usuarios, se decide organizarlo como árbol B, en
base a la patente, con punteros a nodo de 4 bytes.
Después de un tiempo de haber creado el archivo, se estima que los nodos están llenos en un 73%.
Además, se sabe que la consulta más frecuente es aquélla del tipo:
select * from vehiculo where patente = ...;

Si dicha consulta se ejecutara 1.000 veces, ¿cuántas de éstas se responderían con


datos guardados en el nivel inmediatamente anterior a las hojas?. Suponer que las patentes se consultan
aleatoriamente.
R.: .: Si el árbol es de orden p, entonces existirán hasta p-1 registros de 120 bytes en cada nodo.
Luego, el orden p de un nodo es:
4p + 120(p-1) ≤ 4096
p ≤ 34

por lo que p = 34 es el valor más apropiado, para aprovechar al máximo la memoria. Al considerar un
promedio de 73% lleno, se tienen nodos con 25 punteros y 24 registros....

Número de Número de Número de Número Acumulado de


Nodos Punteros Registros Registros
Raíz 1 25 24 24
Primer Nivel 25 625 600 624
Segundo Nivel 625 15.625 15.000 15.624
Tercer Nivel 15.625 390.025 375.000 390.624
Cuarto Nivel 390.025 9.750.625 9.360.600 9.751.224

Luego, con respecto al total, en el penúltimo nivel se encuentran (375.000 / 9.751.224) ~= 3.8%, por lo
que de las 1.000 consultas, 38 de ellas se responderán en ese nivel.
(25 puntos)

JLML/jlml.
191006.
Pregunta 2: (Archivos Secuenciales)
Suponer que se tiene un archivo de 8.192.000 registros, cada uno de 50 bytes, que se quiere
ordenar en un computador que tiene 25 MB disponibles para buffers. Los bloques de disco tienen 2
KB, y el costo promedio de lectura o escritura de un bloque del disco es de 15 milisegundos.
• ¿Cuántas particiones de entrada se obtienen?. ¿Cuántos bloques tiene cada partición?.
R.:

2.048 bytes/bloque
Factor de bloqueo del archivo = ---------------------------- = 40 registros / bloque
50 bytes / registro

8.192.000 registros
Número de bloques ocupados por el archivo = ------------------------------ = 204.800 bloques
40 registros / bloque

25 * 220 bytes
Número de bloques que permiten los 25 MB de buffers = -----------------------------------
2 * 210 bytes / bloques

= 12.800 bloques

Luego, considerando los 204.800 bloques del archivo, se tiene que el total de particiones es de
204.800 / 12.800 = 16 particiones

• ¿Cuánto tiempo toma ordenar el archivo completo?. Justificar cada paso realizado.
R.: Existen formas de hacer la mezcla, usando diversos algoritmos vistos en clases. Por ejemplo,
si se aplica una 2-way balanceada, se requerirán 4 etapas, para pasar de 16 a 8, de 8 a 4, de 4 a 2, y
de 2 a 1 partición de datos (en este último caso, con todos los datos del archivo). En cada caso se
deben leer los 204.800 bloques del archivo, y escribirlos al disco nuevamente tras la mezcla.
Considerando que se aplica un ordenamiento interno a cada partición antes de empezar las mezclas,
se concluye que habrán 5 lecturas y 5 escrituras por cada bloque de datos, para obtener el archivo
completamente ordenado, a un costo de:

5 * 2 * 204.800 bloques * 15 milisegundos/bloque = 30.720.000 milisegundos


= 30.720 segundos = 512 minutos = 8 horas 32 minutos
(35 puntos)
Pregunta 3: (Archivos organizados como Árbol)
Un archivo se encuentra organizado como un árbol B, de orden 3, con el siguiente contenido (por
limitaciones de espacio sólo se muestran las claves de los registros):

342 593

180 450 1472

125 287 367 467 658 1502


901

determinar el costo de responder las consultas.


Justificar cada caso.

• select * from archivo;


R.: se necesitan todos los registros del archivo, los cuales se obtienen tras un recorrido
exhaustivo del mismo Æ costo: 10 bloques.

• select * from archivo where clave = 500;


R.: para determinar que el registro con dicha clave no existe, es preciso recorrer el árbol leyendo
un bloque de datos por nivel, hasta llegar a una hoja Æ costo: 3 bloques.

• select * from archivo where clave < 450;


R.: esta consulta usará un recorrido inorden, probablemente, para empezar desde el registro
con la clave más pequeña (125) y avanzar dentro del árbol hasta encontrar cubrir todos los que
cumplen la condición especificada Æ costo: 6 bloques.

• select * from archivo where otra_clave = 658;


R.: no se tiene mayor información sobre la unicidad del atributo referenciado, de modo que se
pueden presentar dos alternativas:
o si es clave única, basta con recorrer la mitad del archivo Æ costo: (1 + 10) ≈ 6 bloques.
o si no es clave única, se debe acceder el archivo completo Æ costo: 10 bloques.

• select * from archivo order by clave;


R.: se debe recorrer el archivo completo en inorden, pues de esa manera se obtienen los
registros ordenados en forma ascendente sobre la clave, como lo requiere la consulta Æ costo: 10
bloques.
(35 puntos)

JLML/jlml.
141004.
Pregunta 2:
a) Un archivo se organiza como hashing extendible, usando bloques de disco de 2 KB.
Actualmente, 1.000.000 registros, cada uno de 150 bytes, siendo la clave hashing de 12 bytes; en
promedio, ocupa el 77% de la capacidad de almacenamiento
Si el puntero a bloque de disco ocupa 8 bytes, responder con la justificación correspondiente:
• ¿Cuántos buckets de datos tiene el archivo?.
R.:
2.048 bytes/bloque
Factor de bloqueo del archivo = ---------------------------- = 13 registros / bloque
150 bytes / registro

Dado que el archivo está lleno en un 77%, entonces cada bucket de datos maneja 0.77 * 13 =
10 registros.

1.000.000 registros
Número de bloques ocupados por el archivo = ------------------------------ = 100.000 bloques
10 registros / bloque
(10 puntos)

• ¿Cuántos bloques de disco ocupa el directorio?.


R.: Los 100.000 buckets de datos deben direccionados por un cantidad potencia de dos de
17
punteros; este último corresponde a 131.072 = 2 punteros, lo cual significa que cada registro de
datos debe ser diseccionado usando los 17 bits más significativos (lo que no es problema para una
clave de 12 bytes). Luego, como cada puntero ocupa 8 bytes, se tiene:
17 3
( 2 * 2 ) bytes
Número de bloques ocupados por el archivo = ------------------------------ = 512 bloques
11
2 bytes / bloque
(10 puntos)

• A partir del cálculo anterior, ¿cuánto cuesta, en promedio, recuperar un registro del archivo,
dada su clave hashing?.
R.: En un hashing extensible el costo de recuperar un registro, a partir de la clave hashing,
siempre es de 2 bloques, uno del directorio (el que es accesado en forma directa) más uno de datos
(donde está el registro buscado).
(10 puntos)
b) Una radioemisora ha ido catalogando los estrenos que han ido apareciendo un número interno
de registro, según muestra la siguiente tabla.

Nombre del Tema Intérprete #Estreno


Crazy in Love Beyonce & Jay-Z 258
Frantic Metallica 593
Go to Sleep RadioHead 367
God puts a Smile upon your Face Coldplay 342
Here we Kum Molotov 287
Hollywood Madonna 125
Just Because Jane’s Adiction 880
Sálvame la vida Lucybell 1502
San Miguel Los Prisioneros 467
Show me How to Live AudioSlave 450
Re-Offender Travis 1472
White Flag Dido 901

Si el bloque de disco permitiera guardar hasta dos registros:


• ¿Cómo quedarían guardados los registros si el archivo se organizara como hashing estático,
usando como función hashing h(#estreno) = #estreno mod 10, y direccionamiento abierto
como técnica de resolución de colisiones?.
R.:
Nombre del Tema Intérprete #Estreno
0 Just Because Jane’s Adiction 880
Show me How to Live AudioSlave 450

1 White Flag Dido 901

2 God puts a Smile upon your Face Coldplay 342


Sálvame la vida Lucybell 1502

3 Frantic Metallica 593


Re-Offender Travis 1472

5 Hollywood Madonna 125

7 Go to Sleep RadioHead 367


Here we Kum Molotov 287

8 Crazy in Love Beyonce & Jay-Z 258


San Miguel Los Prisioneros 467

(15 puntos)
• ¿Cómo quedaría estructurado el archivo si fuese secuencial ordenado ascendentemente
sobre #estreno?.
R.:
Nombre del Tema Intérprete #Estreno
Hollywood Madonna 125
Crazy in Love Beyonce & Jay-Z 258

Here we Kum Molotov 287


God puts a Smile upon your Face Coldplay 342

Go to Sleep RadioHead 367


Show me How to Live AudioSlave 450

San Miguel Los Prisioneros 467


Frantic Metallica 593

Just Because Jane’s Adiction 880


White Flag Dido 901

Re-Offender Travis 1472


Sálvame la vida Lucybell 1502
(10 puntos)

• A partir de los dos resultados anteriores, y considerando por separado las siguientes
consultas, indicar para cada caso (y con la justificación correspondiente), cuál es la
estructura de archivo que presenta menor tiempo de respuesta.
• select min(#estreno) from archivo;
R.:
Archivo hashing estático: se debe recorrer el archivo completo: 10 bloques.
Archivo secuencial: dado que está ordenado ascendentemente, basta con leer el primer
bloque: 1 bloque.
Luego, conviene el archivo secuencial.

• select * from archivo where #estreno = …;


R.:
Archivo hashing estático: dado que 10 registros se recuperan con la lectura de un bloque y
2 registros con la lectura de dos bloques, se tiene que el costo promedio es de (10 * 1 + 2 * 2)
/ 12 ~ 1.2 bloques.
Archivo secuencial: se puede hacer una búsqueda lineal con un costo promedio de: (1+ 6)
/ 2 ~ 4 bloques; o bien una búsqueda binaria con un costo de log2(6) ≈ 3 bloques.

Luego, no importando el acceso a archivo secuencial, de todas formas conviene usar el


archivo hashing.

• select * from archivo where Nombre_del_Tema like ‘%o%’;


R.:
Archivo hashing estático: se debe recorrer el archivo completo: 10 bloques.
Archivo secuencial: se debe recorrer el archivo completo: 6 bloques.

Luego, conviene el archivo secuencial.


(15 puntos)

JLML/jlml.
171003.
Pregunta 2:
a) Dentro de las optimizaciones que se han hecho a los algoritmos de ordenamiento externo,
dependiendo de la capacidad de almacenamiento que tengan los buffers de la memoria principal, es
posible que en lugar de realizar una mezcla de a pares (como lo hace por ejemplo la mezcla 2-way
balanceada vista en clases), se realice una gran y única fase de mezcla, tomando el primer bloque de
cada una de las particiones de datos ya ordenadas, y en la medida de que se vayan consumiendo, se
cargue el segundo, tercer….n-ésimo bloques de cada partición. Para esto se considera como
partición todo el conjunto de datos que quepa de una sola vez en la memoria principal.
Suponer que se tiene un archivo de 10.000.000 registros, cada uno de 100 bytes, que se quiere
ordenar en un computador que tiene 50 MB disponibles para buffers. Los bloques de disco tienen 4
KB, y el costo promedio de lectura o escritura de un bloque del disco es de 15 milisegundos.
• ¿Cuántas particiones de entrada se obtienen?
R.:
4.096 bytes/bloque
Factor de bloqueo del archivo = ---------------------------- = 40 registros / bloque
100 bytes / registro

10.000.000 registros
Número de bloques ocupados por el archivo = ------------------------------ = 250.000 bloques
40 registros / bloque
20
50 * 2 bytes
Número de bloques que permiten los 50 MB de buffers = -----------------------------------
10
4 * 2 bytes / bloques

= 12.800 bloques

Luego, considerando los 250.000 bloques del archivo, se tiene que el total de particiones es de
250.000 / 12.800 ≈ 20 particiones

• ¿Cuánto tiempo toma ordenar el archivo completo?.


R.:
Para la etapa de ordenamiento (interno) de cada partición, independiente del número de
particiones, siempre se leen todos los bloques del archivo una vez y luego, todos se regresan al
disco. Lo mismo se repite para la mezcla de las particiones, las que van siguiendo accesadas
linealmente, por lo que nuevamente se lee una sola vez cada bloque, y regresados al disco con el
resultado final.
Lo anterior se resume que en cada bloque se lee dos veces y se escribe al disco dos veces,
por lo que el costo total es de (15 milisegundos / bloque) * 4 * 250.000 bloques = 250 minutos = 4
horas, 10 minutos.
(30 puntos)
b) El DJ de una radioemisora debe catalogar los estrenos musicales recibidos en las últimas
semanas; para esto, usa un número interno de registro según muestra la siguiente tabla.

Nombre del Tema Intérprete #Estreno


Crazy in Love Beyonce & Jay-Z 658
Frantic Metallica 593
Go to Sleep RadioHead 367
God puts a Smile upon your Face Coldplay 342
Here we Kum Molotov 287
Hollywood Madonna 125
Just Because Jane’s Adiction 180
Sálvame la vida Lucybell 1502
San Miguel Los Prisioneros 467
Show me How to Live AudioSlave 450
Re-Offender Travis 1472
White Flag Dido 901

• ¿Cómo quedarían guardados los registros si el archivo se organizara como secuencial


ordenado en base a #estreno, suponiendo un factor de bloqueo igual a 3?.
R.:

Nombre del Tema Intérprete #Estreno


Hollywood Madonna 125
Just Because Jane’s Adiction 180
Here we Kum Molotov 287

God puts a Smile upon your Face Coldplay 342


Go to Sleep RadioHead 367
Show me How to Live AudioSlave 450

San Miguel Los Prisioneros 467


Frantic Metallica 593
Crazy in Love Beyonce & Jay-Z 658

White Flag Dido 901


Re-Offender Travis 1472
Sálvame la vida Lucybell 1502
(10 puntos)

• Siempre en base al número de estreno, ¿cómo quedaría estructurado el archivo si fuese un


árbol B de orden 3?.
R.: Por limitación del espacio sólo se muestran las claves del archivo resultante, aunque se
subentiende que éstas son, realmente, el registro completo.

342 593

180 450 1472

125 287 367 467 658 1502


901

(15 puntos)
• A partir de los dos resultados anteriores, y considerando por separado las siguientes
consultas, indicar para cada caso (y con la justificación correspondiente), cuál es la
estructura de archivo que presenta menor tiempo de respuesta.
• select max(#estreno) from archivo;
R.: (la respuesta para esta pregunta es válida considerando una o las dos formas de recorrer
el archivo secuencial…)
Archivo Secuencial Æ búsqueda lineal, desde el comienzo del archivo hasta alcanzar el
último bloque: 4 bloques.
Archivo Secuencial Æ búsqueda binaria, para leer el último bloque: log2(4) = 2 bloques.
Archivo de tipo árbol B Æ lectura del bloque más a la derecha, partiendo de la raíz: 3
bloques.

Luego, conviene el archivo de tipo árbol, si se compara con la búsqueda lineal;


de lo contrario convendrá la búsqueda binaria.

• select * from archivo where #estreno = …;


R.:
Archivo Secuencial Æ costo promedio = (1 + 4) / 2 = 2.5 bloques.
Archivo de tipo árbol B Æ costo promedio = (2 * 1 + 3 * 2 + 7 * 3) / 12 ≈: 2.4 bloques.

Luego, cualquiera de los dos archivos conviene.

• select * from archivo order by #estreno;


R.:
Archivo Secuencial Æ lectura del archivo completo, ya ordenado: 4 bloques.
Archivo de tipo árbol B Æ lectura del archivo completo, ya ordenado: 10 bloques.

Luego, conviene el archivo secuencial.

(15 puntos)

Tiempo: 120 minutos.

JLML/jlml.
081003.
Pregunta 2:
Cierto archivo de empleados guarda los siguientes datos.

Número de Rifa Nombre del Alumno Teléfono


9 Juan Pérez 947775
18 Carlos González 404657
7 María Escobar 975844
12 Franco Ramírez 403434
25 Carolina Orellana 427659
3 Jorge Vásquez 918374
10 José Verbal 903464
11 Mauricio Yáñez 406376
2 María Teresa Martínez 917646
17 Luis Reinoso 927548
6 Erik Baier 538942
14 Marcos Jara 974556

a) Si el archivo se estructura usando hashing estático, con 4 buckets con capacidad para dos
registros cada uno, y utilizando encadenamiento enlazado, aplicando como función hashing: h(clave) =
clave mod 4. ¿Cómo quedaría organizado el archivo?

0 12 Franco Ramírez …

1 9 Juan Pérez … 17 Luis Reinoso …


25 Carolina Orellana …

2 18 Carlos González … 2 María Teresa M. … 14 Marcos Jara …


10 José Verbal … 6 Erik Baier …

3 7 María Escobar … 11 Mauricio Yáñez …


3 Jorge Vásquez …
(15 puntos)

b) El mismo archivo se estructurara usando la técnica de hashing dinámico, usando buckets con
capacidad para tres registros. ¿Cómo quedaría organizado el archivo?
R.: La inserción de los tres primeros registros no requiere más de un bucket, por lo que el archivo
hasta ese momento, se vería como sigue:
9 Juan Pérez 947775
18 Carlos González 404657
7 María Escobar 975844

Al insertar el registro con clave 12, se produce la primera colisión, por lo que el archivo se vería
así, tras su reorganización:
9 Juan Pérez 947775
7 María Escobar 975844
0
12 Franco Ramírez 403434
1
18 Carlos González 404657
La inserción del registro con clave 25 se inserta en segundo bucket, sin problemas.

18 Carlos González 404657


25 Carolina Orellana 427659

Colisión se produce al insertar el registro con clave 3, de modo que su reorganización deja al
archivo de la siguiente forma.
7 María Escobar 975844
0 3 Jorge Vásquez 918374

1
0 9 Juan Pérez 947775
12 Franco Ramírez 403434
1
18 Carlos González 404657
25 Carolina Orellana 427659

Sin problemas de colisión se inserta el registro de clave 10 en el segundo bucket.

9 Juan Pérez 947775


12 Franco Ramírez 403434
10 José Verbal 903464

Colisión se produce al insertar el registro con clave 11, por lo que el archivo debe reorganizarse
nuevamente, quedando como sigue:

7 María Escobar 975844


3 Jorge Vásquez 918374

0
9 Juan Pérez 947775
0 0 10 José Verbal 903464
1
11 Mauricio Yáñez 406376
1
1 12 Franco Ramírez 403434

18 Carlos González 404657


25 Carolina Orellana 427659

Sin problemas de colisión se insertan los registros con claves 2 y 17 en los buckets correspon-
dientes:

7 María Escobar 975844 18 Carlos González 404657


3 Jorge Vásquez 918374 25 Carolina Orellana 427659
2 María Teresa M. 917646 17 Luis Reinoso 927548
Una nueva colisión se presenta con la inserción del registro con clave 6:

3 Jorge Vásquez 918374


0 2 María Teresa M. 917646

1
0 7 María Escobar 975844
6 Erik Baier 538942

1
9 Juan Pérez 947775
0 0 10 José Verbal 903464
11 Mauricio Yáñez 406376
1
1 12 Franco Ramírez 403434
14 Marcos Jara 974556

18 Carlos González 404657


25 Carolina Orellana 427659
17 Luis Reinoso 927548

Finalmente, sin problemas de colisión se inserta el registro de clave 14 en el cuarto bucket, el


cual se incluye en la estructura anterior con letra cursiva, para señalar que su inserción es posterior a la
reorganización del archivo a causa de la inserción del registro con clave 6.
(24 puntos)

c) Al comparar las dos organizaciones finales del archivo, obtenidas a partir de las dos técnicas
hashing aplicadas, ¿cuál es más conveniente en términos del costo promedio de recuperación de un
registro del archivo final? ¿Por qué?.
R.: Para el hashing estático:
7 registros, recuperados con 1 acceso al disco (claves: 12, 9, 25, 18, 10, 7, 3)
4 registros, recuperados con 2 accesos al disco (claves: 17, 2, 6, 11)
1 registro, recuperado con 3 accesos al disco (claves: 14)
por lo que el costo promedio de recuperar un registro es de (7 * 1 + 4 * 2 + 1 * 3) / 12 = 1,5
accesos al disco.

Para el hashing dinámico, se tienen 2 accesos al disco, uno para recuperar el directorio (que
en este caso debiera caber en un solo bloque) y otro para el bucket que contiene el datos
buscado. En esta situación, conviene más la técnica anterior.
Diferente es el caso de tener residente el directorio en la RAM, porque ya no habría que
leerlo desde el disco para recuperar un registro, por lo que el costo ahora sólo sería de 1 acceso,
lo que convierte a esta segunda técnica la más adecuada.
(6 puntos)
Pregunta 3: (Archivos organizados como Árboles)
Considerar un disco duro con bloques físicos de 8 KB y punteros a bloques de disco de 8 bytes,
en el que se desea almacenar un archivo de 24.000.000 registros, cada uno de 200 bytes. Si el archivo
se estructura como un árbol B:
a) ¿Cuál es el orden del árbol?
R.:
8 * p + 200 * (p – 1) ≤ 8.192
8 * p + 200 * p – 200 ≤ 8.192
208 * p – 200 ≤ 8.192
208 * p ≤ 8.392
p ≤ 8.392 / 208 = 40.34
p = 40

b) ¿De cuántos niveles se compone el archivo, si cada nodo del archivo estuviera lleno, en
promedio, en un 75%?
R.: Dado que p = 40, entonces 0.75 p = 30. Luego, para guardar 24 millones de registros, se
necesitan…

Número de Número de Número Número de


Nodos Registros en Acumulado de Punteros
este Nivel Registros
Raíz 1 29 29 30
Nivel 2 30 870 899 900
Nivel 3 900 26.100 26.999 27.000
Nivel 4 27.000 783.000 810.927 810.000
Nivel 5 810.000 23.490.000 24.300.927 ---

c) Si cada acceso a un bloque del disco tarda 13 milisegundos, ¿cuánto es el tiempo máximo y el
tiempo mínimo que se incurre en determinar que un registro sí se encuentra en el archivo? y ¿cuánto
es el tiempo máximo y el tiempo mínimo que se incurre en determinar que un registro no se encuentra
en el archivo?
R.:
Para determinar que sí se encuentra:
- Tiempo Mínimo: el dato está en el nodo raíz, luego se necesita 1 bloque del disco, con un
costo de 13 milisegundos para la operación.
- Tiempo Máximo: el dato está en el último nivel, luego se necesitan 5 bloques del disco, con
un costo de 65 milisegundos para la operación.

Para determinar que no se encuentra: en ambos casos, se debe llegar al último nivel del árbol,
por lo que el costo de la operación es de 65 milisegundos.
(24 puntos)

JLML/jlml.
251002.
Pregunta 2: (Archivos Secuenciales – Archivos organizados como Árboles B)
a) Considerar un archivo de 25.000 páginas y un disco que posee una latencia de 5 mseg, un
tiempo de seek de 10 mseg y con un tiempo de transferencia de 1 mseg por página. Ante la
posibilidad de realizar consultas que requieren los datos ordenados, se ha decidido optar por una
estructura secuencial ordenada. Sin embargo, no es posible realizar un ordenamiento en memoria
principal de la totalidad de los registros de este archivo.
Se sabe que se cuenta con un espacio equivalente a 32 páginas en memoria principal (buffer)
para tal operación; ante esta situación será necesario realizar un proceso de ordenamiento y mezcla.
¿Cuánto tiempo requiere tal operación si:
i) Se utilizan 4 buffers de entrada de 4 páginas y 4 buffers de salida de 4 páginas.
R.: En cada paso del proceso de ordenamiento y mezcla se trabaja con las 25.000 páginas;
considerando los buffers de entrada se generan 25.000/4 = 6.250 particiones, lo que a su vez
significa que la cantidad de etapas necesaria para el ordenamiento y mezcla es de log4(6.250) =
6,304 ~= 7. Luego, el tiempo asociado a la entrada y salida de los datos es:

TENTRADA = 7 etapas * (10 mseg + 2,5 mseg + (1 mseg * 4) ) * (25.000 / 4) = 721,875 seg

TSALIDA = 7 etapas * (10 mseg + 2,5 mseg + (1 mseg * 4) ) * (25.000 / 4) = 721,875 seg

por lo que el tiempo asociado con el proceso total del ordenamiento es:

TTOTAL = 721,875 seg + 721,875 seg = 1.443,75 seg

ii) Se usan 10 buffers de entrada de 2 páginas y 1 buffer de salida de 12 páginas.


R.: En este caso el número de particiones cambia a 25.000/2 = 12.500 particiones, lo que a su
vez significa que la cantidad de etapas necesaria para el ordenamiento y mezcla es de
log10(12.500) = 4,096 ~= 4. Luego, el tiempo asociado a la entrada y salida de los datos es:

TENTRADA = 4 etapas * (10 mseg + 2,5 mseg + (1 mseg * 2) ) * (25.000 / 2) = 725 seg

TSALIIDA = 4 etapas * (10 mseg + 2,5 mseg + (1 mseg * 12) ) * (25.000 / 12) = 204,166 seg

por lo que el tiempo asociado con el proceso total del ordenamiento es:

TTOTAL = 725 seg + 204,166 seg = 929,166 seg

Como conclusión se tiene la segunda opción mejora en casi un 35% el tiempo de respuesta
de la opción uno, justificado porque posee un buffer de salida de mayor tamaño, lo que implica ir
menos veces al disco a escribir datos.

b) Considerar un archivo de 1.000.000 de registros, de 100 bytes cada uno, almacenado en un


disco de 7200 rpm, un tiempo de seek de 8.9 mseg, una velocidad de transferencia de 100 MB/seg y
bloques de 4KB. Si se decide una organización para los registros basada en árbol B, con punteros a
nodo de 2 bytes:
i) ¿Cuál es el tiempo máximo de recuperación de un registro?.
R.: Si el árbol es de orden p, entonces existirán hasta p-1 registros de 100 bytes en cada nodo.
Luego, el orden p de un nodo es:
2p + 100(p-1) ≤ 4096
p ≤ 41.137255

por lo que p = 41 es el valor más apropiado, para aprovechar al máximo la memoria.


Si se determina que la cantidad necesaria de niveles del árbol para almacenar 1000000 de
registros tendremos la cantidad máxima de accesos a disco que se necesitan para recuperar un
registro.

Número de Número de Número Acumulado de Número de


Nodos Registros Registros Punteros
Raíz 1 40 40 41
Primer Nivel 41 1.640 1.680 1.681
Segundo Nivel 1.681 67.240 68.920 68.921
Tercer Nivel 68.921 2.756.840 2.825.760 2.825.761

por lo que con cuatro niveles es suficiente. Luego, considerando que:


• el tiempo de latencia media es de 4.16 mseg, obtenido de la velocidad de rotación del disco
de 7200 rpm
• el tiempo de transferencia de un bloque de 4 KB es de 0,0931 mseg, obtenido a partir de la
velocidad de transferencia de 100 MB/seg

se obtiene, entonces, que:


T = 4 * (8.9 mseg + 4.16 mseg + 0,0391 mseg) = 52.3964 mseg

ii) ¿Cuál sería la diferencia, en cuanto a tiempo de respuesta, considerando una organización
basada en hashing dinámico?.
R.: (Por simplicidad se corrigió según el siguiente criterio) Por lo general, el costo de
recuperar un registro usando una organización basada en hashing dinámica es igual (o cercana) a 2
bloques; luego, el tiempo de respuesta asociado es la mitad del tiempo calculado en la pregunta
anterior, es decir:

T = 2 * (8.9 mseg + 4.16 mseg + 0,0391 mseg) = 26.1982 mseg


(40 puntos)

Pregunta 3: (Criterios para la Selección de la Estructura de un Archivo)


Para apoyar la operación de una empresa, se cuenta con un archivo de clientes, el cual se definió
de la siguiente forma:

create table cliente


( RUT char(9),
razonSocial varchar(30),
direccion varchar(30),
telefono varchar(10),
primeraCompra date,
montoComprado numeric(8)
);

i) Si el DBA decide estructurarlo como un archivo hashing, ¿cuál podría ser la razón?.
R.: Dado que un archivo hashing está pensado para búsquedas directas sobre claves
únicas, es probable que la razón sea tener una importante cantidad de consultas directas
sobre el RUT o la razón social, del tipo select ... from cliente where rut = ...;

ii) Si se guarda como un archivo secuencial ordenado sobre la razón social, ¿qué podría pasar
con la volatilidad del archivo que justifica esta decisión?.
R.: Lo más probable que la volatilidad sea baja, por lo que el costo de mantener ordenado el
archivo no sea relevante para el sistema, en compensación a los ahorros que se tendría con
las búsquedas binarias que se hagan para responder las consultas.
iii) Dado el constante y continuo aumento en el número de clientes, ¿qué debería determinar el
DBA para estructurar los datos del archivo?. Hacer uso de otro criterio para la justificación.
R.: No conviene un archivo secuencial ordenado por el costo de mantenerlo ordenado, ni un
hashing estático por el número fijo de bloques asignados. Si se considera otro criterio como:
• Mayor parte de las consultas directas, sobre clave única  archivo hashing con
expansión dinámica, o bien un árbol B (en especial si los registros son de pequeño
tamaño).
• Mayor parte de las consultas directas, sobre clave no única  archivo secuencial
desordenado.

iv) Considerando que se organiza en base al RUT, ¿qué tipo de consultas lo justifican? ¿y cuáles
son?. En ambos casos, dar un ejemplo.
R.: El tipo de consultas que tiene al RUT como atributo de acceso al archivo, en particular
las que lo accedan de forma directa (where RUT = ...), porque el procesamiento de la
operación no implicaría un recorrido lineal (sería binario en un archivo de tipo árbol B, directo
en un archivo hashing).
También podría deberse a la necesidad de generar listados ordenados en base al RUT, y
que al tener los datos organizados como un archivo secuencial ordenado sobre dicho
atributo, el costo de emitirlo es el mínimo.
(30 puntos)

JLML-WPM/.
111005.
Pregunta 2: (Estructuras Básicas de Archivos)
La radio Pop and Rock tiene catalogado los estrenos musicales en un archivo secuencial, con un
factor de bloqueo igual a 2, con el siguiente contenido.

Nombre del Tema Intérprete #Estreno


Feel Good Inc. Gorillaz 180
Believe The Chemical Brothers 1502
Lift me Up Moby 467
Speed of Sound Coldplay 450
Prendan la Radio Tronic 1472
Esperanzas Lucybell 901
Be Yourself AudioSlave 593
Don’t funk’d with my Heart Black Eyes Peas 342
Somebody Told me The Killers 287
The Last Time Keane 125

El DBA piensa en cambiar la estructura del archivo, teniendo en mente dos posibilidades:
• Hashing Estático, con buckets con capacidad para tres registros, y la función hashing
h(clave) = clave % 5; la técnica de resolución de colisiones es encadenamiento enlazado.
• Árbol B, de orden 3.

a) ¿Cuál es la reorganización que ocupa menos tiempo?, si se considera que se tiene sólo un
buffer disponible para todo el trabajo.
R.: Al insertar los registros de acuerdo al orden planteado en la tabla anterior, el resultado final
obtenido es el siguiente.

467
Lift me Up
Moby

180 342 1472


Feel Good Inc. Don’t funk’d with my Heart Prendan la Radio
Gorillaz Black Eyes Peas Tronic

125 287 450 593 901 1502


The Somebody Speed of Be Yourself Esperanzas Believe
Last Told me Sound AudioSlave Lucybell The
Time The Killers Coldplay Chemical
Keane Brothers

Los costos asociados a su construcción son:


• Los bloques del archivo secuencial a leer son los mismos para los dos reorganizaciones
planteadas, de modo que no serán consideradas en la comparación.
• Para el cálculo del costo de la reorganización:
o La inserción de las dos primeras claves no implica ningún operación de E/S, sólo se
usa el buffer en la memoria principal
o Para insertar el registro con clave 467, dado el overflow, se generan tres nodos, dos
de los cuales se deben ir al disco, y uno queda en la memoria principal; supuesto: la
raíz Æ 2 escrituras
o Al insertar el registro con clave 450, la comparación con la clave en la raíz determina
que se debe recuperar el nodo izquierdo desde el disco, y actualizando sobre éste el
nodo raíz que no había sido salvado anteriormente Æ 1 lectura, 1 escritura
o Al insertar el registro con clave 1472, se debe salvar en disco el bloque con las
claves 180/450, y leer el nodo raíz para determinar que se debe recuperar su hijo
derecho Æ 2 lecturas, 1 escritura
o Al insertar el registro con clave 901, se debe volver a leer la raíz, y luego accesar su
derecho (previo, haber guardo en disco el bloque con claves 1472/1502); como hay
colisión, se generan dos nuevos nodos, los que son guardados en el disco con los
cambios, junto con el bloque en overflow. Por último, se debe volver a leer la raíz
para actualizar su contenido Æ 3 lecturas, 4 escrituras
o Al insertar el registro con clave 593, se debe guardar la raíz, para llevar en su lugar a
la memoria principal el nodo hoja donde se hará su inserción Æ 1 lectura, 1 escritura
o Al insertar el registro con clave 342, se debe salvar el nodo hoja que está en
memoria, leer la raíz, y leer su hijo más izquierdo; como habrá colisión, se generan
dos nuevos nodos que serán llevados al disco al igual que el nodo de la colisión con
su nuevo contenido. Dado que la raíz también entra en overflow, tendrá que ser leída
nuevamente, y en su reorganización quedará como nodo intermedio (sólo con la
clave 1472), y llevada al disco, y como raíz se tendrá un nodo con la clave 467, por
ahora en la memoria Æ 3 lecturas, 5 escrituras
o Al insertar el registro con clave 287, con el nodo raíz en memoria se determina que
se debe recuperar su hijo izquierdo (llevando al disco a la raíz), y con este llega al
nodo con la clave 180, donde se hace la inserción Æ 2 lecturas, 1 escritura
o Al insertar el registro con clave 125, se debe llevar al disco el nodo en memoria,
recuperar la raíz, su hijo izquierdo, y el hijo izquierdo de este último también,
identificando una colisión. Este se resuelve con la aparición de un nuevo hermano
(con clave 287) que se lleva al disco, al igual que el nodo con la colisión que queda
(que queda con clave 125), y la lectura y actualización del padre de ambos que
guardará las claves 180 y 342. Por ser la última operación, también se llevará al
disco Æ 4 lecturas, 4 escrituras

Costo de la Reorganización: 16 lecturas, 16 escrituras Æ 32 bloques

En cuanto al archivo de tipo hashing estático, éste queda de la siguiente manera.

Feel Good Inc. Gorillaz 180


0
Speed of Sound Coldplay 450
The Last Time Keane 125

1 Esperanzas Lucybell 901

Believe The Chemical Brothers 1502


2 Lift me Up Moby 467
Prendan la Radio Tronic 1472

Be Yourself AudioSlave 593


3

Don’t funk’d with my Heart Black Eyes Peas 342


Somebody Told me The Killers 287
Para este archivo, las lecturas y escrituras de bloques son:

Clave Bucket Bucket Lectura Escritura Operaciones


Requerido en Memoria del al Disco de E/S
Bloque… del
bloque…
180 0 --- 0 --- 1
1502 2 0 2 0 2
467 2 2 --- --- ---
450 0 2 0 2 2
1472 2 0 2 0 2
901 1 2 1 2 2
593 3 1 3 1 2
342 2 3 2 3 3
2
287 2 Overflow --- --- ---
125 0 Overflow 0 Overflow 2

Costo de la Reorganización: 16 bloques

Luego, la reorganización más barata es la del archivo hashing estático.

b) ¿Cuál es la reorganización que consume menos espacio en disco, una vez construido el
nuevo archivo final?.
R.: De las figuras anteriores se concluye que el archivo de tipos hashing estático ocupa menos
bloques de disco, sólo 6 en comparación a los 8 que ocupa el archivo de tipo árbol B.

c) Considerando las tres organizaciones del archivo, ¿cuál responder de mejor manera las
consultas:
• select * from archivo;
• select * from archivo where #estreno = …;
R.: Sobre la base de tener sólo un buffer…para la primera consulta, las alternativas son:
• Archivo Secuencial: el costo es de 5 bloques, pues se deben recorrer linealmente el
archivo completo.
• Archivo de tipo Hashing Estático: un costo de 6 bloques, por la misma razón anterior.
• Archivo de tipo Árbol B: el costo es de 12 bloques, pues debe leer una vez cada nodo
hoja, cada nodo intermedio una vez por cada hijo y dos veces la raíz.

En cuanto a la segunda consulta, las alternativas son:


• Archivo Secuencial: el costo es de (1+5)/2 = 3 bloques, pues se deben recorrer
linealmente, en promedio, la mitad del archivo por ser #estreno una clave única.
• Archivo de tipo Hashing Estático: el costo es de (8 * 1 + 2 * 2) / 10 = 1.2 bloques.
• Archivo de tipo Árbol B: el costo es de (1 * 1 + 3 * 2 + 6 * 3)/10 = 2.5 bloques.

Luego, al considerar que ambas son consultas tienen la misma frecuencia de ejecución, se
desprende que el mejor caso es el archivo de tipo hashing estático, pues tiene el mejor
promedio de los dos costos calculados.
(70 puntos)

JLML/jlml.
020605.
Puntaje Pregunta 2

a) Construcción del Archivo como Hashing Estático: 15 puntos


b) Construcción del Archivo como Árbol B: 15 puntos
c) (Menor) Costo de la Reorganización: 10 puntos (5 c/u)
d) Costo del Espacio de Almacenamiento: 10 puntos
e) Costo del Procesamiento de Consulta: 20 puntos (9 cada costo, 2 respuesta final)
Pregunta 2: (Estructuras Básicas de Archivos)
a) Considerar un archivo secuencial desordenado, con 120.000 registros, cada uno de 200 bytes.
El tamaño del bloque es de 2 KB, el tiempo de seek de 16 mseg, la latencia rotacional media igual a
8.3 mseg y el tiempo de transferencia de un bloque de 0.8 mseg. Si de ahora en adelante, por cada 2
registros que se añaden hay uno que se borra, hasta que el total de registros activos sea 240.000:

¿Cuántas transferencias de bloques se necesitan para reorganizar el archivo?.


R.: Por ser un archivo secuencial desordenado, las inserciones son al final del archivo, mientras
que las eliminaciones son aleatoriamente realizadas dentro del archivo de tipo lógico, lo que se
desprende de la necesidad de la reorganización, cuyo objetivo es eliminar las entradas libres que
se van generando entre medio de los datos, las que generan un costo mayor en espacio en disco
y de transferencias de datos, preciso de eliminar.

Para alcanzar los 240.000 registros activos, a partir de los 120.000 iniciales, es preciso que
se ingresen 240.000 registros nuevos, a los que se asocian 120.000 registros eliminados, dada la
condición de que por cada 2 registros añadido hay uno que se borra. Así, al momento de la
reorganización se tendrán 360.000 entradas asignadas al archivo, 240.000 con registros activos
y 120.000 vacías debido a registros eliminados. A partir del factor de bloqueo del archivo:

2.048 bytes / bloque


fb = ---------------------------- = 10 registros / bloque
200 bytes/ registro

se sabe que el archivo tiene:

360.000 registros
b = ---------------------------- = 36.000 bloques
10 registros / bloque

Para la reorganización se necesita leer una sola vez cada bloque desde el disco, eliminando sus
entradas inactivas al llenarlas con registros del siguiente bloque de datos. Luego, se tienen 36.000
bloques leidos. Al reorganizar, se tendrán 240.000 registros, los que ocuparán un total de 24.000
bloques, los que serán escritos al disco una sola vez.

Finalmente, el número de bloques transferidos para la reorganización es de 60.000 bloques.

¿Cuánto tarda encontrar un registro justo antes de la reorganización?.


R.: Para hallar un registro específico, en promedio, se debe recorrer la mitad del archivo, por lo
que el costo de encontrarlo es de:

(36.000 / 2) * (16 + 8.3 + 0.8) = 451.800 mseg ≈ 7.5 minutos

¿Cuánto tarda encontrar un registro justo después de la reorganización?.


R.: Para hallar un registro específico, en promedio, también se debe recorrer la mitad del archivo,
por lo que el costo de encontrarlo es de:

(24.000 / 2) * (16 + 8.3 + 0.8) = 301.200 mseg ≈ 5 minutos

(35 puntos)
b) Un archivo de productos tiene registros cuya clave primaria es el código del producto. Si este
archivo se organiza usando hashing lineal, donde cada bucket puede guardar hasta dos registros:
Mostrar cómo quedan guardados los registros, si éstos son:

#Producto Nombre Valor #Producto Nombre Valor


Producto Producto
29 Fideos 380 16 Queso 1.800
30 Cereal 1.200 23 Jugo 700
42 Leche en Polvo 1.800 18 Pan Integral 900
7 Azúcar 400 25 Café en Polvo 3.000
59 Pack de Yoghurt 1.000 37 Mantequilla 250

R.:
Inserción de los registros con claves 29 y 30:
0
29
30

Inserción del registro con clave 42:


0 1
30 29
42

Inserción del registro con clave 7:


0 1
30 29
42 7

Inserción del registro con clave 59:

0 1 2
29 30
7 42

59

Inserción del registro con clave 16:

0 1 2
16 29 30
7 42

59
Inserción de los registros con claves 23:
0 1 2 3
16 29 30 7
42 59

23

Inserción del registro con clave 18:


0 1 2 3 4
16 29 30 7
42 59

18 23

Inserción del registro con clave 25:


0 1 2 3 4
16 29 30 7
25 42 59

18 23

Inserción del registro con clave 37:


0 1 2 3 4 5
16 25 30 7 29
42 59 37

18 23

quedando finalmente como:


0 1 2 3 4 5
16 25 30 7 29
Queso Café en Cereal Azúcar Fideos
1.800 Polvo 1.200 400 380
3.000
42 59 37
Leche en Pack de Mantequilla
Polvo Yoghurt 250
1.800 1.000

18 23
Pan Integral Jugo
800 700
A partir de la respuesta anterior, ¿cuánto cuesta responder las siguientes consultas:
o select * from archivo;
R.: Dado que se requiere recorrer linealmente todo el archivo, el costo es de 8 bloques.

o select count(*) from archivo;


R.: Ídem que el caso anterior, por lo que el costo es de 8 bloques.

o select * from archivo where clave = …;


R.: Existen 8 registros que se recuperan con la lectura de un único bloque, mientras que hay
dos registros que se recuperan con la lectura de dos bloques. Luego, el costo promedio de la
consulta es de:
(8 * 1 + 2 * 2) / 10 = 1.2 bloques

o select * from archivo where clave between 16 and 18;


R.: Se debe evaluar la presencia de cada uno de los valores presentes en el intervalo dado,
incurriendo en un bloque para la clave 16, uno para la clave 17 (y saber que no se
encuentra), y dos bloques para encontrar el registro de clave 18. Luego, el costo de las tres
búsquedas directas suma 4 bloques.
(35 puntos)

JLML/jlml.
040604.
j) No existe forma de que un archivo secuencial pueda apoyar adecuadamente algún tipo de
consulta de rango.
R.: Falso, si el archivo está ordenado ascendentemente (descendentemente) sobre un atributo X,
y la consulta es del tipo X ≤ valor (X ≥ valor), la respuesta se obtendrá en el mínimo tiempo.
(30 puntos)

Pregunta 2: (Archivos Directos y organizados como Árboles B)


Considerar el siguiente archivo de empleados.

RUT Nombre Sueldo Antigüedad Sucursal


(años)
6.040.134-5 Andrés Álvarez 500.000 8 Concepción
9.873.057-2 Bernardita Berríos 350.000 5 Valparaíso
8.567.015-4 Carlos Cárdenas 360.000 5 Concepción
6.621.058-1 Danissa Donoso 660.000 10 Valparaíso
7.531.012-3 Esteban Echeverría 280.000 3 Santiago
10.604.043-5 Francisca Fuentes 350.000 5 Santiago
4.621026-6 Gonzalo Gutiérrez 700.000 12 Santiago
5.774.024-3 Hilda Hernández 550.000 8 Valparaíso
11.981.035-7 Iván Iñiguez 420.000 6 Concepción
10.952.103-2 Jorge Jiménez 580.000 8 Santiago
5.736.222-6 Karen Kutschman 500.000 7 Valparaíso
8.347.244-3 Luis Larenas 380.000 6 Santiago

• ¿Cómo queda almacenado este archivo al organizarlo mediante la técnica de hashing


extendible, y usando como clave hashing el atributo RUT (sin dígito verificador) MOD 100?.
Considerar que la capacidad del bloque físico permite que cada bucket almacene hasta dos registros.
R.: Los dos primeros registros insertados se guardan en un mismo bucket, quedando:

6.040.134-5 Andrés Álvarez 500.000 …


9.873.057-2 Bernardita Berríos 350.000 …

La inserción del registro con clave 8.567.015-4 genera un overflow del bucket anterior, y un
aumento del directorio en su tamaño.

8.567.015-4 Carlos Cárdenas 360.000 …


0
1
6.040.134-5 Andrés Álvarez 500.000 …
9.873.057-2 Bernardita Berríos 350.000 …

La inserción del cuarto registro, de clave 6.621.058-1, también causa un overflow, en el segundo
bucket, y un aumento en el tamaño del directorio, dejando el archivo de la siguiente manera:

8.567.015-4 Carlos Cárdenas 360.000 …

00
01 6.040.134-5 Andrés Álvarez 500.000 …
10
11
9.873.057-2 Bernardita Berríos 350.000 …
6.621.058-1 Danissa Donoso 660.000 …

Agregar los registros con claves 7.531.012-3 y 10.604.043-5, en el primer y segundo buckets,
respectivamente, se hace sin problemas:
8.567.015-4 Carlos Cárdenas 360.000 …
7.531.012-3 Esteban Echeverría 280.000 …
00
01 6.040.134-5 Andrés Álvarez 500.000 …
10 10.604.043-5 Francisca Fuentes 350.000 …
11
9.873.057-2 Bernardita Berríos 350.000 …
6.621.058-1 Danissa Donoso 660.000 …

La inserción del registro con clave 4.621026-6 genera un overflow del segundo bucket, que se
resuelve sin que se vea afectado el tamaño del directorio.

8.567.015-4 Carlos Cárdenas 360.000 …


7.531.012-3 Esteban Echeverría 280.000 …

00 4.621026-6 Gonzalo Gutiérrez 700.000 …


01
10
11 6.040.134-5 Andrés Álvarez 500.000 …
10.604.043-5 Francisca Fuentes 350.000 …

9.873.057-2 Bernardita Berríos 350.000 …


6.621.058-1 Danissa Donoso 660.000 …

Agregar el registro con clave 5.774.024-3 no genera problemas, y se guarda en el segundo


bucket, cuyo contenido sería:
4.621026-6 Gonzalo Gutiérrez 700.000 …
5.774.024-3 Hilda Hernández 550.000 …

La inserción del registro con clave 11.981.035-7 origina un overflow en el tercer bucket, que es
solucionado al ampliar al doble el tamaño del directorio:

8.567.015-4 Carlos Cárdenas 360.000 …


000 7.531.012-3 Esteban Echeverría 280.000 …
001
010 4.621026-6 Gonzalo Gutiérrez 700.000 …
011 5.774.024-3 Hilda Hernández 550.000 …
100
101 6.040.134-5 Andrés Álvarez 500.000 …
110 11.981.035-7 Iván Iñiguez 420.000 …
111
10.604.043-5 Francisca Fuentes 350.000 …

9.873.057-2 Bernardita Berríos 350.000 …


6.621.058-1 Danissa Donoso 660.000 …

Un nuevo overflow, en el primer bucket, se produce al insertar el registro con clave 10.952.103-2,
de modo que los dos primeros buckets y entradas del directorio quedan como sigue:

10.952.103-2 Jorge Jiménez 580.000 …


000
001
8.567.015-4 Carlos Cárdenas 360.000 …
7.531.012-3 Esteban Echeverría 280.000 …
Otro overflow, en el tercer bucket, se produce al insertar el registro con clave 5.736.222-6, de
modo que el tercer y cuarto buckets y entradas correspondientes del directorio quedan como sigue:

5.736.222-6 Karen Kutschman 500.000 …


010
011
4.621026-6 Gonzalo Gutiérrez 700.000 …
5.774.024-3 Hilda Hernández 550.000 …

Finalmente, la inserción del registro con clave se hace sin problemas en el sexto bucket, de
modo que el archivo final queda como sigue.

10.952.103-2 Jorge Jiménez 580.000 …


000
001
010 8.567.015-4 Carlos Cárdenas 360.000 …
011 7.531.012-3 Esteban Echeverría 280.000 …
100
101 5.736.222-6 Karen Kutschman 500.000 …
110
111
4.621026-6 Gonzalo Gutiérrez 700.000 …
5.774.024-3 Hilda Hernández 550.000 …

6.040.134-5 Andrés Álvarez 500.000 …


11.981.035-7 Iván Iñiguez 420.000 …

10.604.043-5 Francisca Fuentes 350.000 …


8.347.244-3 Luis Larenas 380.000 …

9.873.057-2 Bernardita Berríos 350.000 …


6.621.058-1 Danissa Donoso 660.000 …
(25 puntos)

• ¿Cuál es el contenido de este archivo al organizarlo usando un árbol B, de orden 3, sobre el


atributo RUT?.
R.: Por simplicidad de la gráfica, sólo se considerarán los RUT de los registros, pero se
subentiende que el registro está almacenado con todos sus atributos en todo momento.
Los dos primeros registros, de claves 6.040.134-5 y 9.873.057-2, se guardan en el mismo nodo.

6.040.134-5 9.873.057-2

Al insertar el registro con clave 8.567.015-4, se produce un overflow, el cual se resuelve al dividir
el nodo actual, y generar una nueva raíz:

8.567.015-4

6.040.134-5 9.873.057-2

El próximo registro, de clave 6.621.058-1, se inserta sin problemas en el nodo hoja de más a la
izquierda, quedando:
6.040.134-5 6.621.058-1

Agregar el registro siguiente, de clave 7.531.012-3, genera un overflow en este mismo nodo,
llevando al registro con clave 6.621.058-1 a la raíz:
6.621.058-1 8.567.015-4

6.040.134-5 7.531.012-3 9.873.057-2

Las inserciones de los dos registros siguientes, de claves 10.604.043-5 y 4.621.026-6, se hace en
las hojas extremas, sin problemas, quedando en cada caso:

4.621.026-6 6.040.134-5

9.873.057-2 10.604.043-5

La inserción del registro de clave 5.774.024-3 causa un overflow en la hoja más izquierda, lo cual
dejando llevando a la raíz dicho registro, quedando como su hijo izquierdo el nodo que contiene sólo a la
clave 4.621.026-6, y como hijo derecho aquél que contiene sólo el registro de clave 6.040.134-5. No
obstante, esto no resuelve el problema pues la raíz ya está copada y no permite un nuevo registro en
ella. Luego, se divide en dos, generando una nueva raíz (por ende el árbol crece en un nivel), la que
almacena al registro de clave 6.621.058-1, quedando como hijo izquierdo el nodo con el registro de clave
5.774.024-3, y como hijo derecho el nodo con el registro de clave 8.567.015-4. Luego:

6.621.058-1

5.774.024-3 8.567.015-4

4.621.058-1 6.040.134-5 7.531.012-3 9.873.057-2 10.604.043-5

La inserción del registro con clave 11.981.035-7 genera un overflow de la hoja más a la derecha,
la que resuelve con la división del nodo en cuestión, dejando esa parte del árbol según sigue:

8.567.015-4 10.604.043-5

7.531.012-3 9.873.057-2 11.981.035-7

Ninguno de los últimos registros causa algún overflow, de modo que las inserciones se hacen sin
problemas, dejando el árbol final así (por limitación de espacio, las hojas sólo muestran el o los dos
registros guardados, sin la notación que incluye los punteros) :

6.621.058-1

5.774.024-3 8.567.015-4 10.604.043-5

4.621.058-1 6.040.134-5 7.531.012-3 9.873.057-2 10.952.103-5


5.736.222-6 8.347.244-3 11.981.035-7

(25 puntos)
A partir de los resultados anteriores, determinar la organización más conveniente considerando,
por separado:
• El costo del almacenamiento en disco.
R.:
• Hashing extendible: 7 de datos y 1 del directorio Æ total: 8 bloques.
• Árbol B: 1 para la raíz, 2 nodos intermedios y 5 nodos hojas Æ total: 8 bloques.
Luego, ambas organizaciones son igualmente convenientes.

• Los costos promedio y máximo (por separado) de recuperación de un registro de datos.


R.: sin considerar la posibilidad de tener bloques residentes en memoria…
• Hashing extendible: 2 bloques (1 del directorio + 1 de datos) para el costo promedio; 2
bloques para el costo máximo.
• Árbol B: (1*1+3*2+8*3)/12 = 2.58 bloques para el costo promedio; 3 bloques para el costo
promedio.
Luego, la estructura más conveniente, en ambos casos es el hashing extendible.
Si se tiene residentes el directorio del hashing extendible, y la raíz del árbol B, la situación no
cambia.

• Que la mayor parte de las consultas requieren salidas ordenadas por RUT.
R.: el archivo de tipo árbol B se encuentra estructurado en base al RUT (completo), de modo que
un recorrido inorden sobre él entregaría la salida indicada; en caso de accesar al archivo de tipo
hashing extendible habría que realizar un costoso ordenamiento de los datos. Luego, se debe
usar el archivo de tipo árbol B.

• Que la mayor parte de las consultas son del tipo sueldo ≥ valor.
R.: dado que ninguno de los dos casos se encuentra conveniente organizado para apoyar esta
consulta, se debe recorrer el archivo completo, de modo que debiera ser usado el archivo de tipo
hashing extendible, por tener menos bloques de datos, 7 v/s 8 del árbol B.
Justificar cada respuesta dada.
(20 puntos)

Tiempo: 90 minutos.

JLML/jlml.
220503.

También podría gustarte