Ari C2 Ejercicios

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 + log 5 (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: T ENTRADA = 7 etapas * (10 mseg + 2,5 mseg + (1 mseg * 4) ) * (50.000 / 4) = 1.443 seg T SALIDA = 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+ log 8 (12.500) ~= 6. Luego, el tiempo asociado a la entrada y salida de los datos es: T ENTRADA = 6 etapas * (10 mseg + 2,5 mseg + (1 mseg * 4) ) * (50.000 / 4) = 1.237,5 seg T SALIIDA = 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)

Transcript of Ari C2 Ejercicios

Page 1: Ari C2 Ejercicios

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 - Algo ritmos 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)

Page 2: Ari C2 Ejercicios

Pregunta 2: (Archivos Secuenciales - Archivos de ti po 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)

Page 3: Ari C2 Ejercicios

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.

Page 4: Ari C2 Ejercicios

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

Nodos

Número de

Punteros

Número de

Registros

Número Acumulado de

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.

Page 5: Ari C2 Ejercicios

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)

Page 6: Ari C2 Ejercicios

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.

Page 7: Ari C2 Ejercicios

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

punteros; este último corresponde a 131.072 = 217 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:

( 217 * 23 ) bytes Número de bloques ocupados por el archivo = ------------------------------ = 512 bloques

211 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)

Page 8: Ari C2 Ejercicios

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

4

5 Hollywood Madonna 125

6

7 Go to Sleep RadioHead 367 Here we Kum Molotov 287

8 Crazy in Love Beyonce & Jay-Z 258 San Miguel Los Prisioneros 467

9

(15 puntos)

Page 9: Ari C2 Ejercicios

• ¿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.

Page 10: Ari C2 Ejercicios

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, esposible que en lugar de realizar una mezcla de a pares (como lo hace por ejemplo la mezcla 2-waybalanceada vista en clases), se realice una gran y única fase de mezcla, tomando el primer bloque decada una de las particiones de datos ya ordenadas, y en la medida de que se vayan consumiendo, secargue el segundo, tercer….n-ésimo bloques de cada partición. Para esto se considera comopartició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 quiereordenar en un computador que tiene 50 MB disponibles para buffers. Los bloques de disco tienen 4KB, 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/bloqueFactor de bloqueo del archivo = ---------------------------- = 40 registros / bloque

100 bytes / registro

10.000.000 registrosNúmero de bloques ocupados por el archivo = ------------------------------ = 250.000 bloques

40 registros / bloque

50 * 220 bytesNúmero de bloques que permiten los 50 MB de buffers = -----------------------------------

4 * 210 bytes / bloques

= 12.800 bloques

Luego, considerando los 250.000 bloques del archivo, se tiene que el total de particiones es de250.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 aldisco. Lo mismo se repite para la mezcla de las particiones, las que van siguiendo accesadaslinealmente, por lo que nuevamente se lee una sola vez cada bloque, y regresados al disco con elresultado 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 = 4horas, 10 minutos.

(30 puntos)

Page 11: Ari C2 Ejercicios

b) El DJ de una radioemisora debe catalogar los estrenos musicales recibidos en las últimassemanas; para esto, usa un número interno de registro según muestra la siguiente tabla.

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

• ¿Cómo quedarían guardados los registros si el archivo se organizara como secuencialordenado en base a #estreno, suponiendo un factor de bloqueo igual a 3?.

R.:

Nombre del Tema Intérprete #EstrenoHollywood Madonna 125Just Because Jane’s Adiction 180Here we Kum Molotov 287

God puts a Smile upon your Face Coldplay 342Go to Sleep RadioHead 367Show me How to Live AudioSlave 450

San Miguel Los Prisioneros 467Frantic Metallica 593Crazy in Love Beyonce & Jay-Z 658

White Flag Dido 901Re-Offender Travis 1472Sá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 sesubentiende que éstas son, realmente, el registro completo.

342 593

180 450 1472

125 287 367 467 658 1502901

(15 puntos)

Page 12: Ari C2 Ejercicios

• A partir de los dos resultados anteriores, y considerando por separado las siguientesconsultas, indicar para cada caso (y con la justificación correspondiente), cuál es laestructura 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 recorrerel 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: 3bloques.

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.

Page 13: Ari C2 Ejercicios

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 12 Franco Ramírez 403434

18 Carlos González 404657

0

1

Page 14: Ari C2 Ejercicios

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 3 Jorge Vásquez 918374

9 Juan Pérez 947775 12 Franco Ramírez 403434

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

9 Juan Pérez 947775 10 José Verbal 903464 11 Mauricio Yáñez 406376

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

0

1 0

1

0

1

0

1 0

1

Page 15: Ari C2 Ejercicios

Una nueva colisión se presenta con la inserción del registro con clave 6:

3 Jorge Vásquez 918374 2 María Teresa M. 917646

7 María Escobar 975844 6 Erik Baier 538942

9 Juan Pérez 947775 10 José Verbal 903464 11 Mauricio Yáñez 406376

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)

0

1

0

1

0

1 0

1

Page 16: Ari C2 Ejercicios

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 Nodos

Número de Registros en

este Nivel

Número Acumulado de

Registros

Número de Punteros

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.

Page 17: Ari C2 Ejercicios

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.

