You are on page 1of 7

Ejercicios Tema2 (2) Indexacin

1) Cundo es preferible utilizar un ndice denso en vez de uno no denso? Cul es la diferencia entre un ndice primario y un ndice secundario? Raznense las respuestas. Solucin: 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 pequeo, comparado con el tamao de la memoria. 2.El ndice primario est sobre el campo que especifica el orden secuencial del fichero. Slo 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? Solucin: 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 indexacin, 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 bsqueda diferente? Y un ndice principal y otro agrupado? Razonar las respuestas. Solucin: 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 slo puede estar ordenado por un campo. El mismo razonamiento se aplica al caso de tener un ndice principal y agrupado, ya que el segundo tambin 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 bsqueda es nico (i.e., se realiza la bsqueda sobre un campo clave). Por tanto, el puntero de datos Pri apunta a un solo bloque o registro. Qu modificacin sera necesaria realizar en este puntero para valores de bsqueda que no son nicos (i.e., para rboles con campos de bsqueda no clave) ? Solucin: La solucin ms sencilla es tener un array de punteros a bloque en el campo Pri. Otra solucin 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 tamao de bloque de disco es de B = 512 bytes. Adems, 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 nmero b de bloques del fichero, asumiendo una organizacin de registros no extendida. b) Sabiendo que el fichero est ordenado por el campo DNI, de 30 bytes de tamao, queremos construir un ndice principal. Calcular: i) El factor de bloqueo del ndice bfri ii) El nmero de entradas y el nmero de bloques del ndice. iii) El nmero de niveles necesarios si convertimos el ndice en un ndice multinivel y el nmero de bloques de cada nivel. iv) El nmero 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 tamao (recurdese que el fichero est ordenado por el campo DNI). Para construir este ndice se utiliza la opcin 3 explicada en la transparencia 22 de este tema, i.e., utilizando un nivel extra de indireccin con bloques que almacenan punteros a registros. Asmase que hay 60 valores distintos de Asignatura y que estos valores estn uniformemente distribuidos entre los registros ESTUDIANTE. Calcular: i) El factor de bloqueo del ndice bfri ii) El nmero de bloques de registros a punteros que se necesitan iii) El nmero de entradas y el nmero de bloques del ndice. iv) El nmero de niveles necesarios si convertimos el ndice en un ndice multinivel y el nmero de bloques de cada nivel. v) El nmero de accesos a bloques para recuperar todos los registros que tienen un valor Asignatura determinado, usando slo 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 nmero de entradas y el nmero de bloques del ndice. iii) El nmero de niveles necesarios si convertimos el ndice en un ndice multinivel y el nmero de bloques de cada nivel. iv) El nmero de accesos a bloques para recuperar todos los registros que tienen un valor Asignatura determinado, usando slo el ndice principal y usando el ndice multinivel (suponer que los bloques de ndice de un mismo grupo son contiguos). Solucin: a) bfr = 512/115 = 4 registros/bloque Nmero de bloques Nb = 30000/4 = 7500 bloques b) Respuestas al apartado: i. Puesto que vamos a utilizar un ndice principal, el campo de direccin de cada registro del ndice ser un puntero a bloque. As, cada registro del ndice tendr un tamao igual al tamao del campo de indexacin (DNI) ms el tamao del campo de direccin, es decir, Tamao Ri = 30 + 6 = 36 bytes. Por tanto, bfri = 512/36 = 14 registros/bloque ii. El nmero 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 nmero de bloques del ndice es igual al nmero de entradas que tiene partido por el factor de bloqueo del ndice. As, tenemos que nmero de bloques del ndice Ni = 7500/14 = 536 bloques 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 nmero de bloques es igual a 536/14 = 39 bloques Tercer nivel: Tendr 39 entradas. Por tanto, su nmero de bloques es igual a 39/14 = 3 bloques Cuarto nivel: Tendr 3 entradas. Por tanto, su nmero de bloques es igual a 3/14 = 1 bloque iv. Nmero de accesos utilizando el ndice principal: log2(536) + 1 = 10 + 1 = 11 Nmero de accesos utilizando el ndice multinivel: 1 acceso por nivel + 1 acceso de bloque de datos = 4 +1 = 5

iii.

c) Respuestas al apartado: i) Puesto que vamos a utilizar un ndice secundario no clave de acuerdo con la opcin 3, el campo de direccin de cada registro del ndice ser un puntero a su correspondiente bloque de punteros. As, cada registro del ndice tendr un tamao igual al tamao del campo de indexacin (Asignatura) ms el tamao del campo de direccin, es decir, Tamao Ri = 9 + 6 = 15 bytes. Por tanto, bfri = 512/15 =34 registros/bloque ii) Asumiendo una distribucin 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 tamao 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 tamao til para bloque de punteros es de 506 bytes. El factor de bloqueo para estos bloques es igual al tamao til del bloque de datos partido por el tamao de puntero, bfrp = 506/6 = 84 punteros/bloque. Por tanto, el nmero de bloques de punteros a registros necesario para cada entrada del ndice ser igual a NbPr = 500 / 84 = 6 bloques.

iii) El nmero de entradas del ndice, al utilizar la opcin 3 de ndice secundario no clave, es igual al nmero de valores del campo de indexacin distintos. De acuerdo con el enunciado, existen 60 asignatura diferentes, por tanto el ndice tendr 60 entradas. El nmero de bloques del ndice es igual al nmero de entradas que tiene partido por el factor de bloqueo del ndice. As, tenemos que nmero 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 distribucin uniforme de 500 registros para bloques con 4 registros por bloque, necesitamos acceder a una media de 125 bloques. Adems, tambin hay que tener en cuenta el nivel de indireccin de los bloques de punteros a registros, accediendo a todos ellos para recuperar el puntero a los registros.

Por tanto, el nmero 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. Nmero 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 direccin de cada registro del ndice ser un puntero a bloque. As, cada registro del ndice tendr un tamao igual al tamao del campo de indexacin (Asignatura) ms el tamao del campo de direccin, es decir, Tamao Ri = 9 + 6 = 15 bytes. Por tanto, bfri = 512/15 =34 registros/bloque. ii) El nmero de entradas del ndice es igual al nmero de valores del campo de indexacin distintos. De acuerdo con el enunciado, existen 60 asignatura diferentes, por tanto el ndice tendr 60 entradas. El nmero de bloques del ndice es igual al nmero de entradas que tiene partido por el factor de bloqueo del ndice. As, tenemos que nmero 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 distribucin 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 indireccin debido a bloques de punteros a registros. Por tanto, el nmero 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. Nmero 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 continuacin.

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 = <250, N2 = 250-499, N3 = 500-750, N4= > 750. b) Dada una consulta que solicite todas las cuentas de Downtown con un saldo de 500 o ms, describir los pasos para responder a la consulta y mostrar los mapas de bits intermedios y finales construidos para responder a la consulta. Solucin: 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 0 0 0 0 0 1 N1 N2 N3 N4 Mapa de bit para saldo 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

b) Mapa de bits para Downtown con saldo de 500 o ms. 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

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 condicin dada son los registros 2 y 3 de la figura dada en el enunciado del ejercicio.

You might also like