3 - Indexación. Ficheros con organización secuencial indexada. 3.1 - Organizaciones para acceso directo: ficheros relativos. Objetivo: reducir (minimizar) el coste de las operaciones de búsqueda, implementando un acceso “directo” a los datos 3.1 - Organizaciones para acceso directo: ficheros relativos. tiene sentido en soportes “direccionables” 3.2 - Concepto de índice. Técnicas de indexación de ficheros. Organización indexada. Solución: establecer una conexión entre el valor del dato y su ubicación física 3.3 - Organizaciones con varios índices secundarios: ficheros invertidos. clave: pequeña porción de información que identifica (nivel lógico) un dato • Propia • Añadida 3.4 - Estructuras de árbol y su utilización en las organizaciones indexadas: árboles B y B*. es única para cada dato ¿ y si hay valores repetidos ? fichero relativo { fichero en el que existe una relación “predecible” entre la clave de un dato y su ubicación física. 3.5 - Familia de árboles B+ y organización secuencial indexada. R(clave) o ubicación física, siendo R una función de cálculo de direcciones Organización ligada a la clave Curso Tema I: Ficheros 2010/2011 S. Velilla Univ. de Zaragoza 1 2010/2011 S. Velilla Univ. de Zaragoza 2 ficheros relativos: ficheros directos con mapeo absoluto ficheros relativos: tipos y operadores básicos la implementación de la función R o diferentes tipos de ficheros relativos : ficheros directos: • “mapeo” directo o ficheros directos • búsqueda en directorio o ficheros indexados • cálculo de direcciones o ficheros dispersos operadores básicos: Curso Tema I: Ficheros • “mapeo” directo absoluto: clave { dirección física ventajas: • simplicidad ( cálculo direcciones) y eficiencia inconvenientes: • dependencia de la representación física o registros “pinchados” (pinned) • Asociar (f, nombre) • Disociar (f) dificultad de reestructuración y gestión del espacio de almacenamiento • la clave no es adecuada (no tiene relación con la información del dato) • LeerDato (f, clave, d, exito) • EscribirDato (f, clave, d, exito) Pb. semántico: ¿cómo se implementa la existencia de un dato ? responsabilidad del usuario ? no se suele usar • EliminarDato (f, clave, exito) • • • ¿ y para obtener todos los datos ? Tema I: Ficheros Op. secuenciales PrimerDato(f,d,exito) + SiguienteDato (f,d,exito) Curso 2010/2011 S. Velilla Univ. de Zaragoza 3 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 4 ficheros relativos: ficheros directos con mapeo relativo ficheros directos: ejemplos de implementación casi todos los gestores incluyen ficheros directos con operadores de “bajo nivel” ( relación con la información de los datos) e incluyen los operadores de tratamiento secuencial ficheros directos: • “mapeo” directo relativo: clave { dirección relativa (NRR) ventajas: • bastante simple y eficiente en inconvenientes: • la clave puede no tener relación con la información del dato (suele ser algo añadido) • implementación un poco más compleja la no existencia de un dato o • marca de borrado (costoso) • dirección no existente C Curso 2010/2011 en la op. de creación, o responsab. del usuario S. Velilla Univ. de Zaragoza int 5 S. Velilla Univ. de Zaragoza 6 Concepto de índice: ejemplo 11453678 12566780 13452779 13654109 14765876 15555098 17890987 18907655 19900430 19994563 • absoluta • relativa (NRR) dirDato 4 7 9 8 1 3 2 6 0 5 nombre 0 1 2 3 4 5 6 7 8 9 Santiago Rivas Marisa Sampedro Rosa Asensio Antonio Abad Jose Pérez Concepción Sanz Andrés Costa Pedro Gutiérrez Agapito López Andrés Ruiz índice pueden estar integrados en un único fichero (reg. diferentes) S. Velilla Univ. de Zaragoza 2010/2011 NRR suelen implementarse en base a dos ficheros: f. índice + f. datos Curso Curso Tema I: Ficheros dni acceso al dato 2 pasos : búsqueda en índice + acceso al dato 2010/2011 { rewind(f) = fseek(f,0L,SEEK_SET} Información de personas. Como clave se usará el DNI (identifica una persona) fichero indexado { fichero cuya organización está basada en un índice (o más) Tema I: Ficheros fgetpos (FILE *fichero, fpos_t * ptrDir) void rewind (FILE *fichero) representar explícitamente la relación entre valores de la clave y la ubicación física del dato | VECTOR (tabla) de registros fsetpos (FILE *fichero, const fpos_t * ptrDir) copia en *ptrtDir la posición actual sobre el "fichero", para uso posterior con fsetpos. Devuelve 0 si no error. Objetivo: utilizar como clave una abstracción de la información del dato INDICE int (devuelve la posición actual, o -1L si hay error) Sitúa el "fichero" en la posición almacenada en *ptrtDir por la función fgetpos. Devuelve 0 si no error. 3.2 - Concepto de índice. Técnicas de indexación de ficheros. Organización indexada búsqueda en directorio { fseek (FILE *fichero, long direcciónRelativa, int origen) siendo origen = SEEK_SET (=principio), SEEK_CUR (=actual), o SEEK_END (=final) long ftell (FILE *fichero) implementación: • contigua o eficiente, pero muy poco adecuada (en general) • directa (pb. tamaño y gestión) • “tabla” de traducción • lista encadenada (versátil, pero menos eficiente) • multinivel (compromiso adecuado eficiencia-eficacia) Tema I: Ficheros int 7 Tema I: Ficheros dni teléfono 19900430 14765876 17890987 15555098 11453678 19994563 18907655 12566780 13654109 13452779 331234 127890 336533 335555 374167 401221 808188 447634 123400 551230 datos Curso 2010/2011 S. Velilla Univ. de Zaragoza 8 Concepto de índice: ventajas/inconvenientes. Operadores básicos. • menor tamaño del índice mayor eficiencia búsqueda (n factor de bloque) una entrada de índice por cada dato { índice denso podría caber en memoria • registros del índice de long. fija (normalmente) acceso + simple y eficiente el índice puede ser excesivamente grande (p.e. búsqueda binaria) • simplifica la utilización de registros de longitud variable (representados como tales) • permite acceso directo (eficiente) a los datos utilizando cualquier campo clave, incluso simultáneamente (varios índices) • permite mantener una (o varias) ordenación lógica de los datos sin moverlos el mantenimiento del orden es muy eficiente inconveniente: Solución: NRR índice no-denso • Asociar (f, nombre) • Disociar (f) • LeerDato (f, clave, d, exito) • EscribirDato (f, clave, d, exito) • EliminarDato (f, clave, exito) Curso Tema I: Ficheros 2010/2011 • PrimeraClave (f, clave, exito) • SiguienteClave (f, clave, exito) 9 dni dirDato 11453678 13654109 19900430 0 3 8 3 4 5 6 Se puede aprovechar la organización física en bloques 8 9 Jose Pérez Pedro Gutiérrez Andrés Ruiz Agapito López Marisa Sampedro Antonio Abad Rosa Asensio Andrés Costa Santiago Rivas Concepción Sanz Curso Tema I: Ficheros 2010/2011 dni 11453678 12566780 13452779 13654109 14765876 15555098 17890987 18907655 19900430 19994563 teléfono 374167 447634 551230 123400 127890 335555 336533 808188 331234 401221 S. Velilla Univ. de Zaragoza Concepto de índice: densidad de un índice. Ejemplos Implementación de una Organización Indexada simple densidad del índice = nº entradas / nº total de datos • funcionalidad implementación: operaciones de mantenimiento compromiso • eficiencia • seguridad el tratamiento de los datos se hace en bloques en el índice la ref. del bloque más complejas y menos eficientes (a veces) con índices no-densos FICHERO denso ordenado ordenado no ordenado posible IS3 IS3 ISAM VSAM UFAS ordenado VSAM ISAM UFAS no denso no ordenado Tema I: Ficheros el coste de la búsqueda (aun binaria) no tiene por qué ser despreciable fichero no ordenado 10 acceso al índice y a los datos Bloque “ ancla ” { primer bloque de la subsecuencia INDICE 1 7 o dato (pero a través de la clave) S. Velilla Univ. de Zaragoza nombre 0 2 • operaciones de procesamiento secuencial (afectan a muchos datos) son más lentas operadores básicos: elegir un subconjunto de claves ordenación (parcial) de los datos por la clave Ordenados por DNI ventajas: Concepto de índice: índice denso y no-denso posible Curso 2010/2011 { índice secuencial tipo AS400 { secuencial indexado IBM { secuencial indexado regular IBM { secuencial indexado BULL S. Velilla Univ. de Zaragoza 11 Ejemplo: aplicación al diseño de una organización indexada sencilla • • • • Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 12 FICHERO DE DATOS Concepto de índice: tipos de índices Apell_Nombre Abad, Adriana Abarca, Félix DNI FechaNac Puesto Salario Sexo ..... Acevedo, Irene la extensión de la idea de indexación o diferentes tipos de índices Acosta, Beatriz Acosta, Roberto FICHERO DE INDICE (entradas <K(i), P(i)>) ..... • índice primario Clave primaria del ancla del bloque { se utiliza la clave (primaria) del dato Aguilera, Héctor Aguilera, Santiago Abad, Adriana Acosta, Beatriz Aguilera, Héctor Alcalá, Enrique Aranda, María .... • índice de agrupamiento { se utiliza un campo de ordenación del dato • índice secundario Aguilar, Amelia apuntador a bloque { se utiliza la cualquier otro campo (clave o no) ..... Albiol, Sonia Alcalá, Enrique Alcántara, Silvia ..... .... Amaya, Francisco .... Aranda, María Atarés, Rosendo ..... Si todavía es muy grande el índice o nuevo índice sobre el índice Azuara, Roberto Yáñez, Francisco Zapata, Luis .... Yáñez, Francisco Yáñez, Rita índice multinivel ..... Zamora, Angel aumenta la eficiencia de la búsqueda, pero complica la gestión Indice primario según el campo de clave de ordenación del fichero (no-denso) Zapata, Luis Zapatero, Antonio ..... Zubiaurre, Abelardo S. Velilla Univ. de Zaragoza Curso Tema I: Ficheros 2010/2011 numDpto 1 1 1 2 apuntador a bloque valor del campo de agrupamiento 1 2 3 4 5 6 Apell_Nombre DNI .... .... 2010/2011 14 FICHERO DE DATOS Campo de agrupamiento numDpto 1 1 FechaNac Puesto Salario Apell_Nombre DNI FechaNac Puesto Salario apuntador a bloque x apuntador a bloque x 2 2 3 3 3 FICHERO DE INDICE (entradas <K(i), P(i)>) 3 3 4 4 .... S. Velilla Univ. de Zaragoza Curso Tema I: Ficheros FICHERO DE DATOS Campo de agrupamiento FICHERO DE INDICE (entradas <K(i), P(i)>) 13 3 3 3 apuntador a bloque valor del campo de agrupamiento 5 5 5 5 apuntador a bloque 1 2 3 4 5 6 6 6 6 6 3 3 apuntador a bloque x apuntador a bloque x 4 4 4 5 5 5 14 15 apuntador a bloque 13 14 14 14 Indice de agrupamiento según el campo de ordenación numDpto del fichero Tema I: Ficheros Indice de agrupamiento con bloques individuales para cada grupo de registros que comparten el mismo valor del campo de agrupamiento 14 14 14 15 Curso 2010/2011 S. Velilla Univ. de Zaragoza 15 Tema I: Ficheros 5 5 5 apuntador a bloque x apuntador a bloque x 6 6 Curso 2010/2011 S. Velilla Univ. de Zaragoza 16 FICHERO DE INDICE (entradas <K(i), P(i)>) Campo de indización (clave secundaria) Apell_Nombre apuntador a bloque valor del campo de indización 1 2 3 4 5 6 7 8 FICHERO DE INDICE (entradas <K(i), P(i)>) FICHERO DE DATOS NIP 9 5 13 8 DNI FechaNac Puesto Salario valor del campo 1 2 3 4 5 6 8 24 10 20 1 6 5 2 5 5 1 6 3 12 7 19 22 Indice secundario según un campo no clave, implementado con un nivel de indirección (entradas del índice de longitud fija y valores únicos) S. Velilla Univ. de Zaragoza Curso Tema I: Ficheros 2010/2011 17 FICHERO DE DATOS NIP 2 5 PRIMER NIVEL (base) 2 8 15 24 SEGUNDO NIVEL (superior) 2 35 55 85 Apell_Nombre DNI FechaNac Puesto Salario 39 41 Índice primario ANG3795 167 COL31809 353 COL38358 211 DG139201 396 DG18807 256 FF245 442 LON2312 32 MER76016 300 RCA2626 77 WAR23699 132 51 52 55 58 63 66 71 78 80 82 Tema I: Ficheros 18 85 89 Curso 2010/2011 no tienen por qué ser información clave ejemplo: información de grabaciones musicales 35 36 85 Indice primario de dos niveles S. Velilla Univ. de Zaragoza Objetivo: acceso eficiente (“directo”) a los datos utilizando diversos criterios 15 21 44 46 55 63 71 80 2010/2011 8 12 24 29 35 39 44 51 Curso Tema I: Ficheros 6 3 8 3 3.3 - Organizaciones con varios índices secundarios: Ficheros invertidos. Campo de clave primaria FICHERO DE INDICE DE DOS NIVELES FechaNac Puesto Salario 6 8 4 1 4 23 18 14 Indice secundario denso según un campo clave que no determina la ordenación del fichero DNI 2 3 4 8 apuntador a bloque 21 11 16 2 17 18 19 20 21 22 23 24 FICHERO DE DATOS Apell_Nombre numDpto 3 5 1 6 6 15 3 17 9 10 11 12 13 14 15 16 Campo de indización S. Velilla Univ. de Zaragoza 19 Tema I: Ficheros 32 77 132 167 211 256 300 353 396 442 grabaciones (fichero directo) LON 2312 Romeo y Julieta Prokofiev ... RCA 2626 Cuarteto en do sostenido menor ... WAR 23699 Touchstone Corea ... ANG 3795 Sinfonía nº 9 Beethoven ... COL 38358 Nebrasca Springsteen ... DG 18807 Sinfonía nº 9 Beethoven ... MER 76016 Suite El gallo de oro Rimsky ... COL 31809 Sinfonía nº 9 Dvorak ... DG 139201 Concierto para violín Beethoven ... FF 245 Good News Sweet Honey In The ... Curso 2010/2011 S. Velilla Univ. de Zaragoza 20 Organizaciones con varios índices secundarios: Ficheros invertidos. Organizaciones con varios índices secundarios Solución: utilizar varios índices sobre los datos Problemas: • los índices secundarios tienen valores repetidos (salvo que sean clave) • la actualización/inserción/eliminación reactualizar todos los índices Densos, pues sólo puede haber una ordenación física • ref. absoluta • NRR ejemplo: acceso a la información musical por compositor Índice secundario BEETHOVEN BEETHOVEN BEETHOVEN BEETHOVEN COREA DVORAK PROKOFIEV RIMSKY_KORSAKOV SPRINGSTEEN SWEET HONEY IN THE R 167 396 256 77 132 353 32 300 211 442 o también acceso a través de índice secundario inversión del proceso de obtención de información Índice secundario ANG3795 BEETHOVEN DG139201 BEETHOVEN DG18807 BEETHOVEN RCA2626 BEETHOVEN WAR23699 COREA COL31809 DVORAK LON2312 PROKOFIEV MER75016 RIMSKY_KORSAKOV COL38358 SPRINGSTEEN SWEET HONEY IN THE R FF245 el fichero está invertido con respecto a la clave, para cada uno de los índices secundarios tipos clave primaria NRR Curso Tema I: Ficheros fichero invertido { fichero organizado a partir de índices secundarios basados en la clave primaria 2010/2011 S. Velilla Univ. de Zaragoza 21 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 22 Ficheros invertidos: implementación (1) Ficheros invertidos: ventajas implementación: la información del índice no tiene por qué estar en el dato (es redundante) • índice con valores no repetidos del campo listas de claves primarias un fichero totalmente invertido puede implementarse sólo con índices secundarios Índice secundario ANG3795 DG139201 BEETHOVEN WAR23699 COREA COL31809 DVORAK LON2312 PROKOFIEV MER75016 RIMSKY_KORSAKOV COL38358 SPRINGSTEEN SWEET HONEY IN THE R FF245 (no es interesante por razones de eficiencia y seguridad) ventajas: • totalmente invertido (se utilizan todos los campos) • parcialmente invertido (sólo se utilizan algunos campos) • acceso eficiente para diferentes criterios (campos) • se pueden responder a preguntas complejas sin acceder a los datos (operaciones con listas) DG18807 RCA2626 • solución más interesante: separar las listas del índice Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 23 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 24 Ficheros invertidos: implementación con listas invertidas Ficheros invertidos: implementación (2) ANG3795 DG139201 DG18807 RCA2626 Índice secundario BEETHOVEN COREA DVORAK PROKOFIEV RIMSKY_KORSAKOV SPRINGSTEEN SWEET HONEY IN THE R Índice secundario BEETHOVEN COREA DVORAK PROKOFIEV RIMSKY_KORSAKOV SPRINGSTEEN SWEET HONEY IN THE R WAR23699 COL31809 LON2312 MER75016 3 2 7 0 6 4 9 0 1 2 3 4 5 6 7 8 9 lista invertidas -1 LON2312 -1 RCA2626 -1 WAR23699 8 ANG3795 -1 COL38358 1 DG18807 -1 MER76016 -1 COL31809 5 DG139201 -1 FF245 COL38358 ventajas de las listas invertidas: FF245 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 25 2010/2011 S. Velilla Univ. de Zaragoza 26 Idea de búsqueda binaria en el índice o organización indexada como árbol binario de búsqueda Utilización de la clave primaria como referencia: inconveniente: Curso Tema I: Ficheros 3.4 - Estructuras de árbol y su utilización en las organizaciones indexadas: árboles B y B*. Ficheros invertidos: referencia de los datos ventajas: • gestión más eficiente (op. mantenimiento) • menor ocupación memoria respecto al índice como vector • mayor fiabilidad (es una redundancia) • no es necesario reorganizar el índice secundario en la eliminación • mayor independencia de la ubicación de los datos ventajas: • mayor eficiencia búsqueda (#) • mayor eficiencia en operaciones de mantenimiento Pb: • op. mantenimiento desbalanceo del árbol pérdida de eficiencia en la búsqueda • mayor coste de la búsqueda (hay que buscar en el índice primario) árboles 1-balanceados AVL gestión bastante simple y eficiente {altura máx. 1,44 log2(N+2) y | 1 reorg. local cada 2 inserciones y cada 4 eliminaciones y 1 reorganización no implica más de 5 reasignaciones} • no adecuado para tratamiento en bloques (ubicación no predecible del nodo en bloque) o demasiados accesos a bloques (hasta 1 por nodo) árboles binarios (AVL) paginados gestión eficiente (balanceo) bastante compleja árboles multicamino Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 27 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 28 Estructuras de árbol: árboles binarios paginados. Concepto de árbol B: definición (original) solución: árboles B (| multicamino de orden variable y balanceados) a m { nº mínimo de item por nodo árbol B de orden m (Bayer y McCreigth 1972) • los item (datos o claves) de cada nodo están ordenados por clave b c • la raíz tiene entre 1 y 2m item • el resto de los nodos tiene entre m y 2m item d h e i j f k g l m n • un nodo con k item tiene k+1 descendientes (excepto las hojas) el i-ésimo subárbol tiene todos los item con clave comprendida entre las claves (i-1)-ésima e i-ésima del nodo considerado (si existen) o • todos los nodos terminales (hojas) están al mismo nivel (completamente balanceado) 1 nodo por bloque factor ocupación (fC) > 50 % (| 70%) ejemplo de árbol binario paginado (3 nodos/bloque) Curso Tema I: Ficheros 2010/2011 S. Velilla Univ. de Zaragoza 29 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 30 S. Velilla Univ. de Zaragoza 32 Concepto de árbol B: definición (generalizada) árbol B de orden m (Knuth) m { nº máximo de descendientes por nodo • los item (datos o claves) de cada nodo están ordenados por clave = (m + 1) div 2 • la raíz tiene entre 2 y m descendientes • el resto de los nodos tiene entre (m-1) div 2 + 1 y m descendientes (excepto las hojas) • un nodo con k descendientes tiene k-1 item (excepto las hojas) el i-ésimo subárbol tiene todos los item con clave comprendida entre las claves (i-1)-ésima e i-ésima del nodo considerado (si existen) • todos los nodos terminales (hojas) están al mismo nivel (completamente balanceado) 1 nodo por bloque factor ocupación (fC) > 50 % (| 70%) altura (| nº de accesos) Tema I: Ficheros | 1 + logªp*mº ((N+1)/2) ejemplo de un árbol-B de órden 3 siendo p el factor de ocupación (bloque) Curso 2010/2011 S. Velilla Univ. de Zaragoza 31 Tema I: Ficheros Curso 2010/2011 ejemplo de inserción en un árbol B. (1) implementación (ejemplo 1): INSERCIÓN suponiendo un árbol B de orden 4 (knuth), realizar las operaciones de inserción de: C, D, S, T, A, M, P, I, B, W, N, G, U, R, K, E, H, O, L, J, Y, Q, V, X, Z maxClavesNodo = 3; minClavesNodo = (4-1) div 2 = 1; nClavesNodoIzqDiv = 4 div 2 = 2 (claves en el nodo de la izquierda al dividir un nodo) ins erción de C 0 ins erción de D 0 0 2 inserc ión de S, T C S división 0 C D C D S T 0 1 C D T árbol-B tras la inserción de 22, 41, 59, 57, 54, 33, 75, 124, 122, 123 en el árbol de la figura anterior S. Velilla Univ. de Zaragoza Curso Tema I: Ficheros 2010/2011 ejemplo de inserción en un árbol B. 33 2010/2011 ejemplo de inserción en un árbol B. (2) inserción de B 2 ins erción de W 2 S 2 S 0 D S 1 0 T 1 A C D M T 0 3 A C 0 P 2 ins erción de I A C Tema I: Ficheros M P 0 T inserción de B Curso T W 2 2 D S inserción de G D N S división 0 3 A B C 0 1 I M N P T W 3 A B C 4 I M 1 P T W 1 I M P 2010/2011 1 I M P 3 A C 3 A B C T D S 1 0 T 2 D S 3 1 I M P 1 M ins erc ión de de N N inserción ins erción de de P inserción D S 3 A B C división A C D (3) ins erc ión de M 2 0 34 2 D S ins erc ión de A S. Velilla Univ. de Zaragoza Curso Tema I: Ficheros T S. Velilla Univ. de Zaragoza 35 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 36 ejemplo de inserción en un árbol B. ins erc ión de G 2 inserción de inserción deU,R U,R D N S ejemplo de inserción en un árbol B. (4) (5) 2 D N S ins erc ión de E, H 7 N 0 3 A B C 4 G I M 1 P 0 T W 3 A B C 4 G I M 1 P R T U W 2 6 D K inserción de K inserción 0 D N S 3 A B C división 2 de K 2 D K N S 4 G I K M T U W 0 3 A B C 0 1 P R S 3 A B C 4 5 G I M 5 E G H I 4 M 1 P R T U W 1 P R T U W 7 N 7 N división división 2 6 D K 0 3 A B C mejora: S 5 G I 4 M redistribución con hermanos 1 P R T U W 2010/2011 ejemplo de inserción en un árbol B. ins erc ión de O, L, J 37 7 S 5 8 E G I J inserc ión de Y,Q, V, X, Z 4 L M Tema I: Ficheros Q S W 5 8 E G I J 4 L M 1 10 O P Curso 2010/2011 R 1 P R T U W Curso Tema I: Ficheros 2010/2011 S. Velilla Univ. de Zaragoza 38 pasos en la INSERCIÓN Si nºdatosNodo < (m-1) entonces guardar_en_nodo {colocar en posición correspondiente} si no Si hueco_en_hermano entonces redistribuir {con nodo hermano} afecta al nodo padre si no {división del nodo} crear_nuevo_nodo; afecta al nodo padre redistribuir_con_nuevo_nodo; insertar_en_nodo_padre(nuevo_dato); {promoción dato “central”} Fsi Si es la raíz nueva raíz 6 3 A B C 4 M 2) insertar en nodo: N 0 5 I siempre se comienza la inserción en las hojas T U W 7 D H K 8 E G Si datoEncontrado entonces fin {error, el dato ya existe} Fsi 1 O P R 2 S 1) buscar el dato (clave) descender hasta las hojas 6 D H K 3 3 A B C resumen de ideas: 2 A B C 0 6 D H K inserción en un árbol B : algoritmo básico (6) N 0 2 inserción de E,H S. Velilla Univ. de Zaragoza Curso Tema I: Ficheros 9 T U V S. Velilla Univ. de Zaragoza X Y Z 39 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 40 ejemplo de algoritmo de inserción en un árbol B. ejemplo de algoritmo de inserción en un árbol B. (1) constantes ordenArbol = 6; {nº máximo de descendientes de un nodo} nMinClvNodo = (ordenArbol - 1) div 2;{nº mínimo de claves en un nodo} nClvDivNodo = (ordenArbol) div 2; {nº claves de la pag.(nodo) Izqda. al dividir un nodo} nMaxClvNodo = ordenArbol - 1; {nº máximo de claves en un nodo} tipos refNodo = ^tp_Nodo; { implementación en memoria, para simplificar } tp_Item = registro clave: tp_Clave; valDato: tp_Dato; p: refNodo fReg; tp_Nodo = registro contItems: 0..nMaxClvNodo; p0: refNodo; item: vector[1..nMaxClvNodo] de tp_Item fReg; Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza ejemplo de algoritmo de inserción en un árbol B. 41 procedimiento ponEnArbol(a: refNodo; laClave: tp_Clave; ref. promocion: booleano; ref. v: tp_Item); variables k: entero; encontrado: booleano; q: refNodo; principio {la clave no está en la página a^; promocion=falso} si a = nil entonces promocion := true {el item no está en el árbol } si no buscaEnNodo(a, laClave, k, encontrado); si encontrado entonces promocion := falso si no {el item no está en la página} q := sucesor(item[k - 1]); ponEnArbol(q, laClave, promocion, v); si promocion entonces insertar(a, k, v, promocion) fsi fsi fsi fin; {ponEnArbol} Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza procedimiento insertarItem (ref. a: refNodo; valor u: tp_Item); variables q: refNodo; promocion: booleano; principio promocion := false; ponEnArbol(a, u.clave, promocion, u); si promocion entonces {crear nueva raíz con item u} q := a; nuevoDato(a); a^.contItems := 1; a^.p0 := q; a^.item[1] := u fsi; fin; Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza ejemplo de algoritmo de inserción en un árbol B. (3) (2) 42 (4) procedimiento insertar (a:refNodo; pos:entero; ref. u:tp_Item; ref. promocion:booleano); variables b: refNodo; principio si a^.contItems < nMaxClvNodo entonces { insertar u en la posición pos} promocion := false; si no {la pagina a^ está llena dividirla y promocionar item } nuevoDato(b); redistribuir_Items(a,b,u); {los de a^ y u en las páginas a^ y b^} fsi {devuelve en u el item a promocionar} fin; {de insertar} sólo aspectos básicos 43 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 44 ejemplo de eliminación en un árbol B. ejemplo de eliminación en un árbol B. (1) eliminar J implementación (ejemplo 2): ELIMINACIÓN 0 M suponiendo un árbol B de orden 6 (knuth), realizar las operaciones de eliminación de: J, M, R, A 2 1 D H maxClavesNodo = 5; minClavesNodo = (6-1) div 2 = 2; nClavesNodoIzqDiv = 6 div 2 = 3 (claves en el nodo de la izquierda al dividir un nodo) 3 Q U 5 4 A C situac ión inicial (2) E F 6 I K 7 8 N O P R S V W X Y Z 0 M eliminar M eliminar M 0 M intercam bio con hoja 2 1 D H Q U 2 1 D H 3 5 4 A C E F 6 I J K 7 N O P 8 R S V W X Y Z 4 3 A C S. Velilla Univ. de Zaragoza Curso Tema I: Ficheros Q U 2010/2011 ejemplo de eliminación en un árbol B. 45 5 E F 6 I K ejemplo de eliminación en un árbol B. (3) 2 6 elimin ar R D H 8 7 O P R S A C E F 6 I K Curso QW fusión 3 VWX Y Z S. Velilla Univ. de Zaragoza X Y Z 2 D H 8 S 2010/2011 S U V 1 7 O P 8 7 O P N Q U 5 4 6 I K 0 2 redistribución Tema I: Ficheros 5 E F eliminar A D H A C Q W eliminar A N 1 3 4 3 V W X Y Z 0 eliminar R 2 1 Q U I K (4) N D H 5 46 0 1 E F V W X Y Z S. Velilla Univ. de Zaragoza 2010/2011 N 4 R S Curso Tema I: Ficheros 0 A C 8 7 N O P 47 5 4 C E F Tema I: Ficheros 6 I K 7 O P 8 S U V Curso 2010/2011 X Y Z S. Velilla Univ. de Zaragoza 48 ejemplo de eliminación en un árbol B. eliminación en un árbol B : algoritmo básico (5) resumen de ideas: 0 N propagación de insuficiencia -> nueva fusión 1 3 1) buscar el dato (clave) o nodo en que está ubicado 2 H Si nodo = nil entonces fin {error, el dato no existe} Fsi QW 5 6 C D E F I K pasos en la ELIMINACIÓN 7 2) Si nodo no-terminal entonces intercambiar_Con_Mayor_Hijo_Ant Fsi siempre se comienza la eliminación en las hojas 8 O P S U V ó Menor_Hijo_Post X Y Z 3) eliminar de nodo: Si nºdatosNodo > (m-1) div 2 entonces quitar_del_nodo {recolocar el resto de los datos} si no Si dato_en_hermano entonces redistribuir {con nodo hermano} afecta al nodo padre si no {fusión con nodo hermano} añadir_datos_hermano; eliminar_nodo_hermano; eliminar_de_nodo_padre(nuevo_dato); {promoción de “hueco”} Fsi Si es la raíz disminuye un nivel 1 H N Q W disminuye altura 3 5 C D E F Tema I: Ficheros 6 I K 7 O P 8 S U V Curso 2010/2011 X Y Z S. Velilla Univ. de Zaragoza ejemplo de algoritmo de eliminación en un árbol B. 49 (1) Curso 2010/2011 S. Velilla Univ. de Zaragoza Curso 2010/2011 S. Velilla Univ. de Zaragoza ejemplo de algoritmo de eliminación en un árbol B. 50 (2) procedimiento borrar (a: refNodo; clv: tp_Clave; ref. promocion: booleano); variables posClv: entero; encontrado: booleano; rfHijoAnt: refNodo; principio { de borrar } si a = nil entonces promocion := falso {la clave no está en el arbol} si no buscaEnNodo(a, clv, posClv, encontrado); rfHijoAnt := sucesor(item[posClv - 1]); si encontrado entonces {encontrada, ahora se borra item[posClv] } si rfHijoAnt = nil entonces { a es una página terminal } eliminar_Item; promocion := a^.contItems < nMinClvNodo; si no ponMayorHijo(rfHijoAnt, a, posClv, promocion); si promocion entonces subocupacion(a, rfHijoAnt, posClv-1, promocion) fsi fsi si no {no encontrada, buscar en descendientes} borrar(clv, rfHijoAnt, promocion); si promocion entonces subocupacion(a, rfHijoAnt, posClv-1, promocion) fsi fsi fsi fin; {de borrar} procedimiento eliminarItem (ref. a: refNodo; laClave: tp_Clave); variables q: refNodo; promocion: booleano; principio promocion := falso; borrar(a, laClave, promocion); si promocion entonces {se ha eliminado dato de la raíz} si a^.contItems = 0 entonces {si no hay datos, disminuir nivel} q := a; a := q^.p0; disponer(q) fsi fsi fin; Tema I: Ficheros Tema I: Ficheros 51 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 52 árbol B : ejemplo de implementación. árbol B : evaluación. evaluación: ejercicio: Transformar los algoritmos anteriores (E.D. en memoria) para implementar un árbol B representado sobre un fichero. ideas: • cada nodo tiene E.D. Soporte o fichero directo (con operadores nuevoDato (nodo) y eliminarDato, . . .) acceso a dato dinámico o cargar dato en memoria (leerDato(f, nodo, pos)) + guardarlo si se ha modificado (o siempre para simplificar) m ref. de bloque + m-1 datos + nº datos (1 byte) ò m ref. de bloque + m-1 claves + m-1 ref. dato + nº datos (1 byte) • nº medio de accesos (k descendientes por nodo): A | h - (1/(k-1)) ejercicio: deducir las expresiones de la ocupación y número de accesos para un árbol B cuya raíz tiene z descendientes y el resto de los nodos k descendientes, y aplicarlo a un ejemplo concreto. mejoras: guardar en memoria varios nodos (“pool” de páginas) con bit de modificación política de reemplazo . . . eliminación de recursividad o referencias al padre y hermanos + pb.variables locales (bloque activación) • • • Curso Tema I: Ficheros 2010/2011 S. Velilla Univ. de Zaragoza mejora de prestaciones reducir nº de accesos a nodos 53 mejora de las prestaciones del árbol B. Curso Tema I: Ficheros 2010/2011 S. Velilla Univ. de Zaragoza 54 concepto de árbol B*. algunas ideas: objetivo: mantener un alto factor de ocupación (fC) de los nodos • mejorar redistribución en inserción y eliminación o pasar a fC | 85% • cambiar las reglas de fusión y división o árboles B* idea básica: • separar índice de datos n factor de bloque de los nodos • retrasar la división de un nodo hasta tener 2 llenos o redistribución • en la división, repartir los items de los 2 nodos entre 3 (los 2 + el nuevo) mínimo (fC) | 70% • implementar índices no-densos tratamiento especial de las hojas sin ref. a nodos y z orden secuencial indexada problema: la división del nodo raíz (no tiene hermanos) • tratamiento especial como árbol B • permitir que pueda ser más grande (hasta 4/3) o pb. repres. • árboles B de órden variable o gestión más compleja (| árboles B+ de prefijos simples) • aprovechar la memoria central o árboles B-virtuales (árboles B con buffer en memoria) • • • • otros tipos de árboles política de gestión páginas reestructuración periódica (copiar) Tema I: Ficheros • mantener niveles altos (raíz + ..) • últimos niveles LRU • soluciones intermedias LRU ponderando el nivel n factor de ocupación n ordenación de nodos (mejora acceso) Curso 2010/2011 S. Velilla Univ. de Zaragoza 55 árbol B* (Knuth) de orden m (nº máximo descendientes) | árbol B, excepto que: • los nodos tienen entre 2*(m-1) div 3 + 1 y m descendientes (excepto la raíz y las hojas) • la raíz tiene tratamiento especial Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 56 otras organizaciones indexadas basadas en árboles. otros tipos de árboles: tries { árbol m-ario (el orden m es la base empleada para representar la clave) cada camino desde la raíz a las hojas representa una clave • cada nodo interior consta de m ref. de nodo • cada hoja consta de m ref. a datos (índice denso) problemas: • claves de muy diferente longitud o ejemplo de un trie para una colección de nombres de tres letras (en inglés) de niños limitar altura del árbol representar nodo como lista • acomodación a los bloques H-tree { (dispersión + árbol B) variante en la que se eliminan algunos nodos hoja • • • Tema I: Ficheros S. Velilla Univ. de Zaragoza Curso 2010/2011 57 2010/2011 NRR 3.5 - Familia de árboles B+ y organización secuencial indexada objetivo: aprovechar las ventajas de las organizaciones idea básica: árbol B+ • indexada o búsqueda • secuencial o trat. secuencial ANNE CHLOE ELECT FRED 1 5 9 13 JANET LIZA MOLLY OLGA 17 21 25 29 POLLY RUTH VALER YVONN 33 37 41 45 Organización secuencial-indexada de un fichero árbol (| árbol B) sobre una secuencia (conjunto de secuencias ) • toda la información (claves ò datos) está en un conjunto encadenado de bloques (hojas) { conjunto secuencia • el árbol de acceso (| árbol B) está formado con copia de las claves (pueden estar repetidas), que actúan como separadores { conjunto índice ANNE JANET POLLY • tratamiento un poco diferente del árbol B (especialmente para las hojas) • la altura es algo menor que para el árbol B organización secuencial indexada { organización basada en un árbol B+ Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza -1 -1 -1 -1 59 Tema I: Ficheros S. Velilla Univ. de Zaragoza Curso Tema I: Ficheros Curso 2010/2011 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 37 39 40 41 42 43 44 45 46 58 ANNE BETTY CANDICE CAROL CHLOE CLEOPATRA DELILAH DIANA ELECTRA ELIZABETH ELLEN FLOSSY FRED GEORGIE GERT GRACIE JANET JUNE KRISTEN LARA LIZA LOUISE MABLE-SARAH MARY MOLLY NANCY NATALIA NEFERTITI OLGA PAM PATIENCE PENNY POLLY PRISCILLA PRUDENCE ROSEMARY SAMANTHA RUTH SCARLETT TAMMY VALERY VANESSA WILLY XANTHIPPE YVONNE ZOE S. Velilla Univ. de Zaragoza 60 NRR Fichero secuencial-indexado estructurado como un árbol B+ Organización secuencial-indexada de un fichero, con zona de desbordamiento ANNE CHLOE ELECT FRED JANET LIZA MOLLY OLGA 1 5 9 13 17 21 25 29 ANNE JANET POLLY POLLY RUTH VALER YVONN 33 37 41 45 -1 -1 -1 -1 Curso Tema I: Ficheros 2010/2011 ejemplo de inserción en un árbol B+ S. Velilla Univ. de Zaragoza 61 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 38 37 39 40 41 42 43 44 45 46 ANNE BETTY CANDICE CAROL CHLOE CLEOPATRA DELILAH DIANA ELECTRA ELIZABETH ELLEN FLOSSY FRED GEORGIE GERT GRACIE JANET JUNE KRISTEN LARA LIZA LOUISE MABLE-SARAH MARY MOLLY NANCY NATALIA NEFERTITI OLGA PAM PATIENCE PENNY POLLY PRISCILLA PRUDENCE ROSEMARY SAMANTHA RUTH SCARLETT TAMMY VALERY VANESSA WILLY XANTHIPPE YVONNE ZOE 102 100 103 zona de desbordamiento 100 101 102 103 S. Velilla Univ. de Zaragoza 2010/2011 ejemplo de inserción en un árbol B+ (1) 101 nuevos registros añadidos Curso Tema I: Ficheros LESLIE JOAN JENNIFER MARTA 62 (2) implementación (ejemplo 1): INSERCIÓN suponiendo un árbol B+ de orden 3 (knuth) para los nodos interiores, y de orden 4 para las hojas, realizar las operaciones de inserción de: R, U, A, N, S, E, L, T, V inserción de E maxClvNodoInt = 2; minClvNodoInt = (3-1) div 2 = 1; nClvNodoIntIzqDiv = 3 div 2 = 1 (claves en el nodo de la izquierda al dividir un nodo) maxClvNodoHoj = 3; minClvNodoHoj = (3+1) div 2 = 2; nClvNodoHojIzqDiv = (3+2) div 2 = 2 (claves en el nodo de la izquierda al dividir un nodo) inserción de L R A E N R A E L N R S U R S U división hoja inserción de T L R inserción de R, U, A A R U inserción de N A N R U inserción de S Inserción de R división hoja S A E A N Tema I: Ficheros R U Curso 2010/2011 L S R A N S. Velilla Univ. de Zaragoza L N R S U A E L N R S T U R S U 63 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 64 ejemplo de inserción en un árbol B+ ejemplo de eliminación en un árbol B+ (3) (1) implementación (ejemplo 2): ELIMINACIÓN inserción de V A E división hoja L S L N R S T U V L S U A E suponiendo un árbol B+ de orden 3 (knuth) para los nodos interiores, y de orden 4 para las hojas, realizar las operaciones de eliminación de: E, S, G L N R S T U V R situación unicial S E L división nodo L U A B A E L N R S T S. Velilla Univ. de Zaragoza 2010/2011 ejemplo de eliminación en un árbol B+ 65 G H U V X L A B H U V X 66 (3) R eliminación de G R S S. Velilla Univ. de Zaragoza Curso 2010/2011 V L N R U V X R eliminación de G R eliminac ión de S R S ejemplo de eliminación en un árbol B+ (2) U L N L N Tema I: Ficheros R E L A B E G H U V Curso Tema I: Ficheros eliminac ión de E U o también E L A B Tema I: Ficheros G H E V L N R U Curso 2010/2011 A B V X S. Velilla Univ. de Zaragoza 67 Tema I: Ficheros H L N V R U Curso 2010/2011 V X S. Velilla Univ. de Zaragoza 68 árbol B+ : evaluación. árbol B+ : evaluación. evaluación: • cada nodo hoja : m-1 datos + 1 ref. de bloque(hermano) + nº datos y tipo (2 bytes) • cada nodo interior : m-1 claves + m ref. de bloque(hijos) + nº datos y tipo (2 bytes) Implementación de operadores de recorrido (primero, siguiente) más eficiente que en árbol-B tipo: nodo hoja o interior • nº accesos : = altura árbol | árbol B en general es mejor el índice separado (fichero datos + fichero índice) • mayor eficiencia en organización secuencial (incluso contigua) • mayor seguridad (recuperabilidad frente a errores) • reconstrucción simple y eficiente del índice a partir del fichero de datos pb.: las referencias del último nivel son a otro fichero ejercicio: deducir las expresiones de la ocupación y número de accesos para un árbol B+ cuya raíz tiene z descendientes y el resto de los nodos k descendientes, y aplicarlo al mismo ejemplo que el desarrollado para el árbol B. Comparar los resultados obtenidos. reestructuración periódica para mantener (o mejorar) prestaciones • fichero índice • fichero datos Similar al árbol B. Se parte del cálculo de las hojas. Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza implementación de índices secundarios simple 69 árboles B+ de prefijos simples Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 70 árboles B+ de prefijos simples: ejemplo (1) mejora de prestaciones reducir nº de accesos a nodos conjunto índice representar parte de la clave (prefijo) aumenta el factor de bloque árboles B+ de prefijos simples { orden variable (gestión un poco + compleja) implementación de operaciones similar Implementación de índices con claves repetidas (secundarios, agrupamiento, etc.): relativamente simple diferentes soluciones (compromiso prestaciones-coste) Un conjunto índice en forma de árbol B para el conjunto de secuencias, que forma un árbol B+ de prefijos simples Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 71 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 72 árboles B+ de prefijos simples : ejemplo (2) árboles B+ de prefijos simples : ejemplo (3) Una inserción dentro del bloque 1 provoca una división y la consecuente adición del bloque 7. La adición de un bloque en el conjunto de secuencias requiere un nuevo separador en el conjunto índice (AY). Este separador provoca la división del nodo y la promoción de BO a la raíz. La eliminación de los registros EMBRY y FOLKS del conjunto de secuencias no altera el conjunto índice Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 73 árboles B+ de prefijos simples : ejemplo (4) Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 74 árboles B+ de prefijos simples : implementación ejemplo de implementación de un nodo: Una eliminación en el bloque 2 provoca insuficiencia y la consecuente concatenación de los bloques 2 y 3 (el bloque 3 se puede colocar en la lista de disponibles). Esta eliminación de un bloque conlleva eliminar el separador correspondiente (CAM), lo que provoca una insuficiencia y la consecuente reorganización del conjunto índice. Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 75 Tema I: Ficheros Curso 2010/2011 S. Velilla Univ. de Zaragoza 76