Sie sind auf Seite 1von 28

Tema 4: Conceptos y

operaciones fundamentales
sobre ficheros
1
Conceptos y
operaciones fund.
sobre ficheros
1.Caractersticas del almacenamiento en memoria secundaria.
Estructuras de ficheros
2.Campos y registros
3.Insercin y actualizacin de registros
4.Borrados de registros
5.Bsqueda
6.Ordenacin
Caractersticas del almacenamiento en
memoria secundaria. Estructuras de ficheros
2
Conceptos y
operaciones fund.
sobre ficheros
El almacenamiento de informacin memoria
secundaria (discos duros, CD-ROMS, DVDs, etc.) es
necesario por dos razones fundamentales
Proporciona una capacidad de almacenamiento enorme en comparacin con la
memoria primaria, y a un coste mucho menor
La memoria secundaria permite un almacenamiento de informacin no voltil, es
decir la informacin permanece despus de cerrar la aplicacin o apagar el sistema
informtico
Estas dos caractersticas son bsicas en multitud de
aplicaciones, principalmente las relacionadas con la
gestin y el procesamiento de informacin
3
Conceptos y
operaciones fund.
sobre ficheros
El acceso a la informacin en memoria secundaria
tiene caractersticas especiales distintivas:
Es mucho ms lento que el acceso a memoria primaria: un acceso a un disco duro
tarda 250000 veces ms que a memoria primaria
La informacin en memoria secundaria viene estructurada en bloques de un
tamao que vara normalmente entre 512 y 4096 bytes. La lectura/escritura se
realiza por bloques completos
Tiempo de acceso = tiempo de posicionamiento de la cabeza lectora + tiempo
lectura/escritura del bloque. Por tanto leer varios bloques en posiciones
consecutivas es mucho ms eficiente que leer varios bloques en distintas posiciones
del disco
Cuando se trabaja con grandes volmenes de
informacin en memoria secundaria, es fundamental
minimizar el nmero de accesos para obtener un
tiempo de acceso razonable
4
Conceptos y
operaciones fund.
sobre ficheros
Las estructuras de ficheros (de forma anloga a las
estructuras de datos) son un conjunto de
herramientas que permiten un acceso eficiente a la
informacin almacenada en ficheros
Mtodos especficos de representacin de la informacin en un fichero
Operaciones para acceder a la informacin: lectura, escritura, modificacin,
bsqueda mediante distintos criterios, ordenacin de la informacin siguiendo cierto
orden, etc.
Los objetivos bsicos de las estructuras de ficheros
son dos:
Minimizar el nmero de accesos necesarios para acceder a un dato
Mantener agrupada la informacin relacionada (para evitar accesos adicionales)
Las estructuras de ficheros son la base de los
modernos DBMS
Registros y campos
5
Conceptos y
operaciones fund.
sobre ficheros
Un fichero es como un papel en blanco. Existen casi
tantos formatos como aplicaciones
Los ficheros cuyo objetivo es almacenar grandes
volmenes de informacin para su acceso de manera
eficiente, suelen estructurarse en campos y registros
La unidad bsica de informacin es el campo, que
contiene un dato de un tipo sencillo (p.e. una fecha,
edad, nombre)
Una lista de diferentes campos relacionados
constituye un registro (p. e. los datos de una persona)
6
Conceptos y
operaciones fund.
sobre ficheros
Un fichero es un coleccin de registros, normalmente
del mismo tipo
Normalmente las operaciones de entrada/salida se
realizan con registros completos
En todo momento en memoria slo se mantiene uno
o a lo sumo unos pocos registros, con los que se
realizan las operaciones necesarias
La codificacin de la informacin en los distintos
campos y registros se realiza utilizando dos formatos
bsicos
Formato texto
Formato binario
Formato texto
La codificacin de los caracteres puede realizarse usando distintas codificaciones:
ASCII, UTF-8, UTF-16, etc.
Al utilizar un formato de representacin estndar, el fichero es legible por otras
aplicaciones y en cualquier plataforma
Puede ser editado fcilmente mediante un editor de texto.
Formato binario
Ms compactos que los basados en texto y con una lectura/escritura ms rpida.
Generalmente menos transportables, y ms especficos de la plataformas/entorno
de programacin
La forma ms sencilla de crear un fichero codificado de esta manera consiste en
pasar directamente la imagen de los tipos empleados en memoria a disco
7
Conceptos y
operaciones fund.
sobre ficheros
DA 11 00 00 FF FF FF FF 50 65 64 72 6F 20 4A 69 ........Pedro Ji
6D E9 6E 65 7A 20 50 E9 72 65 7A 00 00 00 00 00 mnez Prez.....
00 00 00 00 00 00 96 FF D0 38 .........8
4570|10/12/1980|Pedro Jimnez Sanz|953221014
8
Conceptos y
operaciones fund.
sobre ficheros
Existen varias formas de representar los campos
El mtodo ms sencillo consiste en utilizar campos de longitud fija. Ineficiente
cuando la longitud real de los campos no se acerca al mximo reservado
4570 10/12/1980Pedro Jimnez Sanz 953221014
Los problemas del mtodo anterior se solucionan con un indicador de longitud
delante de cada campo (campos de longitud variable)
0445701010/12/198018Pedro Jimnez Sanz0995322101404
Otra forma de representar campos de longitud variable es utilizando un carcter
especial separador (que hay que seleccionar con cuidado)
4570|10/12/1980|Pedro Jimnez Sanz|953221014
Tambin es posible utilizar una estructura campo=valor que es autodescriptiva y
facilita la edicin manual del fichero. Requiere adicionalmente un separador. Sin
embargo es ineficiente y redundante
nm!i"#4570|$e"%ana"#10/12/1980|nom&re#Pedro Jimnez Sanz|'!$#953221014
9
Conceptos y
operaciones fund.
sobre ficheros
Igualmente existen distintos tipos de registros
Registros de longitud fija
4570 10/12/1980Pedro Jimnez Sanz 953221014
4572 11/05/1982Jan ()mez Prie'o 953228012
4570|10/12/1980|Pedro Jimnez Sanz|953221014
4572|11/05/1982|Jan ()mez Prie'o|953228012
Con campos de longitud variable
Con campos de longitud fija
Registros de longitud variable
0444570|10/12/1980|Pedro Jimnez Sanz|9532210140434572|11/05/1982|Jan ()mez Prie'o|953228012
Con indicador de longitud (requiere el clculo previo en memoria)
4570|10/12/1980|Pedro Jimnez Sanz|953221014*4572|11/05/1982|Jan ()mez Prie'o|953228012*
Con separador
Registros de un nmero fijo de campos. Para identificar un registro se leen n
campos consecutivos (de longitud fija o no) en lugar de un n fijo de bytes
4570|10/12/1980|Pedro Jimnez Sanz|953221014|4572|11/05/1982|Jan ()mez Prie'o|953228012
Mediante ndice
00 45 ...
Insercin y actualizacin de registros
10
Conceptos y
operaciones fund.
sobre ficheros
Aadir un nuevo registro a un fichero es una
operacin sencilla y eficiente
1 Posicionarse en el final del fichero. Normalmente se realiza de manera directa, sin
necesidad de recorrer los registros del fichero
2 Escribir el registro
4570|10/12/1980|Pedro Jimnez Sanz|953221014*
4570|10/12/1980|Pedro Jimnez Sanz|953221014*4572|11/05/1982|Jan ()mez Prie'o|953228012*
Como veremos ms adelante, no siempre se va a
insertar el registro al final del fichero, tambin es
posible aprovechar espacio libre en el interior
11
Conceptos y
operaciones fund.
sobre ficheros
La actualizacin es un proceso ms complicado
1 Localizar el registro a actualizar. Esto ya es en s un problema (ver bsqueda de
registros ms adelante)
2 Si el registro es de longitud fija, se escribe el nuevo registro encima del antiguo sin
mayor dificultad
4570 10/12/1980Pedro Jimnez Sanz 9532210144572 11/05/1982Jan ()mez Prie'o...
4573 05/07/1982+i,e! S-n"%ez S-n"%ez 6704211124572 11/05/1982Jan ()mez Prie'o...
12
Conceptos y
operaciones fund.
sobre ficheros
Si es de longitud variable tenemos el problema de que el nuevo registro puede
tener un tamao mayor que el inicial, lo que hace imposible su actualizacin (en
este caso la solucin es borrar el antiguo y aadir el nuevo)
4570|10/12/1980|Pedro Jimnez Sanz|953221014*4572|11/05/1982|Jan ()mez Prie'o|953228012*
Si el nuevo registro tiene un tamao menor, puede quedar un espacio inservible al
final que no es en principio un problema grave aunque puede llegar a serlo con el
tiempo
4575|28/02/1978|Jan .ar!o/ (ar"0a de !a 1orre|953101435
4570|10/12/1980|Pedro Jimnez Sanz|953221014*4572|11/05/1982|Jan ()mez Prie'o|953228012*
320|10/09/1970|+ar"o 2i33i|953221014* 4572|11/05/1982|Jan ()mez Prie'o|953228012*
Borrado de registros
13
Conceptos y
operaciones fund.
sobre ficheros
Eliminar fsicamente un registro de un fichero puede
ser muy costoso
Si el orden en el fichero no es importante, puede copiarse el ltimo registro del
fichero en la posicin del registro a borrar. Finalmente bastara con truncar el
fichero para eliminar el registro sobrante. Este mtodo puede no ser aplicable si los
registros son de tamao variable
41*42*43*44*45 41*42*43*44*45 41*42*45*44*45 41*42*45*44
Si el orden del fichero debe mantenerse o en general cuando los registros son de
tamao variable, entonces la solucin pasa por copiar todos los registros hacia
atrs, dejando al final un hueco que puede eliminarse mediante el truncado
41*42*43*44*45 41*42*43*44*45 41*42*44*45*45 41*42*45*44
14
Conceptos y
operaciones fund.
sobre ficheros
Es preferible una estrategia de borrado lgico (o
perezoso). Los registros simplemente se marcan
como borrados
Una forma sencilla de realizar este marcado es introduciendo al principio un campo
con un carcter especial
4570|10/12/1980|Pedro Jimnez Sanz|953221014*4572|11/05/1982|Jan ()mez Prie'o|953228012*
5|70|10/12/1980|Pedro Jimnez Sanz|953221014*4572|11/05/1982|Jan ()mez Prie'o|953228012*
Cada cierto nmero de borrados (p. e. 100) es
posible ejecutar un proceso de compactacin que
recorra el fichero y elimine los huecos de los registros
borrados
15
Conceptos y
operaciones fund.
sobre ficheros
Una mejor opcin consiste en reutilizar el espacio
liberado por los borrados para la insercin de nuevos
registros. As se evita incrementar el tamao del
fichero innecesariamente
En el momento de la insercin, localizar un hueco
producido por un borrado mediante una bsqueda
exhaustiva puede ser muy costoso
Para que esta estrategia sea efectiva es necesaria
una lista de registros borrados que permita:
Determinar de manera inmediata si hay huecos libres en el fichero
Saltar de manera directa a uno de estos huecos
16
Conceptos y
operaciones fund.
sobre ficheros
Esta lista se construye de la siguiente manera:
Incluyendo una cabecera al comienzo del fichero con la posicin del primer hueco
(-1 si la lista est vaca)
En cada hueco, aadiendo la posicin del siguiente hueco en la lista (podemos
sobreescribir sin problemas la antigua informacin existente en la posicin)
14155434456154474849410
Realmente la lista trabaja como una pila:
Cada vez que se realiza un borrado, se lee la posicin del primer hueco en la
cabecera, se escribe esta posicin en el registro borrado y se coloca como primer
hueco la posicin de ste
14155434456154474849410 14155435156154474849410 34155435156154474849410
17
Conceptos y
operaciones fund.
sobre ficheros
Al insertar un nuevo registro, primero se comprueba si existen huecos en la lista
(valor distinto de -1 en la cabecera). En caso afirmativo, se salta a la posicin
indicada por la cabecera, se copia el valor del siguiente nodo en la cabecera y se
escribe el nuevo registro en el hueco. Si no hay huecos, la insercin se realiza al
final
14155434456154474849410 54155434456154474849410 541411434456154474849410
Si el fichero contiene registros de tamao variable, el
problema se complica
La posicin de un registro slo puede ser identificada mediante el desplazamiento
en bytes desde el principio del fichero
Es necesario mantener en cada hueco el tamao del mismo
Cada hueco procede del borrado de registros de distinto tamao. El primer hueco
de la lista no tiene por qu tener un tamao suficiente para el nuevo registro
18
Conceptos y
operaciones fund.
sobre ficheros
21*2041*255109*2043*2144*22561*23587*1947
A la hora de insertar un registro es necesario revisar
la lista hueco a hueco hasta encontrar uno con el
tamao adecuado
Puede llegar a ser muy ineficiente
Es posible que sea preferible aadir directamente al final por motivos de eficiencia,
aunque no se recupere el espacio de los borrados hasta que realice una
compactacin
Otro problema: el espacio que se pierde cuando se
inserta un registro en un hueco ligeramente mayor
El espacio sobrante puede separarse del hueco original e insertarse en la lista de
huecos libres, sin embargo si es muy pequeo es improbable que pueda ser
reutilizado
Bsqueda
19
Conceptos y
operaciones fund.
sobre ficheros
Obtener un registro a partir de su posicin en el
fichero o su nmero de registro no tiene una especial
utilidad en el contexto de la aplicacin
Normalmente, lo interesante es recuperar un registro
a partir del valor de alguno de sus campos (p. e. DNI)
Para localizar los registros que cumplen un criterio
de bsqueda determinado podemos realizar una
bsqueda secuencial
1 Comenzamos por el principio del fichero
2 Leemos un registro completo y lo pasamos a memoria para comprobar el
valor/valores de sus campos
3 Si el registro leido no es el buscado, leemos el siguiente registro y as
sucesivamente, hasta el final del fichero
20
Conceptos y
operaciones fund.
sobre ficheros
Cuando es posible la existencia de varios registros que cumplan el criterio y
deseamos obtenerlos todos, entonces la bsqueda debe llegar siempre al final
La bsqueda secuencial es muy flexible (el criterio de
bsqueda puede ser arbitrariamente complejo) pero
muy ineficiente
Si los registros del fichero estn ordenados por un
campo determinado (clave), entonces es posible
realizar una bsqueda binaria para localizar el
registro/registros con un valor concreto en ese campo
290|...823|...115|...1820|...2030|...4570|...4571|...5320|...6915|...7200|...
Fichero ordenado por el campo numlic:
21
Conceptos y
operaciones fund.
sobre ficheros
La bsqueda binaria en el fichero slo es posible si
los registros son de tamao fijo:
1 Iniciamos el intervalo de trabajo a todo el fichero
2 Calculamos el centro del intervalo
3 Si el valor del campo clave del registro situado en el centro del intervalo coincide
con el buscado, la bsqueda termina con xito
4 En caso contrario, si el tamao del intervalo es 1, la bsqueda termina
negativamente
5 Si la clave buscada es menor que la clave del registro, la bsqueda contina en el
subintervalo inferior del mismo modo
6 Si la clave buscada es mayor que la clave del registro, la bsqueda contina en el
subintervalo superior del mismo modo
La busqueda binaria localiza un elemento en log
2
n
accesos en el peor caso. La bsqueda secuencial
requiere n accesos en el peor caso
22
Conceptos y
operaciones fund.
sobre ficheros
290|...823|...915|...1820|...2030|...4570|...4571|...5320|...6915|...7200|...
Ejemplo: buscar (1820)
290|...823|...915|...1820|...2030|...4570|...4571|...5320|...6915|...7200|...
290|...823|...915|...1820|...2030|...4570|...4571|...5320|...6915|...7200|...
290|...823|...915|...1820|...2030|...4570|...4571|...5320|...6915|...7200|...
23
Conceptos y
operaciones fund.
sobre ficheros
Problema 1: Eficiente, pero no lo suficiente cuando
se trabaja con ficheros
Localizar un registro concreto en un fichero de 1000 registros requiere 9.5 accesos
de media. Esto supone un tiempo de bsqueda inadmisible para la mayora de las
aplicaciones
Problema 2: La bsqueda binaria solo funciona con
registros de tamao fijo
Es necesario realizar saltos al registro k-esimo del fichero. Si el fichero contiene
registros de tamao variable, no es posible calcular directamente la posicin fsica
que corresponde al nmero de registro indicado
Problema 3: Mantener un fichero ordenado es muy
costoso
Ver siguiente apartado
Ordenacin
24
Conceptos y
operaciones fund.
sobre ficheros
Mantener ordenado un fichero es muy costoso, ya
que las inserciones de nuevos registros deben
realizarse en la posicin correcta
1 Localizacin de la posicin correcta del registro (k) mediante una bsqueda binaria
:O(log n)
2 Aadir un registro vaco al final del fichero
3 Mover todos los registros desde la posicin k al final una posicin hacia delante:
O(n)
4 Insertar el nuevo registro en la posicin k
290|...823|...915|...1820|...2030|...4570|...4571|...5320|...6915|...7200|...7777|...
3120|...
25
Conceptos y
operaciones fund.
sobre ficheros
Una segunda opcin consiste en realizar las
inserciones de manera no ordenada y realizar una
ordenacin completa del fichero en memoria primaria
cuando sea necesario realizar bsquedas
Slo es posible con ficheros pequeos, por el tiempo y memoria requeridos
Realmente lo nico que tiene que estar ordenado son
las claves. En lugar de ordenar en memoria el fichero
completo, es suficiente ordenar estas claves y
mantener un puntero de cada clave a la posicin del
registro completo en el fichero
1 Se leen las claves del fichero a un vector en memoria
2 Se ordenan las claves
3 Se realizan las bsquedas en el vector de claves
26
Conceptos y
operaciones fund.
sobre ficheros
4290|...823|...115|...120|...2030|...570|...4571|...5320|...6915|...200|...
4290|0*823|100*115|200*120|300*2030|400*570|500*4571|600*5320|700*6915|800*200|900
4290|...823|...115|...120|...2030|...570|...4571|...5320|...6915|...200|...
115|200*120|300*200|900*570|500*823|100*2030|400*4290|0*4571|600*5320|700*6915|800
Recorriendo el vector de claves podemos construir
un nuevo fichero ordenado, eliminando finalmente el
antiguo
En memoria
En memoria
Fichero
Fichero
27
Conceptos y
operaciones fund.
sobre ficheros
Reconstruir el nuevo fichero ordenado sigue siendo
costoso
Pregunta final: Realmente es necesario reconstruir
este fichero?No es preferible realizar las bsquedas
en el vector de claves en memoria?
Este es el fundamento de los sistemas de ficheros
indizados que veremos en el siguiente captulo
28
Conceptos y
operaciones fund.
sobre ficheros
Una clase C++ para el manejo de ficheros de
registros
'em3!a'e8"!a// 4e,i/'ro9
"!a// Fi"%ero :
$/'ream $; // S'ream 3ara E/S a! $i"%ero
3&!i"<
Fi"%ero=/'rin, $da'o/>;
?Fi"%ero=>; // .ierra e! $i"%ero
n/i,ned !on, in/er'ar="on/' 4e,i/'ro @neAore,>;
Aoid e!iminar=n/i,ned !on, 3o/>;
Aoid !eer=n/i,ned !on, 3o/B 4e,i/'ro @re,>;
Aoid a"'a!izar=n/i,ned !on, 3o/B "on/' 4e,i/'ro @neAore,>;
Aoid "om3a"'ar=>; // E!iminar $0/i"amen'e !o/ &orrado/
Aoid Aa"iar=>; // E!iminar 'odo/ !o/ re,i/'ro/
C;

Das könnte Ihnen auch gefallen