Soluciones+Ejercicios+Tema2-2

Share Embed Donate


Short Description

Download Soluciones+Ejercicios+Tema2-2...

Description

Ejercicios Tema2 (2) – Indexación 1) ¿Cuándo es preferible utilizar un índice denso en vez de uno no denso? ¿Cuál es la diferencia entre un índice primario y un índice secundario? Razónense las respuestas. Solución: 1. Es preferible utilizar un índice denso en lugar de uno no denso cuando el fichero no está ordenado sobre el campo índice (como cuando el índice es un índice secundario), o cuando el fichero de índices es pequeño, comparado con el tamaño de la memoria. 2.El índice primario está sobre el campo que especifica el orden secuencial del fichero. Sólo puede haber un índice primario, mientras que puede haber muchos secundarios

2) Dado un índice denso, ¿es necesario acceder a un bloque de datos para saber si el registro se encuentra en él? ¿Y en el caso de un índice no denso? Solución: En el caso del índice denso no es necesario, ya que si existe una entrada en el índice es que el registro existe (un índice denso tiene una entrada por cada registro). Si la entrada para el registro no existe en el índice denso, entonces podemos asegurar que el registro tampoco existe En el caso del índice no denso sí es necesario, ya que estos índices suelen apuntan al inicio del bloque donde se encuentran los registros indexados por él o al primer registro con el valor de indexación, y por tanto no sabemos de antemano si el registro buscado existe o no.

3) ¿Es posible, en general, tener dos índices principales para un mismo fichero sobre dos claves de búsqueda diferente? ¿Y un índice principal y otro agrupado? Razonar las respuestas. Solución: En general no es posible tener dos índices principales, ya que estos índices se crean sobre el campo ordenado en el fichero, y un fichero sólo puede estar ordenado por un campo. El mismo razonamiento se aplica al caso de tener un índice principal y agrupado, ya que el segundo también se crea sobre el campo ordenado, aunque en este caso puede tener valores repetidos.

4) En los árboles B que hemos visto en las transparencias de clase, asumimos que el valor de búsqueda es único (i.e., se realiza la búsqueda sobre un campo clave). Por tanto, el puntero de datos Pri apunta a un solo bloque o registro. ¿Qué modificación sería necesaria realizar en este puntero para valores de búsqueda que no son únicos (i.e., para árboles con campos de búsqueda no clave) ? Solución: La solución más sencilla es tener un array de punteros a bloque en el campo Pri. Otra solución es que el puntero Pri apunte a un bloque de punteros que contienen los punteros a los registros del fichero.

5) Tenemos un fichero de registros ESTUDIANTE con r = 30.000 registros de longitud fija de R = 115 bytes. El tamaño de bloque de disco es de B = 512 bytes. Además, un puntero a bloque tiene una longitud de Pb= 6 bytes, mientras que un puntero a registro tiene Pr = 7 bytes. Se pide: a) Calcular el factor de bloqueo bfr y el número b de bloques del fichero, asumiendo una organización de registros no extendida. b) Sabiendo que el fichero está ordenado por el campo DNI, de 30 bytes de tamaño, queremos construir un índice principal. Calcular: i) El factor de bloqueo del índice bfri ii) El número de entradas y el número de bloques del índice. iii) El número de niveles necesarios si convertimos el índice en un índice multinivel y el número de bloques de cada nivel. iv) El número de accesos a bloque que se necesita para recuperar un registro (dado el valor del campo DNI) utilizando el índice de un solo nivel y el índice multinivel del apartado iii) c) Ahora queremos crear un índice secundario sobre el campo no clave Asignatura, de 9 bytes de tamaño (recuérdese que el fichero está ordenado por el campo DNI). Para construir este índice se utiliza la opción 3 explicada en la transparencia 22 de este tema, i.e., utilizando un nivel extra de indirección con bloques que almacenan punteros a registros. Asúmase que hay 60 valores distintos de Asignatura y que estos valores están uniformemente distribuidos entre los registros ESTUDIANTE. Calcular: i) El factor de bloqueo del índice bfri ii) El número de bloques de registros a punteros que se necesitan iii) El número de entradas y el número de bloques del índice. iv) El número de niveles necesarios si convertimos el índice en un índice multinivel y el número de bloques de cada nivel. v) El número de accesos a bloques para recuperar todos los registros que tienen un valor Asignatura determinado, usando sólo el índice principal y usando el índice multinivel.

