UNIVERSIDAD TÉCNICA FEDERICO SANTA MARÍA DEPARTAMENTO DE INFORMÁTICA ALMACENAMIENTO Y RECUPERACIÓN DE INFORMACIÓN CERTAMEN 2: Estructura Básicas de Archivos Profesor: José Luis Martí L. – Wenceslao Palma M. Ayudantes: Julio Araya C. - Pablo Baeza B. – Francisco Coca H. - Víctor Codocedo H. Pregunta 1: (Archivos Directos) Responder, verdadero o falso, justificando sólo éstas últimas; cada respuesta mala vale -1 punto. a) Un archivo directo ocupa menos bloques de disco que un archivo secuencial, para el mismo conjunto de datos. R.: Falso, pues el archivo directo no necesariamente tiene llenos todos sus bloques de datos, no así el secuencial que generalmente sí los tiene, por ende ocupa menos espacio. b) Un archivo directo es ideal para claves secundarias. R.: Falso, es conveniente para claves únicas. c) Al contar con claves correlativas, el uso de un archivo relativo es adecuado. R.: Verdadero. d) Una técnica de hashing estático permite aprovechar mejor el espacio en disco que una con expansión dinámica. R.: Falso, pues hashing estático hace una reserva de bloques que no necesariamente se use en su totalidad, mientras que la expansión dinámica permite e) El costo de recuperación de un registro desde un archivo hashing con expansión dinámica crece linealmente a medida que aumenta el volumen de datos del archivo. R.: Falso, se mantiene prácticamente constante y cercano a un bloque. f) El directorio de un archivo dinámico siempre ocupa un bloque de disco. R.: Falso, pues a medida que crece el número de registros del archivo, se requerirá un directorio cada vez, ocupando un mayor número de bloques. g) El costo de leer un registro desde un archivo hashing lineal puede ser superior a un bloque de disco. R.: Verdadero. h) Cualquier archivo hashing es muy conveniente para generar reportes ordenados. R.: Falso, pues por ejemplo el archivo hashing lineal no preserva ningún tipo de orden entre los datos. i) Si el archivo hashing está organizado sobre cierto atributo, la única forma de encontrar registros en base a otro atributo es mediante un recorrido lineal. R.: Verdadero. j) El costo de ejecutar una búsqueda binaria sobre un archivo de tipo árbol B es más lento que la búsqueda binaria que se realice sobre un archivo directo. R.: Falso, pues sobre un archivo directo no se puede realizar búsquedas binarias, dado que no preservan el orden. (30 puntos) Pregunta 2: (Archivos Secuenciales – Archivos organizados como Árboles B) (a) Considere un archivo de 25000 páginas y un disco que posee una latencia de 5 ms, seek de 10 ms y es capaz de transferir 1 página por ms. 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. Cuanto tiempo requiere tal operación si: i) Se utiliza 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 25000 páginas. Considerando 32 buffers, se generan 25000/32 = 782 runs La cantidad de pasos necesaria para el ordenamiento y mezcla es log4782 = 4.8055124 ~= 5 tiempo_total = 5*(t_lectura + t_lectura) t_lectura = (10 + 5 + (1*4))*(25000/4) = 118750 ms = 118.750 seg t_escritura = t_lectura Luego, el tiempo total requerido para ordenar y mezclar el archivo es: tiempo_total = 5*(2*118.750) = 1187.5 seg ii) Se utiliza 10 buffers de entrada de 2 páginas y 1 buffer de salida de 12 páginas? Comente los resultados. R.: En cada paso del proceso de ordenamiento y mezcla se trabaja con las 25000 páginas. Considerando 32 buffers, se generan 25000/32 = 782 runs La cantidad de pasos necesaria para el ordenamiento y mezcla es log10782 = 2.8932068 ~= 3 tiempo_total = 3*(t_lectura + t_lectura) t_lectura = (10 + 5 + (1*2))*(25000/2) = 212500 ms = 212.5 seg t_escritura = (10 + 5 + (1*12))*(25000/12)= 56250 ms = 56.250 seg Luego, el tiempo total requerido para ordenar y mezclar el archivo es: tiempo_total = 3*(212.5 + 56.250) = 806.25 seg La segunda opción mejora en aprox. un 20% el tiempo de respuesta de la opción 1. Lo cual se debe en gran parte a que un buffer de salida de mayor tamaño se escribirá menos veces hacia el disco. (b) Considere un archivo de 1000000 de registros, de 100 bytes c/u, almacenado en un disco de 7200 RPM, seek de 8.9 ms, transferencia de 100 MB/seg y bloques de 4KB. Se decide una organización para los registros basada en árbol B. i) Cuanto es el tiempo máximo de recuperación de un registro? R.: Lo ideal es que un nodo del árbol se almacene en un bloque de disco. Si el árbol es de orden p, entonces existirán p-1 registro de 100 bytes en cada nodo. El puntero a nodo se puede obtener considerando que 1000000 de registros de 100 bytes ocupan 25000 bloques. Luego son suficientes 2 bytes para apuntar a 25000 bloques. Entonces el orden p de un nodo es: 2p + 100(p-1) <= 4096 p <= 41.137255 conviene p = 41 Si determinamos la cantidad necesaria de niveles del arbol para almacenar 1000000 de registros tendremos la cantidad maxima de accesos a disco que se necesitan para recuperar un registro. 1er nivel 2do nivel 3er nivel 4to nivel Punteros Registros 41 40 41*41 41*40 41*41*41 41*40*40 41*41*41*41 41*40*40*40 Con 4 niveles es suficiente, ahora el tiempo sera: t_max = 4*(8.9+4.16+0.04) = 52.32 ms ii) Cuál sería la diferencia en cuanto a tiempo de respuesta considerando una organización basada en hashing dinámico? Si consideramos una estructura basada en hashing dinámico, el tamaó de la estructura de acceso puede ser almacenada en memoria y desde allí se puede alcanzar cualquier dato con solo un acceso a disco, lo cual seria: tiempo = (8.9+4.16+0.04) = 13.08 ms (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 razonSocial direccion telefono primeraCompra montoComprado ); char(9), varchar(30), varchar(30), varchar(10), date, 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 asigandos. 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.: Consultas directas sobre dicho atributo lo justifican, 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). No lo justifican consultas basadas en otros atributos. (30 puntos) JLML-WPM/. 111005.