Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DEPARTAMENTO DE INFORMÁTICA
CAMPUS SANTIAGO
RECUPERACIÓN DE INFORMACIÓN
CERTAMEN 2: Estructuras Básicas de Archivos
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
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
342 593
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 = ...;
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....
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:
342 593
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)
• 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.
(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
• 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.
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
342 593
(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.
(15 puntos)
JLML/jlml.
081003.
Pregunta 2:
Cierto archivo de empleados guarda los siguientes datos.
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 …
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.
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
Colisión se produce al insertar el registro con clave 11, por lo que el archivo debe reorganizarse
nuevamente, quedando como sigue:
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
Sin problemas de colisión se insertan los registros con claves 2 y 17 en los buckets correspon-
dientes:
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
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…
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:
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:
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.
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:
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.
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
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.
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
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:
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.
(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:
R.:
Inserción de los registros con claves 29 y 30:
0
29
30
0 1 2
29 30
7 42
59
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
18 23
18 23
18 23
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.
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)
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.
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:
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.
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:
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:
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.
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
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
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
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
(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.
• 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.