d) Suponer ahora que el fichero esta ordenado por el campo no clave Asignatura. De nuevo, este campo tiene 60 valores distintos y se distribuyen uniformemente entre todos los registros ESTUDIANTE del fichero. Queremos construir un índice agrupado que utiliza anclas de bloque. Calcular: i) El factor de bloqueo del índice bfri ii) El número de entradas y el número de bloques del índice. iii) El número de niveles necesarios si convertimos el índice en un índice multinivel y el número de bloques de cada nivel. iv) El número de accesos a bloques para recuperar todos los registros que tienen un valor Asignatura determinado, usando sólo el índice principal y usando el índice multinivel (suponer que los bloques de índice de un mismo grupo son contiguos). Solución: a) bfr = 512/115 = 4 registros/bloque Número de bloques Nb = 30000/4 = 7500 bloques b) Respuestas al apartado: i. Puesto que vamos a utilizar un índice principal, el campo de dirección de cada registro del índice será un puntero a bloque. Así, cada registro del índice tendrá un tamaño igual al tamaño del campo de indexación (DNI) más el tamaño del campo de dirección, es decir, Tamaño Ri = 30 + 6 = 36 bytes. Por tanto, bfri = 512/36 = 14 registros/bloque ii.

El número de entradas del índice, al ser principal, y por tanto no denso, es igual a una entrada por cada bloque del fichero. Puesto que el fichero tiene 7500 bloques, el índice tiene 7500 entradas. El número de bloques del índice es igual al número de entradas que tiene partido por el factor de bloqueo del índice. Así, tenemos que número de bloques del índice Ni = 7500/14 = 536 bloques

iii.

Niveles necesarios para índice multinivel = log bfri (entradas_índice) = log14 (7500) = 4 niveles Primer nivel: 536 bloques (todos los bloques del índice) Segundo Nivel: Tendrá 536 entradas. Por tanto, su número de bloques es igual a 536/14 = 39 bloques Tercer nivel: Tendrá 39 entradas. Por tanto, su número de bloques es igual a 39/14 = 3 bloques Cuarto nivel: Tendrá 3 entradas. Por tanto, su número de bloques es igual a 3/14 = 1 bloque

iv.

Número de accesos utilizando el índice principal: log2(536) + 1 = 10 + 1 = 11 Número de accesos utilizando el índice multinivel: 1 acceso por nivel + 1 acceso de bloque de datos = 4 +1 = 5

c) Respuestas al apartado: i) Puesto que vamos a utilizar un índice secundario no clave de acuerdo con la opción 3, el campo de dirección de cada registro del índice será un puntero a su correspondiente bloque de punteros. Así, cada registro del índice tendrá un tamaño igual al tamaño del campo de indexación (Asignatura) más el tamaño del campo de dirección, es decir, Tamaño Ri = 9 + 6 = 15 bytes. Por tanto, bfri = 512/15 =34 registros/bloque ii) Asumiendo una distribución uniforme de asignaturas entre los estudiantes, tenemos que para 30000 estudiantes y 60 asignaturas, cada asignatura está asociada a 500 estudiantes. Por tanto, cada asignatura aparece repetida 500 veces. Así, cada bloque de punteros a registro del índice debe almacenar 500 punteros a registros, lo que equivale a 500 * 7 = 3500 bytes. Debido a que el tamaño de bloque es de 512 bytes, no caben todos los punteros en un solo bloque de punteros y se necesitará una lista enlazada de bloques de punteros. Restando los 6 bytes utilizados para el puntero de la lista que enlaza los bloques de punteros, tenemos que el tamaño útil para bloque de punteros es de 506 bytes. El factor de bloqueo para estos bloques es igual al tamaño útil del bloque de datos partido por el tamaño de puntero, bfrp = 506/6 = 84 punteros/bloque. Por tanto, el número de bloques de punteros a registros necesario para cada entrada del índice será igual a NbPr = 500 / 84 = 6 bloques.

iii) El número de entradas del índice, al utilizar la opción 3 de índice secundario no clave, es igual al número de valores del campo de indexación distintos. De acuerdo con el enunciado, existen 60 asignatura diferentes, por tanto el índice tendrá 60 entradas. El número de bloques del índice es igual al número de entradas que tiene partido por el factor de bloqueo del índice. Así, tenemos que número de bloques del índice Ni = 60/34 =2 bloques. iv) Niveles necesarios para índice multinivel = log bfri (entradas_índice) = log34 (60) = 2 niveles El primer nivel tendrá los dos bloques y el segundo nivel un único bloque.