Page 18: Ari C2 Ejercicios

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 Nodos

Número de Registros

Número Acumulado de Registros

Número de 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.

Page 19: Ari C2 Ejercicios

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.

Page 20: Ari C2 Ejercicios

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

Feel Good Inc. Gorillaz

342 Don’t funk’d with my Heart

Black Eyes Peas

1472 Prendan la Radio

Tronic

125 The Last Time

Keane

287 Somebody

Told me The Killers

450 Speed of

Sound Coldplay

593 Be Yourself AudioSlave

901 Esperanzas

Lucybell

1502 Believe

The Chemical 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

Page 21: Ari C2 Ejercicios

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. 0

1 2

3

4

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

Page 22: Ari C2 Ejercicios

Para este archivo, las lecturas y escrituras de bloques son:

Clave Bucket Requerido

Bucket en Memoria

Lectura del

Bloque…

Escritura al Disco

del bloque…

Operaciones de E/S

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

2 3

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.

Page 23: Ari C2 Ejercicios

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)

Page 24: Ari C2 Ejercicios

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)

Page 25: Ari C2 Ejercicios

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 Producto

Valor #Producto Nombre Producto

Valor

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

0 1

30 29 42

0 1

30 29 42 7

0 1 2 29 30 7 42 59 0 1 2

16 29 30 7 42 59

Inserción del registro con clave 42:

Inserción del registro con clave 7:

Inserción del registro con clave 59:

Inserción del registro con clave 16:

Page 26: Ari C2 Ejercicios

Inserción de los registros con claves 23: 0 1 2 3

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

16 29 30 7 42 59 18 23 0 1 2 3 4

16 29 30 7 25 42 59 18 23 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

Queso 1.800

25 Café en Polvo 3.000

30 Cereal 1.200

7 Azúcar

400

29 Fideos

380

42 Leche en

Polvo 1.800

59 Pack de Yoghurt 1.000

37 Mantequilla

250

18

Pan Integral 800

23 Jugo 700

Inserción del registro con clave 18:

Inserción del registro con clave 37:

Inserción del registro con clave 25:

Page 27: Ari C2 Ejercicios

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.

Page 28: Ari C2 Ejercicios

j) No existe forma de que un archivo secuencial pueda apoyar adecuadamente algún tipo deconsulta 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(años)

Sucursal

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 Santiago10.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íso11.981.035-7 Iván Iñiguez 420.000 6 Concepción10.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 hashingextendible, 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 unaumento del directorio en su tamaño.

8.567.015-4 Carlos Cárdenas 360.000 …01

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 segundobucket, 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 …

0001 6.040.134-5 Andrés Álvarez 500.000 …1011

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:

Page 29: Ari C2 Ejercicios

8.567.015-4 Carlos Cárdenas 360.000 … 7.531.012-3 Esteban Echeverría 280.000 …

0001 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 seresuelve 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 …011011 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 segundobucket, 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 essolucionado 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 …001010 4.621026-6 Gonzalo Gutiérrez 700.000 …011 5.774.024-3 Hilda Hernández 550.000 …100101 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 …000001

8.567.015-4 Carlos Cárdenas 360.000 … 7.531.012-3 Esteban Echeverría 280.000 …

Page 30: Ari C2 Ejercicios

Otro overflow, en el tercer bucket, se produce al insertar el registro con clave 5.736.222-6, demodo que el tercer y cuarto buckets y entradas correspondientes del directorio quedan como sigue:

5.736.222-6 Karen Kutschman 500.000 …010011

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, demodo que el archivo final queda como sigue.

10.952.103-2 Jorge Jiménez 580.000 …000001010 8.567.015-4 Carlos Cárdenas 360.000 …011 7.531.012-3 Esteban Echeverría 280.000 …100101 5.736.222-6 Karen Kutschman 500.000 …110111

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 elatributo RUT?.

R.: Por simplicidad de la gráfica, sólo se considerarán los RUT de los registros, pero sesubentiende 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 dividirel 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 laizquierda, 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:

Page 31: Ari C2 Ejercicios

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 enlas 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 cualdejando llevando a la raíz dicho registro, quedando como su hijo izquierdo el nodo que contiene sólo a laclave 4.621.026-6, y como hijo derecho aquél que contiene sólo el registro de clave 6.040.134-5. Noobstante, esto no resuelve el problema pues la raíz ya está copada y no permite un nuevo registro enella. Luego, se divide en dos, generando una nueva raíz (por ende el árbol crece en un nivel), la quealmacena al registro de clave 6.621.058-1, quedando como hijo izquierdo el nodo con el registro de clave5.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 sinproblemas, dejando el árbol final así (por limitación de espacio, las hojas sólo muestran el o los dosregistros 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-55.736.222-6 8.347.244-3 11.981.035-7

(25 puntos)

Page 32: Ari C2 Ejercicios

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; 2bloques 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 costopromedio.

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 nocambia.

• 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 queun recorrido inorden sobre él entregaría la salida indicada; en caso de accesar al archivo de tipohashing extendible habría que realizar un costoso ordenamiento de los datos. Luego, se debeusar 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 estaconsulta, se debe recorrer el archivo completo, de modo que debiera ser usado el archivo de tipohashing 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.