Documentos de Académico
Documentos de Profesional
Documentos de Cultura
BD1 TiposdeFicheros
BD1 TiposdeFicheros
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
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}
Concepto de índice: densidad de un índice. Ejemplos Implementación de una Organización Indexada simple
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
.....
Acevedo, Irene
• í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
15 apuntador a bloque x
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
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
COL38358
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
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
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
árbol-B tras la inserción de 22, 41, 59, 57, 54, 33, 75, 124, 122, 123 en el árbol de la figura anterior
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
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
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;
ejemplo de algoritmo de inserción en un árbol B. (3) ejemplo de algoritmo de inserción en un árbol B. (4)
eliminar J 0
implementación (ejemplo 2): ELIMINACIÓN M
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
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
ejemplo de algoritmo de eliminación en un árbol B. (1) ejemplo de algoritmo de eliminación en un árbol B. (2)
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 . . .
• 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)
NRR
1 ANNE
• 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
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
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
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
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
conjunto
representar parte de la clave (prefijo) aumenta el factor de bloque
índice
Implementación de índices con claves repetidas (secundarios, agrupamiento, etc.): relativamente simple
diferentes soluciones (compromiso prestaciones-coste)
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.