v) Observar que hay que acceder a todos los bloques que tengan registros con un valor determinado en el campo Asignatura. Asumiendo una distribución uniforme de 500 registros para bloques con 4 registros por bloque, necesitamos acceder a una media de 125 bloques. Además, también hay que tener en cuenta el nivel de indirección de los bloques de punteros a registros, accediendo a todos ellos para recuperar el puntero a los registros.

Por tanto, el número de accesos utilizando el índice secundario de un nivel es igual a: log2(bloques_índice) + accesos a bloques de punteros a registros + accesos a bloques de datos = log2(2) + 6 + 125 = 1 + 6 + 125 = 132. Número de accesos utilizando el índice multinivel: 1 acceso por nivel + + accesos a bloques de punteros a registros + accesos a bloques de datos = 2 + 6 + 125 = 133. d) Respuestas al apartado: i) Puesto que vamos a utilizar un índice agrupado con anclas de bloque, el campo de dirección de cada registro del índice será un puntero a bloque. Así, cada registro del índice tendrá un tamaño igual al tamaño del campo de indexación (Asignatura) más el tamaño del campo de dirección, es decir, Tamaño Ri = 9 + 6 = 15 bytes. Por tanto, bfri = 512/15 =34 registros/bloque. ii) El número de entradas del índice es igual al número de valores del campo de indexación distintos. De acuerdo con el enunciado, existen 60 asignatura diferentes, por tanto el índice tendrá 60 entradas. El número de bloques del índice es igual al número de entradas que tiene partido por el factor de bloqueo del índice. Así, tenemos que número de bloques del índice Ni = 60/34 =2 bloques. iii) Niveles necesarios para índice multinivel = log bfri (entradas_índice) = log34 (60) = 2 niveles El primer nivel tendrá los dos bloques y el segundo nivel un único bloque. iv) Observar que hay que acceder a todos los bloques que tengan registros con un valor determinado en el campo Asignatura. Asumiendo una distribución uniforme de 500 registros para bloques con 4 registros por bloque, necesitamos acceder a una media de 125 bloques. En cambio, ahora no tenemos nivel de indirección debido a bloques de punteros a registros. Por tanto, el número de accesos utilizando el índice secundario de un nivel es igual a: log2(bloques_índice) + accesos a bloques de datos = log2(2) + 125 = 1 + 125 = 126. Número de accesos utilizando el índice multinivel: 1 acceso por nivel + accesos a bloques de datos = 2 + 125 = 127.

5) Considerar el fichero de registros CUENTA mostrado a continuación.

a) Construir un índice de mapa de bits sobre los atributos nombre_sucursal (segunda columna) y saldo (tercera columna). Para este último atributo, dividir el rango de saldos en 4 niveles: N1 = 750€. b) Dada una consulta que solicite todas las cuentas de Downtown con un saldo de 500€ o más, describir los pasos para responder a la consulta y mostrar los mapas de bits intermedios y finales construidos para responder a la consulta. Solución: a) Mapa de bits para nombre sucursal Brighton Downtown Mianus Perryridge Redwood Round Hill

1 0 0 0 0 0

0 1 0 0 0 0

0 1 0 0 0 0

0 0 1 0 0 0

0 0 0 1 0 0

0 0 0 1 0 0

0 0 0 1 0 0

0 0 0 0 1 0

Mapa de bit para saldo 0 0 0 0 0 1

N1 N2 N3 N4

b) Mapa de bits para Downtown con saldo de 500€ o más. 1º) Mapa intermedio: Saldo N3 o N4: N3 OR N4 1 0 0 1 1 0 OR 0 0 0 0 0 1 0 0 0 ---------------------------------------1 1 1 1 0 1 1 1 0 1

1

1

0 0 1 0

0 0 1 0

0 0 1 0

0 0 1 0

0 1 0 0

0 0 0 1

0 0 1 0

0 0 1 0

0 1 0 0

2º) Mapa final: Mapa de Downtown AND (Mapa N3 OR Mapa N4): Mapa final 0 1 1 0 0 0 0 0 0 AND 1 1 1 1 0 1 1 1 0 ---------------------------------------0 1 1 0 0 0 0 0 0 Por tanto, los registros que cumplen la condición dada son los registros 2 y 3 de la figura dada en el enunciado del ejercicio.

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF