Está en la página 1de 19

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,


3.1 - Organizaciones para acceso directo: ficheros relativos. implementando un acceso “directo” a los datos
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:
clave: pequeña porción de información que identifica (nivel lógico) un dato
ficheros invertidos.
• Propia es única para cada dato
3.4 - Estructuras de árbol y su utilización en las organizaciones • Añadida ¿ y si hay valores repetidos ?
indexadas: árboles B y B*.
fichero relativo { fichero en el que existe una relación “predecible” entre
3.5 - Familia de árboles B+ y organización secuencial indexada. la clave de un dato y su ubicación física.
R(clave) o ubicación física, siendo R una función de cálculo de direcciones
Organización ligada a la clave
Curso S. Velilla 1 Curso S. Velilla 2
Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

ficheros relativos: tipos y operadores básicos ficheros relativos: ficheros directos con mapeo absoluto
la implementación de la función R o diferentes tipos de ficheros relativos :
ficheros directos:
• “mapeo” directo o ficheros directos
• “mapeo” directo absoluto: Ÿ clave { dirección física
• búsqueda en directorio o ficheros indexados
• cálculo de direcciones o ficheros dispersos ventajas: • simplicidad ( cálculo direcciones) y eficiencia

inconvenientes: • dependencia de la representación física o registros “pinchados” (pinned)


operadores básicos: • Asociar (f, nombre) dificultad de reestructuración y gestión del espacio de almacenamiento
• Disociar (f)
• la clave no es adecuada (no tiene relación con la información del dato)
• LeerDato (f, clave, d, exito) Pb. semántico: ¿cómo se implementa la existencia de un dato ?
• EscribirDato (f, clave, d, exito) responsabilidad del usuario ?
no se suele usar
• EliminarDato (f, clave, exito)
• • •
¿ y para obtener todos los datos ? PrimerDato(f,d,exito) + SiguienteDato (f,d,exito)
Op. secuenciales
Curso S. Velilla 3 Curso S. Velilla 4
Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
ficheros relativos: ficheros directos con mapeo relativo ficheros directos: ejemplos de implementación

ficheros directos: casi todos los gestores incluyen ficheros directos con operadores
• “mapeo” directo relativo: Ÿ clave { dirección relativa (NRR) de “bajo nivel” ( relación con la información de los datos) e incluyen los
operadores de tratamiento secuencial
ventajas: • bastante simple y eficiente

inconvenientes: • la clave puede no tener relación con la información del dato (suele ser en int fseek (FILE *fichero, long direcciónRelativa, int origen)
siendo origen = SEEK_SET (=principio), SEEK_CUR (=actual), o SEEK_END (=final)
algo añadido) C
• implementación un poco más compleja
long ftell (FILE *fichero) (devuelve la posición actual, o -1L si hay error)
• marca de borrado (costoso)
la no existencia de un dato o en la op. de creación, o
• dirección no existente responsab. del usuario int fsetpos (FILE *fichero, const fpos_t * ptrDir)
Sitúa el "fichero" en la posición almacenada en *ptrtDir por la función fgetpos. Devuelve 0 si no error.
implementación: • contigua o eficiente, pero muy poco adecuada (en general)
int fgetpos (FILE *fichero, fpos_t * ptrDir)
• directa (pb. tamaño y gestión) copia en *ptrtDir la posición actual sobre el "fichero", para uso posterior con fsetpos. Devuelve 0 si no error.
• “tabla” de traducción • lista encadenada (versátil, pero menos eficiente)
• multinivel (compromiso adecuado eficiencia-eficacia) void rewind (FILE *fichero) { rewind(f) = fseek(f,0L,SEEK_SET}

Curso S. Velilla 5 Curso S. Velilla 6


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

3.2 - Concepto de índice. Técnicas de indexación de ficheros. Concepto de índice: ejemplo


Organización indexada
Objetivo: utilizar como clave una abstracción de la información del dato Información de personas. Como clave se usará el DNI (identifica una persona)
representar explícitamente la relación entre
búsqueda en directorio { NRR
valores de la clave y la ubicación física del dato dni dirDato nombre dni teléfono
11453678 4 0 Santiago Rivas 19900430 331234
INDICE | VECTOR (tabla) de registros • absoluta
12566780 7 1 Marisa Sampedro 14765876 127890
• relativa (NRR)
13452779 9 2 Rosa Asensio 17890987 336533
13654109 8 3 Antonio Abad 15555098 335555
14765876 1 4 Jose Pérez 11453678 374167
fichero indexado { fichero cuya organización está basada en un índice (o más) 15555098 3 5 Concepción Sanz 19994563 401221
17890987 2 6 Andrés Costa 18907655 808188
18907655 6 7 Pedro Gutiérrez 12566780 447634
acceso al dato Ÿ 2 pasos : búsqueda en índice + acceso al dato 19900430 0 8 Agapito López 13654109 123400
19994563 5 9 Andrés Ruiz 13452779 551230
suelen implementarse en base a dos ficheros: f. índice + f. datos
pueden estar integrados en un único fichero (reg. diferentes)
índice datos

Curso S. Velilla 7 Curso S. Velilla 8


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
Concepto de índice: ventajas/inconvenientes. Concepto de índice: índice denso y no-denso
Operadores básicos.
ventajas: • menor tamaño del índice Ÿ mayor eficiencia búsqueda (n factor de bloque)
podría caber en memoria una entrada de índice por cada dato { índice denso
• 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) Solución: elegir un subconjunto de claves Ÿ ordenación (parcial) de los datos por la clave
• permite acceso directo (eficiente) a los datos utilizando cualquier campo clave,
NRR nombre dni teléfono
incluso simultáneamente (varios índices)
• permite mantener una (o varias) ordenación lógica de los datos sin moverlos 0 Jose Pérez 11453678 374167
índice no-denso 1 Pedro Gutiérrez 12566780 447634
el mantenimiento del orden es muy eficiente
Andrés Ruiz 13452779 551230

Ordenados por DNI


2
dni dirDato 3 Agapito López 13654109 123400
inconveniente: • operaciones de procesamiento secuencial (afectan a muchos datos) son más lentas 11453678 0 4 Marisa Sampedro 14765876 127890
13654109 3 5 Antonio Abad 15555098 335555
19900430 8
6 Rosa Asensio 17890987 336533
operadores básicos: • LeerDato (f, clave, d, exito) • PrimeraClave (f, clave, exito) 7 Andrés Costa 18907655 808188
• Asociar (f, nombre) • EscribirDato (f, clave, d, exito) • SiguienteClave (f, clave, exito) Se puede aprovechar la 8 Santiago Rivas 19900430 331234
• Disociar (f) • EliminarDato (f, clave, exito) o dato (pero a través de la clave) organización física en bloques 9 Concepción Sanz 19994563 401221
Curso S. Velilla 9 Curso S. Velilla 10
Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 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
el tratamiento de los datos se hace en bloques Ÿ en el índice la ref. del bloque • seguridad

Bloque “ ancla ” { primer bloque de la subsecuencia acceso al índice y a los datos


más complejas y menos eficientes (a veces) con índices no-densos
FICHERO
ordenado no ordenado
 el coste de la búsqueda (aun binaria) no tiene por qué ser despreciable
ordenado posible IS3
denso
INDICE

no ordenado fichero
IS3 { índice secuencial tipo AS400 Ejemplo: aplicación al diseño de una organización indexada sencilla
ordenado VSAM ISAM
{ secuencial indexado IBM
UFAS ISAM
no denso • • • •
VSAM { secuencial indexado regular IBM
no ordenado posible UFAS { secuencial indexado BULL
Curso S. Velilla 11 Curso S. Velilla 12
Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
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 FICHERO DE INDICE


(entradas <K(i), P(i)>)
Acosta, Beatriz
Acosta, Roberto
.....
Clave primaria apuntador Aguilar, Amelia
del ancla del bloque a bloque
• índice primario { se utiliza la clave (primaria) del dato Abad, Adriana
Aguilera, Héctor
Aguilera, Santiago
Acosta, Beatriz .....
Aguilera, Héctor Albiol, Sonia
• índice de agrupamiento { se utiliza un campo de ordenación del dato Alcalá, Enrique
Aranda, María Alcalá, Enrique
.... Alcántara, Silvia

• índice secundario { se utiliza la cualquier otro campo (clave o no) .... Amaya, Francisco
.....

Aranda, María
.... Atarés, Rosendo
.....

Si todavía es muy grande el índice o nuevo índice sobre el índice Yáñez, Francisco
Azuara, Roberto

Zapata, Luis
....
Yáñez, Francisco
índice multinivel Yáñez, Rita
.....
Zamora, Angel

aumenta la eficiencia de la búsqueda, pero complica la gestión Indice primario según el campo de Zapata, Luis
Zapatero, Antonio
clave de ordenación del fichero (no-denso) .....
Zubiaurre, Abelardo

Curso S. Velilla 13 Curso S. Velilla 14


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

FICHERO DE DATOS FICHERO DE DATOS


Campo de agrupamiento Campo de agrupamiento
numDpto Apell_Nombre DNI FechaNac Puesto Salario numDpto Apell_Nombre DNI FechaNac Puesto Salario
1 1
1 1
1
2 apuntador a bloque x
2
FICHERO DE INDICE 2
(entradas <K(i), P(i)>) 3
3 apuntador a bloque x
apuntador
valor del campo 3
a bloque FICHERO DE INDICE
de agrupamiento
(entradas <K(i), P(i)>) 3
1 3 3
2 3 3
3 4 apuntador a bloque
4 4 valor del campo apuntador
de agrupamiento a bloque 3
5
6 5 3
.... 5
5
1 apuntador a bloque x
2
.... 5
3 4
4 4
6 5 4
.... 6 6 apuntador a bloque x
6
6 5
14 5
15 5
apuntador a bloque
13
5
14
5
14
5
14 Indice de agrupamiento con bloques individuales apuntador a bloque x
Indice de agrupamiento según el campo 14 para cada grupo de registros que comparten el 6
14
de ordenación numDpto del fichero 14
mismo valor del campo de agrupamiento 6

15 apuntador a bloque x

Curso S. Velilla 15 Curso S. Velilla 16


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
FICHERO DE INDICE Campo de indización FICHERO DE DATOS FICHERO DE INDICE FICHERO DE DATOS
Campo de indización
(entradas <K(i), P(i)>) (clave secundaria) (entradas <K(i), P(i)>)
apuntador Apell_Nombre NIP DNI FechaNac Puesto Salario Apell_Nombre numDpto DNI FechaNac Puesto Salario
valor del campo
de indización a bloque
9 3
5
1 5
1
2 13
6
3 8
4
2
5 6 3
apuntador
6 15 a bloque 4
7 3 valor del campo
8
8 17
1 6
9 21 2 8
10 11 3 4
11 16 4 1
12 2 5
13 6 6
14 24 8 5
15 10 2
16 20 5
1
17 5
18 4 1
19 23 6
20 18 3
21 14
22 6
3
23 12
8
24 7
3
Indice secundario denso según un campo clave 19 Indice secundario según un campo no clave, implementado con
22
que no determina la ordenación del fichero un nivel de indirección (entradas del índice de longitud fija y valores únicos)
Curso S. Velilla 17 Curso S. Velilla 18
Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

FICHERO DE DATOS
FICHERO DE INDICE DE DOS NIVELES Campo de clave primaria
NIP
2
Apell_Nombre DNI FechaNac Puesto Salario 3.3 - Organizaciones con varios índices secundarios:
PRIMER NIVEL
5 Ficheros invertidos.
(base) 8
12
2
8
15
15
21
Objetivo: acceso eficiente (“directo”) a los datos utilizando diversos criterios
24
SEGUNDO NIVEL 24 no tienen por qué ser
(superior) 29
ejemplo: información de grabaciones musicales información clave
35
35 36
39
44 39 grabaciones (fichero directo)
2 51 41
35 Índice primario 32 LON 2312 Romeo y Julieta Prokofiev ...
55 44
85 46 ANG3795 167 77 RCA 2626 Cuarteto en do sostenido menor ...
55 51
COL31809 353 132 WAR 23699 Touchstone Corea ...
63 52 COL38358 211
71
DG139201 396 167 ANG 3795 Sinfonía nº 9 Beethoven ...
80 55
58
DG18807 256 211 COL 38358 Nebrasca Springsteen ...
63
66
FF245 442 256 DG 18807 Sinfonía nº 9 Beethoven ...
85 LON2312 32 300 MER 76016 Suite El gallo de oro Rimsky ...
71
78 MER76016 300
353 COL 31809 Sinfonía nº 9 Dvorak ...
80
RCA2626 77
82 WAR23699 132 396 DG 139201 Concierto para violín Beethoven ...
Indice primario de dos niveles 85 442 FF 245 Good News Sweet Honey In The ...
89

Curso S. Velilla 19 Curso S. Velilla 20


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
Organizaciones con varios índices secundarios Organizaciones con varios índices secundarios: Ficheros
invertidos.
Solución: utilizar varios índices sobre los datos Problemas: • los índices secundarios tienen valores repetidos (salvo que sean clave)
Densos, pues sólo puede haber una ordenación física • la actualización/inserción/eliminación Ÿ reactualizar todos los índices
• ref. absoluta
• NRR
ejemplo: acceso a la información musical por compositor
acceso a través de índice secundario Ÿ inversión del proceso de
Índice secundario Índice secundario
obtención de información
BEETHOVEN 167 BEETHOVEN ANG3795
BEETHOVEN 396 BEETHOVEN DG139201
BEETHOVEN 256 BEETHOVEN DG18807 fichero invertido { fichero organizado a partir de
BEETHOVEN 77 BEETHOVEN RCA2626 índices secundarios basados en la clave primaria
COREA 132 COREA WAR23699
DVORAK 353 o DVORAK COL31809
32 LON2312
el fichero está invertido con respecto a la clave, para cada uno de los índices secundarios
PROKOFIEV también PROKOFIEV
RIMSKY_KORSAKOV 300 RIMSKY_KORSAKOV MER75016
SPRINGSTEEN 211 SPRINGSTEEN COL38358 • totalmente invertido (se utilizan todos los campos)
SWEET HONEY IN THE R 442 SWEET HONEY IN THE R FF245 tipos
• parcialmente invertido (sólo se utilizan algunos campos)
NRR clave primaria
Curso S. Velilla 21 Curso S. Velilla 22
Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

Ficheros invertidos: ventajas Ficheros invertidos: implementación (1)

la información del índice no tiene por qué estar en el dato (es redundante) implementación:
• índice con valores no repetidos del campo Ÿ listas de claves primarias
un fichero totalmente invertido puede
implementarse sólo con índices secundarios
Índice secundario
(no es interesante por razones de eficiencia y seguridad) BEETHOVEN ANG3795 DG139201 DG18807 RCA2626
COREA WAR23699
DVORAK COL31809
ventajas: PROKOFIEV LON2312
• acceso eficiente para diferentes criterios (campos)
RIMSKY_KORSAKOV MER75016
• se pueden responder a preguntas complejas sin acceder a los datos SPRINGSTEEN COL38358
(operaciones con listas) SWEET HONEY IN THE R FF245

• solución más interesante: separar las listas del índice

Curso S. Velilla 23 Curso S. Velilla 24


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
Ficheros invertidos: implementación (2) Ficheros invertidos: implementación con listas
invertidas

ANG3795 lista invertidas


Índice secundario DG139201 Índice secundario
0 LON2312 -1
BEETHOVEN DG18807 BEETHOVEN 3 1 RCA2626 -1
COREA RCA2626 COREA 2 2 WAR23699 -1
DVORAK DVORAK 7 3 ANG3795 8
PROKOFIEV WAR23699 PROKOFIEV 0 4 COL38358 -1
RIMSKY_KORSAKOV RIMSKY_KORSAKOV 6 5 DG18807 1
SPRINGSTEEN COL31809 SPRINGSTEEN 4 6 MER76016 -1
SWEET HONEY IN THE R SWEET HONEY IN THE R 9 7 COL31809 -1
LON2312
8 DG139201 5
MER75016 9 FF245 -1

COL38358

FF245 ventajas de las • gestión más eficiente (op. mantenimiento)


listas invertidas: • menor ocupación memoria

Curso S. Velilla 25 Curso S. Velilla 26


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

Ficheros invertidos: referencia de los datos 3.4 - Estructuras de árbol y su utilización en las
organizaciones indexadas: árboles B y B*.

Utilización de la clave primaria como referencia: Idea de búsqueda binaria en el índice o organización indexada como árbol binario de búsqueda

respecto al índice como vector


ventajas: • mayor fiabilidad (es una redundancia)
• no es necesario reorganizar el índice secundario en la eliminación ventajas: • mayor eficiencia búsqueda (#)
• mayor independencia de la ubicación de los datos • mayor eficiencia en operaciones de mantenimiento

inconveniente: • mayor coste de la búsqueda (hay que buscar en el índice primario) Pb: • op. mantenimiento Ÿ desbalanceo del árbol Ÿ pérdida de eficiencia en la búsqueda

á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

Curso S. Velilla 27 Curso S. Velilla 28


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
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 e f g
• 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)
h i j k l m n 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 S. Velilla 29 Curso S. Velilla 30


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

Concepto de árbol B: definición (generalizada)

m { nº máximo de descendientes por nodo


árbol B de orden m (Knuth)
• los item (datos o claves) de cada nodo están ordenados por clave
• la raíz tiene entre 2 y m descendientes = (m + 1) div 2
• 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) | 1 + logªp*mº ((N+1)/2) siendo p el factor de ocupación (bloque) ejemplo de un árbol-B de órden 3

Curso S. Velilla 31 Curso S. Velilla 32


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
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 ins erción de D inserc ión de S, T 2


S
0 0 0 0 división
C 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

Curso S. Velilla 33 Curso S. Velilla 34


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

ejemplo de inserción en un árbol B. (2) ejemplo de inserción en un árbol B. (3)

inserción de B 2 ins erción de W 2


D S D S
ins erc ión de A ins erc ión de M
2 2
2 0 3 1 0 3 1
S S D S A B C I M P T A B C I M P T W
división
Ÿ
0 1 0 1 0 3 1
A C D T A C D M T A C M T

ins erc ión de de


inserción N N 2 2
D S D N S inserción de G
división
ins erción de de
inserción P P 2 ins erción de I 2 Ÿ
D S D S
inserción de B 0 3 1 0 3 4 1
A B C I M N P T W A B C I M P T W
0 3 1 0 3 1
A C M P T A C I M P T

Curso S. Velilla 35 Curso S. Velilla 36


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
ejemplo de inserción en un árbol B. (4) ejemplo de inserción en un árbol B. (5)

ins erc ión de G 2 inserción de


inserción deU,R
U,R 2
D N S D N S
ins erc ión de E, H 7
N
0 3 4 1 0 3 4 1
A B C G I M P T W A B C G I M P R T U W
2 6
D K S

inserción de K
inserción de K 2
división 2
D N S D K N S
Ÿ 0
A B C
3
E G H I
5
M
4
P R
1
T U W
0 3 4 1 0 3 5 4 1
A B C G I K M P R T U W A B C G I M P R T U W
7
7 N
N
división 2 6

división 2 6 Ÿ D H K S
Ÿ D K S mejora:
redistribución
0 3 8 5 4 1
0 3 5 4 1
con hermanos A B C E G I M P R T U W
A B C G I M P R T U W
inserción de E,H

Curso S. Velilla 37 Curso S. Velilla 38


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

ejemplo de inserción en un árbol B. (6) inserción en un árbol B : algoritmo básico


ins erc ión de O, L, J 7
N resumen de ideas: pasos en la INSERCIÓN

2 6
1) buscar el dato (clave) Ÿ descender hasta las hojas
D H K S Si datoEncontrado entonces fin {error, el dato ya existe} Fsi

0 3 8 5 4 1
siempre se comienza la inserción en las hojas
A B C E G I J L M O P R T U W
2) insertar en nodo:
Si nºdatosNodo < (m-1)
entonces guardar_en_nodo {colocar en posición correspondiente}
inserc ión de Y,Q, V, X, Z 7 si no Si hueco_en_hermano entonces redistribuir {con nodo hermano}
N
si no {división del nodo} afecta al nodo padre
crear_nuevo_nodo; afecta al nodo padre
2 6
D H K Q S W redistribuir_con_nuevo_nodo;
insertar_en_nodo_padre(nuevo_dato); {promoción dato “central”}
0 3 8 5 4 10 1 9
Fsi Si es la raíz Ÿ nueva raíz
A B C E G I J L M O P R T U V X Y Z

Curso S. Velilla 39 Curso S. Velilla 40


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
ejemplo de algoritmo de inserción en un árbol B. (1) ejemplo de algoritmo de inserción en un árbol B. (2)

constantes
ordenArbol = 6; {nº máximo de descendientes de un nodo}
nMinClvNodo = (ordenArbol - 1) div 2;{nº mínimo de claves en un nodo} procedimiento insertarItem (ref. a: refNodo; valor u: tp_Item);
nClvDivNodo = (ordenArbol) div 2; {nº claves de la pag.(nodo) Izqda. al dividir un nodo} variables q: refNodo;
nMaxClvNodo = ordenArbol - 1; {nº máximo de claves en un nodo} promocion: booleano;
tipos principio
refNodo = ^tp_Nodo; { implementación en memoria, para simplificar } promocion := false;
tp_Item = registro ponEnArbol(a, u.clave, promocion, u);
clave: tp_Clave; si promocion entonces {crear nueva raíz con item u}
valDato: tp_Dato; q := a; nuevoDato(a);
p: refNodo a^.contItems := 1; a^.p0 := q; a^.item[1] := u
fReg; fsi;
tp_Nodo = registro fin;
contItems: 0..nMaxClvNodo;
p0: refNodo;
item: vector[1..nMaxClvNodo] de tp_Item
fReg;

Curso S. Velilla 41 Curso S. Velilla 42


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

ejemplo de algoritmo de inserción en un árbol B. (3) ejemplo de algoritmo de inserción en un árbol B. (4)

procedimiento ponEnArbol(a: refNodo; laClave: tp_Clave;


ref. promocion: booleano; ref. v: tp_Item);
procedimiento insertar (a:refNodo; pos:entero;
variables k: entero; encontrado: booleano; q: refNodo;
ref. u:tp_Item; ref. promocion:booleano);
principio {la clave no está en la página a^; promocion=falso}
variables b: refNodo;
si a = nil
principio
entonces promocion := true {el item no está en el árbol }
si a^.contItems < nMaxClvNodo
si no
entonces { insertar u en la posición pos} promocion := false;
buscaEnNodo(a, laClave, k, encontrado);
si no {la pagina a^ está llena Ÿ dividirla y promocionar item }
si encontrado
nuevoDato(b);
entonces promocion := falso
redistribuir_Items(a,b,u); {los de a^ y u en las páginas a^ y b^}
si no {el item no está en la página}
fsi {devuelve en u el item a promocionar}
q := sucesor(item[k - 1]);
fin; {de insertar}
ponEnArbol(q, laClave, promocion, v);
si promocion entonces insertar(a, k, v, promocion) fsi
fsi
fsi sólo aspectos básicos
fin; {ponEnArbol}

Curso S. Velilla 43 Curso S. Velilla 44


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
ejemplo de eliminación en un árbol B. (1) ejemplo de eliminación en un árbol B. (2)

eliminar J 0
implementación (ejemplo 2): ELIMINACIÓN M

suponiendo un árbol B de orden 6 (knuth), realizar las operaciones de eliminación de: 1 2


J, M, R, A D H Q U

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 4 5 6 7 8
A C E F I K N O P R S V W X Y Z

situac ión inicial 0


M
eliminar M 0
eliminar M M
intercam bio con hoja
1 2
D H Q U
1 2
D H Q U

3 4 5 6 7 8
A C E F I J K N O P R S V W X Y Z
3 4 5 6 7 8
A C E F I K N O P R S V W X Y Z

Curso S. Velilla 45 Curso S. Velilla 46


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

ejemplo de eliminación en un árbol B. (3) ejemplo de eliminación en un árbol B. (4)

0
0
N N

1 2
1 2
D H Q U D H Q W

4 5 6 7 8
3 4 5 6 7 8
A C E F I K O P R S V W X Y Z A C E F I K O P S U V X Y Z

elimin ar R 0 eliminar A 0
eliminar A
eliminar R N N

1 2 1 2
D H Q U D H QW

redistribución fusión
3 4 5 6 7 8 3 4 5 6 7 8
A C E F I K O P S VWX Y Z C E F I K O P S U V X Y Z

Curso S. Velilla 47 Curso S. Velilla 48


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
ejemplo de eliminación en un árbol B. (5) eliminación en un árbol B : algoritmo básico
0
N resumen de ideas: pasos en la ELIMINACIÓN
propagación de insuficiencia
-> nueva fusión
1) buscar el dato (clave) o nodo en que está ubicado
1 2
H QW Si nodo = nil entonces fin {error, el dato no existe} Fsi ó Menor_Hijo_Post

2) Si nodo no-terminal entonces intercambiar_Con_Mayor_Hijo_Ant Fsi


3
C D E F
5
I K
6
O P
7
S U V
8
X Y Z
siempre se comienza la eliminación en las hojas
3) eliminar de nodo:
Si nºdatosNodo > (m-1) div 2
1
entonces quitar_del_nodo {recolocar el resto de los datos}
disminuye altura H N Q W si no Si dato_en_hermano entonces redistribuir {con nodo hermano}
si no {fusión con nodo hermano} afecta al nodo padre
3 5 6 7 8
añadir_datos_hermano;
C D E F I K O P S U V X Y Z eliminar_nodo_hermano;
eliminar_de_nodo_padre(nuevo_dato); {promoción de “hueco”}
Fsi Si es la raíz Ÿ disminuye un nivel

Curso S. Velilla 49 Curso S. Velilla 50


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

ejemplo de algoritmo de eliminación en un árbol B. (1) ejemplo de algoritmo de eliminación en un árbol B. (2)

procedimiento borrar (a: refNodo; clv: tp_Clave; ref. promocion: booleano);


variables posClv: entero; encontrado: booleano;
rfHijoAnt: refNodo;
procedimiento eliminarItem (ref. a: refNodo; laClave: tp_Clave); principio { de borrar }
variables q: refNodo; si a = nil entonces promocion := falso {la clave no está en el arbol}
promocion: booleano; si no
buscaEnNodo(a, clv, posClv, encontrado);
principio
rfHijoAnt := sucesor(item[posClv - 1]);
promocion := falso; si encontrado
borrar(a, laClave, promocion); entonces {encontrada, ahora se borra item[posClv] }
si promocion entonces {se ha eliminado dato de la raíz} si rfHijoAnt = nil entonces { a es una página terminal }
si a^.contItems = 0 entonces {si no hay datos, disminuir nivel} eliminar_Item; promocion := a^.contItems < nMinClvNodo;
q := a; a := q^.p0; disponer(q) si no
ponMayorHijo(rfHijoAnt, a, posClv, promocion);
fsi
si promocion entonces subocupacion(a, rfHijoAnt, posClv-1, promocion) fsi
fsi fsi
fin; 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}

Curso S. Velilla 51 Curso S. Velilla 52


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
árbol B : ejemplo de implementación. árbol B : evaluación.

evaluación:
ejercicio: Transformar los algoritmos anteriores (E.D. en memoria) para implementar
m ref. de bloque + m-1 datos + nº datos (1 byte)
un árbol B representado sobre un fichero. • cada nodo tiene ò
m ref. de bloque + m-1 claves + m-1 ref. dato + nº datos (1 byte)

ideas:  E.D. Soporte o fichero directo (con operadores nuevoDato (nodo) y eliminarDato, . . .)
• nº medio de accesos (k descendientes por nodo): A | h - (1/(k-1))
 acceso a dato dinámico o cargar dato en memoria (leerDato(f, nodo, pos))
+ guardarlo si se ha modificado (o siempre para simplificar)
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
mejoras:  guardar en memoria varios nodos (“pool” de páginas) con bit de modificación aplicarlo a un ejemplo concreto.
política de reemplazo . . .

 eliminación de recursividad o referencias al padre y hermanos


mejora de prestaciones Ÿ reducir nº de accesos a nodos
+ pb.variables locales (bloque activación)
• • •
Curso S. Velilla 53 Curso S. Velilla 54
Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

mejora de las prestaciones del árbol B. 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* • retrasar la división de un nodo hasta tener 2 llenos o redistribución
idea básica:
• en la división, repartir los items de los 2 nodos entre 3 (los 2 + el nuevo)
• separar índice de datos Ÿ n factor de bloque de los nodos
mínimo (fC) | 70%
• implementar índices no-densos Ÿ tratamiento especial de las hojas problema: la división del nodo raíz (no tiene hermanos)
secuencial indexada sin ref. a nodos y z orden
• tratamiento especial como árbol B
• árboles B de órden variable o gestión más compleja (| árboles B+ de prefijos simples) • permitir que pueda ser más grande (hasta 4/3) o pb. repres.
• aprovechar la memoria central o árboles B-virtuales (árboles B con buffer en memoria)
• mantener niveles altos (raíz + ..) árbol B* (Knuth) de orden m (nº máximo descendientes)
• • • política de
• últimos niveles LRU
gestión páginas
• soluciones intermedias LRU ponderando el nivel
| árbol B, excepto que:
• otros tipos de árboles • los nodos tienen entre 2*(m-1) div 3 + 1 y m descendientes (excepto la raíz y las hojas)
reestructuración periódica (copiar) Ÿ n factor de ocupación • la raíz tiene tratamiento especial
n ordenación de nodos (mejora acceso)
Curso S. Velilla 55 Curso S. Velilla 56
Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
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 ejemplo de un trie para una colección de nombres de tres letras (en inglés) de niños
• cada hoja consta de m ref. a datos (índice denso)

 limitar altura del árbol


• claves de muy diferente longitud o
problemas:  representar nodo como lista
• acomodación a los bloques

H-tree { (dispersión + árbol B)


variante en la que se
• • • eliminan algunos nodos hoja

Curso S. Velilla 57 Curso S. Velilla 58


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

NRR
1 ANNE

3.5 - Familia de árboles B+ y 2


3
BETTY
CANDICE
CAROL

organización secuencial indexada


4
5 CHLOE
6 CLEOPATRA
ANNE 1 7 DELILAH
CHLOE 5 8 DIANA
ELECT 9 9 ELECTRA

• indexada o búsqueda FRED 13 10 ELIZABETH

objetivo: aprovechar las ventajas de las organizaciones 11 ELLEN


FLOSSY
• secuencial o trat. secuencial
12
Organización 13 FRED
14 GEORGIE
secuencial-indexada 15 GERT
GRACIE
de un fichero 16
17 JANET

idea básica: árbol (| árbol B) sobre una secuencia (conjunto de secuencias ) 18


19
JUNE
KRISTEN
JANET 17 20 LARA
LIZA 21 21 LIZA
MOLLY 25 22 LOUISE
OLGA 29 23 MABLE-SARAH
• toda la información (claves ò datos) está en un conjunto encadenado de 24 MARY
MOLLY
25

árbol B+ bloques (hojas) { conjunto secuencia ANNE


26
27
NANCY
NATALIA

• el árbol de acceso (| árbol B) está formado con copia de las claves (pueden
JANET 28 NEFERTITI
POLLY 29 OLGA
PAM
estar repetidas), que actúan como separadores { conjunto índice
30
31 PATIENCE
32 PENNY
POLLY 33 33 POLLY
RUTH 37 34 PRISCILLA
VALER 41 35 PRUDENCE
• tratamiento un poco diferente del árbol B (especialmente para las hojas) YVONN 45 36 ROSEMARY
38 SAMANTHA
• la altura es algo menor que para el árbol B 37
39
RUTH
SCARLETT
40 TAMMY
41 VALERY
42 VANESSA

organización secuencial indexada { organización basada en un árbol B+


-1 43 WILLY
-1 44 XANTHIPPE
-1 45 YVONNE
-1 46 ZOE

Curso S. Velilla 59 Curso S. Velilla 60


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
NRR
1 ANNE
2 BETTY
Organización secuencial-indexada de un fichero, 3 CANDICE
4 CAROL
con zona de desbordamiento
estructurado como un árbol B+
Fichero secuencial-indexado 5 CHLOE
6 CLEOPATRA
ANNE 1 7 DELILAH
CHLOE 5 8 DIANA
ELECT 9 9 ELECTRA
FRED 13 10 ELIZABETH
11 ELLEN
12 FLOSSY
13 FRED
14 GEORGIE
15 GERT
16 GRACIE
17 JANET 102
18 JUNE
19 KRISTEN
JANET 17 20 LARA
LIZA 21 21 LIZA 100
MOLLY 25 22 LOUISE
OLGA 29 23 MABLE-SARAH 103
24 MARY
25 MOLLY
26 NANCY
ANNE 27 NATALIA
JANET 28 NEFERTITI
POLLY 29 OLGA zona de
30 PAM
31 PATIENCE desbordamiento
32 PENNY
POLLY 33 33 POLLY
RUTH 37 34 PRISCILLA
VALER 41 35 PRUDENCE
YVONN 45 36 ROSEMARY
38 SAMANTHA
37 RUTH 100 LESLIE
39 SCARLETT 101 JOAN
40 TAMMY 102 JENNIFER 101
41 VALERY 103 MARTA
42 VANESSA
-1 43 WILLY nuevos registros añadidos
-1 44 XANTHIPPE
-1 45 YVONNE
-1 46 ZOE

Curso S. Velilla 61 Curso S. Velilla 62


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

ejemplo de inserción en un árbol B+ (1) ejemplo de inserción en un árbol B+ (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 inserción de E
R inserción de L
R
hojas, realizar las operaciones de inserción de: R, U, A, N, S, E, L, T, V
maxClvNodoInt = 2; minClvNodoInt = (3-1) div 2 = 1; A E N R S U A E L N R S U
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)
división hoja

inserción de T
L R L S
inserción
Inserciónde S
de S
inserción de R, U, A inserción de N
R R
división hoja
A R U A N R U
A E L N R S U A E L N R S T U
A N R U A N R S U

Curso S. Velilla 63 Curso S. Velilla 64


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
ejemplo de inserción en un árbol B+ (3) ejemplo de eliminación en un árbol B+ (1)

implementación (ejemplo 2): ELIMINACIÓN


inserción de V
L S división hoja L S U 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
A E L N R S T U V A E L N R S T U V

situación unicial
R

S
E L U
división nodo
L U

A B E G H L N R S U V X

A E L N R S T U V

Curso S. Velilla 65 Curso S. Velilla 66


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

ejemplo de eliminación en un árbol B+ (2) ejemplo de eliminación en un árbol B+ (3)

eliminación de G
eliminac ión de E
R R

E L U L V

A B G H L N R S U V X A B H L N R U V X

eliminación de G
eliminac ión de S
R
R
o también
E V
E L V

A B H L N R U V X
A B G H L N R U V X

Curso S. Velilla 67 Curso S. Velilla 68


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
árbol B+ : evaluación. árbol B+ : evaluación.

evaluación: Implementación de operadores de recorrido (primero, siguiente)


• cada nodo hoja : m-1 datos + 1 ref. de bloque(hermano) + nº datos y tipo (2 bytes) más eficiente que en árbol-B
• cada nodo interior : m-1 claves + m ref. de bloque(hijos) + nº datos y tipo (2 bytes)
en general es mejor el índice separado (fichero datos + fichero índice)
tipo: nodo hoja o interior
• nº accesos : = altura árbol | árbol B • 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

ejercicio: deducir las expresiones de la ocupación y número de accesos para un árbol B+ pb.: las referencias del último nivel son a otro fichero
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. reestructuración periódica para mantener (o mejorar) prestaciones
Comparar los resultados obtenidos. • fichero índice
• fichero datos
Similar al árbol B. Se parte del cálculo de las hojas.
implementación de índices secundarios simple

Curso S. Velilla 69 Curso S. Velilla 70


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

árboles B+ de prefijos simples árboles B+ de prefijos simples: ejemplo (1)

mejora de prestaciones Ÿ reducir nº de accesos a nodos

conjunto
representar parte de la clave (prefijo) Ÿ aumenta el factor de bloque
índice

á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

Curso S. Velilla 71 Curso S. Velilla 72


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza
á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 eliminación de los registros EMBRY y FOLKS del conjunto de secuencias La adición de un bloque en el conjunto de secuencias requiere un nuevo separador en el conjunto
no altera el conjunto índice índice (AY). Este separador provoca la división del nodo y la promoción de BO a la raíz.

Curso S. Velilla 73 Curso S. Velilla 74


Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

árboles B+ de prefijos simples : ejemplo (4) á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.
Curso S. Velilla 75 Curso S. Velilla 76
Tema I: Ficheros 2010/2011 Univ. de Zaragoza Tema I: Ficheros 2010/2011 Univ. de Zaragoza

También podría gustarte