(Libro Informatica Archivos) Organizacion y Gestion de Archivos

103
UNIVERSIDAD DE ALMER ´ IA Escuela Polit´ ecnica Superior Ingenier´ ıa T´ ecnica en Inform´ atica de Gesti ´ on Organizaci´ on y Gesti ´ on de Archivos ´ Area: Ciencias de la Computaci ´ on e Inteligencia Artificial Departamento: Lenguajes y Computaci ´ on Antonio Aliaga Mu ˜ noz web: http://www.ual.es/personal/analiaga e-mail: [email protected] 14 de febrero de 2006

description

(Libro Informatica Archivos) Organizacion y Gestion de Archivos

Transcript of (Libro Informatica Archivos) Organizacion y Gestion de Archivos

UNIVERSIDAD DE ALMER IA

Escuela Politecnica Superior

Ingenierıa Tecnica en Informatica de Gestion

Organizacion y Gestion de Archivos

Area: Ciencias de la Computacion e Inteligencia ArtificialDepartamento: Lenguajes y Computacion

Antonio Aliaga Mu noz

web: http://www.ual.es/personal/analiagae-mail: [email protected]

14 de febrero de 2006

Indice general

I Almacenando informacion: discos y archivos 1

1. Almacenamiento de datos 31.1. Jerarquıa de memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.2. Introduccion historica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.3. Discos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1.3.1. Tipos de discos . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.3.2. Organizacion de los discos . . . . . . . . . . . . . . . . . . . . . 61.3.3. Capacidad del disco . . . . . . . . . . . . . . . . . . . . . . . . 71.3.4. Organizacion de pistas por sectores . . . . . . . . . . . . . . . . 71.3.5. Organizacion de las pistas por bloques . . . . . . . . . . . . . . . 81.3.6. Espacio reservado o de control (nondata overhead) . . . . . . . . 91.3.7. El coste del acceso a disco . . . . . . . . . . . . . . . . . . . . . 91.3.8. El disco como cuello de botella . . . . . . . . . . . . . . . . . . 10

1.4. Cintas magneticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2. Archivos 132.1. Archivos fısicos y archivos logicos . . . . . . . . . . . . . . . . . . . . . 132.2. Operaciones principales sobre archivos . . . . . . . . . . . . . . . . . . . 13

2.2.1. Abrir archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2.2. Cerrar archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2.3. Leer y escribir en archivos . . . . . . . . . . . . . . . . . . . . . 152.2.4. Posicionamiento (seek) en archivos . . . . . . . . . . . . . . . . 15

3. Elementos basicos de las estructuras de archivos 173.1. Estructuras de campos . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.1.1. Campos de longitud fija . . . . . . . . . . . . . . . . . . . . . . 183.1.2. Comenzar cada campo con un indicador de longitud . . . . . . . 183.1.3. Utilizar un delimitador al final de cada campo . . . . . . . . . . . 193.1.4. Utilizar una expresion . . . . . . . . . . . . . . . . . . . . . . . 19

3.2. Estructuras de registros . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.2.1. Registros de longitud fija en numero de bytes . . . . . . . . . . . 20

I

2o I.T.I.G./UAL Indice general

3.2.2. Registros de longitud fija en numero de campos . . . . . . . . . . 203.2.3. Comenzar cada registro con un indicador del numero de bytes de

longitud . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.2.4. Utilizar un archivo auxiliar donde se indica la posicion de inicio

de cada registro . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.2.5. Utilizar undelimitador al final de cada registro . . . . . . . . . . 21

3.3. Buffersy bloques de registros . . . . . . . . . . . . . . . . . . . . . . . . 213.3.1. Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.3.2. Bloques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.4. Operaciones sobre registros. Fragmentacion del almacenamiento . . . . . 253.4.1. La insercion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.4.2. El borrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.4.3. La actualizacion . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.5. Acceso a registros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.5.1. Llaves de busqueda . . . . . . . . . . . . . . . . . . . . . . . . . 293.5.2. Busqueda iterativa de un registro en un archivo (busqueda secuen-

cial) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.5.3. Acceso directo eındices . . . . . . . . . . . . . . . . . . . . . . 31

4. Organizaciones basicas de registros en archivos 334.1. Archivos de registros no ordenados: Organizacion apilada . . . . . . . . . 33

4.1.1. Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.1.2. No estructurados . . . . . . . . . . . . . . . . . . . . . . . . . . 344.1.3. Estructurados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364.1.4. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

4.2. Archivos de registros ordenados: Organizacion secuencial . . . . . . . . . 384.2.1. Estructura de la organizacion secuencial . . . . . . . . . . . . . . 394.2.2. Manipulacion de los archivos secuenciales . . . . . . . . . . . . 394.2.3. Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4.3. Archivos con registros enlazados: Organizacion encadenada . . . . . . . 424.3.1. Estructura de las cadenas . . . . . . . . . . . . . . . . . . . . . . 434.3.2. Manipulacion de los archivos encadenados . . . . . . . . . . . . 44

4.4. Archivos relativos (hashing): Organizacion directa . . . . . . . . . . . . 464.4.1. Hashingestatico cerrado . . . . . . . . . . . . . . . . . . . . . . 474.4.2. Manipulacion de los archivoshash. . . . . . . . . . . . . . . . . 484.4.3. Hashingabierto . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

II Indexaci on 51

5. Conceptos basicos sobreındices 53

Organizacion y gestion de archivos II Antonio Aliaga Mu noz

2o I.T.I.G./UAL Indice general

5.1. Archivos conındices . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.1.1. Definicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535.1.2. Estructura de losındices . . . . . . . . . . . . . . . . . . . . . . 53

5.2. Propiedades de losındices . . . . . . . . . . . . . . . . . . . . . . . . . 545.2.1. Indices agrupados y no-agrupados (clustered/unclustered). . . . 545.2.2. Indices densos y dispersos (dense/sparse) . . . . . . . . . . . . . 555.2.3. Indices primarios y secundarios . . . . . . . . . . . . . . . . . . 555.2.4. Indices sobre claves multiples . . . . . . . . . . . . . . . . . . . 565.2.5. Indices multinivel . . . . . . . . . . . . . . . . . . . . . . . . . . 56

6. Organizaciones indexadas 576.1. Organizacion secuencial indexada . . . . . . . . . . . . . . . . . . . . . 576.2. Organizacion indexada simple . . . . . . . . . . . . . . . . . . . . . . . 576.3. Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.4. El acceso a los datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586.5. Operaciones basicas en unındice . . . . . . . . . . . . . . . . . . . . . . 58

6.5.1. Creando los archivos . . . . . . . . . . . . . . . . . . . . . . . . 596.5.2. Leer elındice en memoria . . . . . . . . . . . . . . . . . . . . . 596.5.3. Guardando elındice en disco . . . . . . . . . . . . . . . . . . . . 596.5.4. Insercion de registros . . . . . . . . . . . . . . . . . . . . . . . . 606.5.5. Borrado de registros . . . . . . . . . . . . . . . . . . . . . . . . 606.5.6. Actualizacion de registros . . . . . . . . . . . . . . . . . . . . . 606.5.7. Indices que no caben en memoria . . . . . . . . . . . . . . . . . 61

6.6. Indices secundarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616.6.1. Definicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616.6.2. Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626.6.3. Operaciones basicas . . . . . . . . . . . . . . . . . . . . . . . . 626.6.4. La recuperacion de registros utilizando una combinacion de cla-

ves secundarias . . . . . . . . . . . . . . . . . . . . . . . . . . . 636.6.5. Mejorando la estructura delındice secundario. Listas invertidas . 64

6.7. Binding: Enlazando o vinculando . . . . . . . . . . . . . . . . . . . . . . 66

7. Reorganizacion multinivel con arboles B y B+ 677.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677.2. Planteamiento del problema . . . . . . . . . . . . . . . . . . . . . . . . 687.3. Arboles binarios de busqueda . . . . . . . . . . . . . . . . . . . . . . . . 687.4. Arboles AVL (Adelson-Velskii-Landis) . . . . . . . . . . . . . . . . . . . 697.5. Arboles binarios paginados . . . . . . . . . . . . . . . . . . . . . . . . . 707.6. Arboles-B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

7.6.1. Definicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737.6.2. Operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

Organizacion y gestion de archivos III Antonio Aliaga Mu noz

2o I.T.I.G./UAL Indice general

7.6.3. Organizacion delındice enarbol-B . . . . . . . . . . . . . . . . 777.6.4. Variantes dearboles-B:arboles-B* . . . . . . . . . . . . . . . . . 79

7.7. Arboles-B+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807.7.1. Variantes dearboles-B+:arboles-B+ de prefijo simple . . . . . . 81

7.8. Arboles-B frente aarboles-B+ . . . . . . . . . . . . . . . . . . . . . . . 82

8. Organizacion directa. Hashing 858.1. Caracterısticas de la organizacionhashing . . . . . . . . . . . . . . . . . 858.2. Elementos que intervienen en la organizacionhashing. . . . . . . . . . . 86

8.2.1. Los cubos o unidades de direccionamiento . . . . . . . . . . . . 868.2.2. La densidad de empaquetamientoδ . . . . . . . . . . . . . . . . 878.2.3. La funcionhash. . . . . . . . . . . . . . . . . . . . . . . . . . . 878.2.4. Tratamiento de las colisiones . . . . . . . . . . . . . . . . . . . . 88

8.3. Hashingestatico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888.3.1. Algoritmos hashing . . . . . . . . . . . . . . . . . . . . . . . . . 888.3.2. Tenicas para evitar colisiones . . . . . . . . . . . . . . . . . . . 898.3.3. Tecnicas de resolucion de colisiones. Operaciones . . . . . . . . 90

8.4. Hashingdinamico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928.4.1. Caracterısticas . . . . . . . . . . . . . . . . . . . . . . . . . . . 928.4.2. Hashingextensible . . . . . . . . . . . . . . . . . . . . . . . . . 93

Organizacion y gestion de archivos IV Antonio Aliaga Mu noz

Indice de figuras

1.1. Esquema interno de un disco magnetico. . . . . . . . . . . . . . . . . . . 71.2. Interleaving.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.1. Formas de estructurar un archivo en campos. . . . . . . . . . . . . . . . . 183.2. Formas de estructurar un archivo en registros. . . . . . . . . . . . . . . . 203.3. Algoritmo de lectura de un archivo conbuffer. . . . . . . . . . . . . . . . 223.4. Algoritmo de escritura de un archivo conbuffer. . . . . . . . . . . . . . . 233.5. Insercion de un registro en un bloque no-ordenado. . . . . . . . . . . . . 263.6. Insercion de un registro en un bloque ordenado con espacio. . . . . . . . 263.7. Insercion de un registro en un bloque ordenado sin espacio. Bloque de

overflow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.8. Insercion de un registro en un bloque ordenado sin espacio. Busqueda en

el bloque vecino. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.9. Borrado de un registro con lista de espacio libre. . . . . . . . . . . . . . . 283.10. Busqueda secuencial en archivos no-bloqueados. . . . . . . . . . . . . . 303.11. Busqueda secuencial en archivos bloqueados. . . . . . . . . . . . . . . . 31

4.1. Organizacion apilada no-estructurada . . . . . . . . . . . . . . . . . . . 354.2. Organizacion apilada estructurada con registros de longitud variable. . . . 364.3. Organizacion secuencial con registros de longitud variable. . . . . . . . . 384.4. Organizacion secuencial. Insercion de un nuevo registro. . . . . . . . . . 394.5. Organizacion secuencial. Insercion de un nuevo registro en un archivo de

derrama. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.6. Organizacion encadenada. . . . . . . . . . . . . . . . . . . . . . . . . . 45

7.1. Arboles binarios de busqueda . . . . . . . . . . . . . . . . . . . . . . . . 697.2. Arboles AVL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707.3. Arboles binarios paginados . . . . . . . . . . . . . . . . . . . . . . . . . 717.4. Arboles binarios paginados (desbalanceo) . . . . . . . . . . . . . . . . . 727.5. Arboles-B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757.6. Arboles-B (eliminacion simple en una hoja) . . . . . . . . . . . . . . . . 77

V

2o I.T.I.G./UAL Indice de figuras

7.7. Arboles-B (eliminacion simple en un nodo intermedio) . . . . . . . . . . 787.8. Arboles-B (eliminacion: redistribucion) . . . . . . . . . . . . . . . . . . 787.9. Arboles-B (eliminacion: concatenacion) . . . . . . . . . . . . . . . . . . 79

Organizacion y gestion de archivos VI Antonio Aliaga Mu noz

Parte I

Almacenando informacion: discos yarchivos

1

Capıtulo 1

Almacenamiento de datos

El problema clave del diseno deestructuras de archivoses la gran cantidad de tiempoque se necesita para obtener la informacion desde el disco. Todos los disenos de estruc-turas de archivos se centran en minimizar los accesos a discoy en maximizar la proba-bilidad de que la informacion que el usuario necesita este ya en la RAM. Por lo tanto,el problema principal consiste enencontrar formulas que minimicen los accesos a discopara los archivos que cambien de contenido y tamano.

1.1. Jerarquıa de memoria

La memoria y el almacenamiento se puede clasificar en los siguientes tipos (entreparentesis se indica el orden del tiempo medio de acceso tıpico):

Almacenamiento primario (ns).

• Registros de la CPU.

• Memoria cache: de primer nivel, segundo nivel y tercer nivel.

• RAM.

• Discos RAM.

• Cache de disco.

Almacenamiento secundario.

• Discos magneticos (ms).

• Cintas (s).

Almacenamientooffline.

3

2o I.T.I.G./UAL Almacenamiento de datos

• Discos magneticos removibles (ms).

• Discosopticos (CD-ROM, DVD-ROM) (ms).

• Cintas (s).

A la vista de la clasificacion anterior es facil deducir que el almacenamiento secun-dario y offline, en cualquiera de sus modalidades, es muy lento en comparacion con elalmacenamiento primario (RAM, caches y registros de la CPU)1. Ademas, los discosproporcionan una capacidad de almacenamiento ilimitada (hoy dıa) a un coste muy bajoen comparacion con la RAM2. Otra ventaja de los discos frente a la RAM es que la infor-macion almacenada enestos permanece intacta una vez desconectado el sistema, mientrasque la RAM es volatil, si el sistema se para, la informacion contenida en ella se pierde.

En un mundo ideal, nuestros sistemas dispondrıan de una RAM ilimitada y no volatil,pero dadas las limitaciones expuestas nos vemos obligados a disponer de almacenamientosecundario. Un buen diseno de la estructura de archivos nos dara acceso a toda la capaci-dad del disco sin hacer que nuestras aplicaciones tengan que esperar mucho tiempo.

1.2. Introduccion historica

Las caracterısticas generales de la investigacion y el desarrollo de estructuras de ar-chivos se pueden deducir facilmente del ejemplo anteriormente citado:

De una forma ideal, nos gustarıa obtener la informacion que necesitamos accedien-do una sola vez al disco. Es decir, no queremos esperar mas de seis dıas a tenernuestra lista ordenada.

Si esto anterior no es posible, (tener la informacion en un solo acceso a disco), que-remos tener estructuras que permitan obtener la informacion que buscamos con elmınimo de accesos posibles. Por ejemplo, una busqueda binaria sobre un millon re-gistros permite encontrar el dato con menos de veinte comparaciones. Sin embargo,veinte accesos a disco pueden consumir mucho tiempo, mas del deseado. Se nece-sitan, por tanto, estructuras que permitan obener el dato deseado en solo doso tresaccesos como maximo.

1El tiempo medio de acceso de una RAM actual es de unos 7,5 ns (7, 5∗10−9 sg) mientras que los discosSCSI mas rapidos superan los 5 ms (5∗10−3 sg). Existe una diferencia de acceso de orden 1:500.000 (comomınimo). Esto significa, que un proceso para ordenar una lista que cabe entera en memoria RAM y que tarda1 sg, si se utilizara el disco para la ordenacion tardarıa 500.000 sg, es decir, 139 horas (casi seis dıas).

2Por ejemplo, actualmente un disco SCSI U-320 de 73 GB a 10.000 rpm puede costar unos 300 euros,mientras que 1 GB de RAM para servidores costarıa aproximadamente lo mismo. El coste por MByte serıade 0,4 centimos de Euro en los discos, frente a 29,30 centimos de euro en la RAM; la proporcion en estecaso es de 1:73.

Organizacion y gestion de archivos 4 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Almacenamiento de datos

Ademas, queremos que nuestras estructuras de archivos permitan recuperar infor-macion agrupada. Por ejemplo, si accedemos a disco para capturar los datos de uncliente (nombre, direccion, telefono etc.) esperamos queesto se haga con un soloacceso a disco y no con varios accesos, uno para cada dato.

Estas tres caracterısticas son relativamente faciles de implementar en una estructurade archivos cuando tenemos archivos con datos que nunca cambian. Sin embargo, esto secomplica cuando los datos cambian y los archivos crecen o decrecen al anadir o eliminarinformacion.

Al principio se trabajaba con ficheros almacenados en cintas. El acceso era secuen-cial, y el coste de acceso directamente proporcional al tamano de fichero. Posteriormenteaparecieron los discos y en ellos se empezaron a utilizar losındices. El acceso ya eraaleatorio.

La ventaja de usarındices es que permiten realizar busquedas muy rapidas.Estosguardan en pequenos ficheros estructuras de claves y punteros que apuntan al archivooriginal o primario. Encontrando la clave en el fichero deındices, el acceso al dato esinmediato. Sin embargo, losındices simples son mas de lo mismo, ficheros de accesosecuencial en sı mismos; y cuando crecen, se convierten en difıciles de gestionar, sobretodo en ficheros dinamicos en los que las claves pueden cambiar.

A principios de los anos sesenta se comenzaron a utilizar estructuras basadas enarbo-les binarios, convirtiendose en una potencial solucion al problema. Sin embargo, cuan-do se anadıan o eliminaban registros, losarboles crecıan muy desordenadamente (no deforma uniformeo balanceada) ocasionando que en grandes busquedas se accediera de-masiado a disco. A raız de esto se diseno el arbol AVL, consistente en una estructuraautoajustable basada en unarbol binario, empleado satisfactoriamente para gestionar da-tos en la RAM. Este mismo algoritmo se intento aplicar para archivos en disco, pero losaccesos eran mas de los esperados para grandes archivos. Se tardaron mas de diez anos enencontrar una solucion al problema, hasta que se implementaron losarboles-B. En granmedida, esta tardanza fue debida al modo en que se contruıan estas estructuras, ya que losarboles-B son del tipo deabajo-arriba , al reves de como trabajan losarboles AVL que seempleaban para la getion de la RAM.

Los arboles-B proveen un excelente acceso a los datos, peroestos tambien tenıanun coste: ya no se podrıa acceder secuencialmete a los ficheros de forma eficiente. Estose soluciono rapidamente con losarboles-B+, que anaden estructuras secuenciales a lashojas delarbol. El numero de accesos crece en proporcion alogkN (k = no de entradasindexadas en un bloque y N = tamano del fichero). Esta estructura permite acceder a unfichero de varios millones de registros con tres o cuatro accesos y garantiza la inserciony borrado sin perdida de rendimiento. Posteriormente aparecio una nueva estructura, elhashing, que viene a dar una aproximacion a nuestra pretension de obtener la informaciondeseada con solo un acceso.Esta es una buena solucion cuando los archivos no cambian

Organizacion y gestion de archivos 5 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Almacenamiento de datos

demasiado de tamano en el tiempo. Para este tipo de situaciones se diseno el hashingextensible y dinamico, que permiten busquedas con no mas de dos accesos a disco.

1.3. Discos

Como ya se ha dicho antes, el lugar ideal para trabajar con los datos es la RAM, endonde pueden estar asociados a estructuras de archivos de forma automatica. Sin embargoel uso del almacenamiento secundario es imprescindible. Las principales desventajas delos discos y otros dispositivos frente a la RAM son su mayor tiempo de acceso y queesteno es igual en todas las partes del dispositivo.

1.3.1. Tipos de discos

Los discos o unidades de disco (nos referimos a discos magneticos), son dispositivosde almacenamiento de acceso directo, ya que se puede acceder directamente a cualquierdato en el disco y no secuencialmente como ocurre en una cinta (serial accesso accesosecuencial).

Los discos magneticos se clasifican en discos duros (hard disks - HD) y discos flexi-bles (floppy disks - FD). Los HD ofrecen alta capacidad a un coste por bit bajo, y son losmas usados. Los FD son baratos pero tambien son muy lentos y tienen poca capacidad.Estosultimos son adecuados para transportar pequenas cantidades de datos o hacer copiasde seguridad. Hay un tipo de discos duros, llamadosremovibles, que permiten ser monta-dos y desmontados varias veces, lo cual puede serutil para transportar grandes cantidadesde datos y hacer copias de seguridad que requieren un acceso directo.

Otro tipo de discos son los no-magneticos, entre los cuales estan losopticos comolos mas importantes (CD-ROM, DVD-ROM, etc.). Tambien existen otro tipo de discoshıbridos llamados magneto-opticos.

1.3.2. Organizacion de los discos

Un disco esta compuesto a su vez por variosdiscoso platos, en los que se almacena lainformacion sobre su superficie.Esta se organiza enpistasconcentricas que a su vez estandivididas ensectores. Las pistas se organizan encilindros. Un cilindro estarıa compuestopor todas las pistas que ocupan la misma posicion en los diferentes platos o discos. Todaslas pistas de un cilindro se pueden leer sin mover elcabezal, que es lo que consume mastiempo (Ver la figura 1.1).

La unidad de lectura/escritura en un disco es elsector, que se lee entero y se guardaen unbuffer, desde el cual se accede al bit que se desea leer.

Organizacion y gestion de archivos 6 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Almacenamiento de datos

Figura 1.1: Esquema interno de un disco magnetico.

1.3.3. Capacidad del disco

Capacidad de la pista = no sectores por pista x bytes por sector.

Capacidad del cilindro = no pistas por cilindro x capacidad de pista.

Capacidad del disco = no de cilindros x capacidad de cilindro.

1.3.4. Organizacion de pistas por sectores

A la hora de organizar los sectores en las pistas, hay que tener en cuenta el tiempo quela controladora del disco tarda en procesar la informacion queeste le va suministrando.Existe pues un retardo entre la lectura de cada sector y el siguiente. Si estamos accediendoa datos que estan almacenados en sectores de forma contigua o adyacente y la controla-dora no es lo suficientemente rapida, solo podrıamos leer un sector en cada revolucion deldisco, lo cual no es deseable. Para mejorar esto, se situan los sectores de forma no adya-cente dejando el suficiente espacio entre ellos para que las controladoras puedan procesarla informacion que el disco le va suministrando. A esta tecnica se conoce comointerlea-ving, donde alfactor de interleavinges el no de sectores que separan cada dos sectoreslogicos adyacentes. Actualmente las controladoras de disco han superado este problemay todos los discos son accedidos por la controladora coninterleave1:1, lo cual permiteleer todos los sectores de una pista en una sola revolucion (Ver la figura 1.2).

Organizacion y gestion de archivos 7 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Almacenamiento de datos

Figura 1.2:Interleaving.

Desde el punto de vista del sistema operativo,este agrupa los sectores enclustersparaobtener un mayor rendimiento en las operaciones de E/S. En la FAT (file allocation table)se almacena para cada archivo ordenadamente losclustersen los que se ubica. De estamanera, cuando se accede a un fichero no se hace sector a sector sinoclustera cluster.Si el sistema operativo es capaz de ubicar un fichero completo enclusterscontiguos deldisco, se dice que ocupa una solaextension. Si esto no es posible, se utilizarıa mas de unaextension y el archivo estara fragmentado(desde el punto de vista del sistema operativo).Otro tipo de fragmentacion ocurre cuando se quiere almacenar un registro en disco contamano inferior a uncluster. Existen dos opciones: utilizar un sector para cada registroo un cluster para cada archivo, o almacenarlos de forma contigua. La primera opcionsupone desperdiciar grandes cantidades de espacio en disco, y la segunda requiere leer dossectores o dosclusterspara recuperar el registro o archivo. Este parametro es importanteen sistema operativos que permiten predeterminar el tamano del cluster, ya que si enel se van a almacenar grandes ficheros de acceso secuencial, el tamano declusterdebeser grande, mientras que el almacenamiento de datos de reducidas dimensiones requieretamanos declustermenores.

1.3.5. Organizacion de las pistas por bloques

Se trata de una organizacion diferente a la de los sectores, caracterıstica de los siste-mas UNIX. Los discos que lo permitan, pueden almacenar los archivos de forma continua,

Organizacion y gestion de archivos 8 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Almacenamiento de datos

en bloques de distinto tamano llamadofactor de bloqueo, que indica el numero de regis-tros que se almacenan en cada bloque. Esto elimina los problemas anteriormente citadosen la organizacion de pistas por sectores, pero necesita almacenar informacion adicionalpara su correcta gestion. Por tanto pasamos de tener un sistema de direccionamiento porsectores a un sistema de direccionamiento por bloques.Este es en terminos generales demayor eficiencia que el anterior. La informacion necesaria para gestionar el bloque deinformacion se almacena en subbloques (count subblock- nobytes del bloque,key sub-block - clave delultimo registro del bloque,data subblock- datos, etc). Ası por ejemplo,se podrıan realizar busquedas directamente sobre disco sin necesidad de cargar las clavespreviamente en memoria.

1.3.6. Espacio reservado o de control (nondata overhead)

Tanto la organizacion por bloques como por sectores requiere reservar un espacioadicional para la gestion del disco.Esta se suele reservar durante el pre-formateo y guar-dara informacion sobre atributos de los sectores o bloques que el disco va a contenercomo: direccion fısica del sector y de la pista, sector defectuoso o no, etc. Este proceso serealiza de forma transparente al usuario o programador.

1.3.7. El coste del acceso a disco

El tiempo total de acceso a disco esta determinado por la contribucion de tres opera-ciones fısicas: el tiempo de posicionamiento (seek time), el retardo de rotacion (rotationaldelay) y el tiempo de transferencia (fransfer time).

El tiempo de posicionamientoes el que tarda el brazo del cabezal en posicionarseen el cilindro correspondiente. Si estamos accediendo a un archivo que esta en cilindrosadyacentes, el tiempo de posicionamiento tras haber leıdo todas las pistas de un cilindrosera pequeno pues ira al cilindro inmediatamente contiguo. Si por el contrario estamosaccediendo a dos ficheros, uno en el cilindro mas exterior y otro en el mas interno, eltiempo de posicionamiento sera bastante elevado. En sistemas multiusuario, el tiempode posicionamiento suele ser mayor que en un sistema mono-usuario, por la cantidadde diferentes procesos que acceden a distintos archivos simultaneamente. Generalmente,suele ser muy difıcil o imposible conocer exactamente el tiempo de posicionamiento, yentonces se da una estimacion del tiempo medio de acceso.

El retardo de rotacion hace referencia al tiempo que tarda el disco en situarse sobreel sector buscado, y se calcula en promedio como (la mitad del tiempo que tarda en daruna vuelta)3.

3Un disco SCSI de 15000 rpm tiene un retardo medio de 2 ms mientras que uno de 10000 rpm tiene unretardo medio de 3 ms y un UATA de 7200 rpm 4,2 ms y una disketera de 360 rpm 83,33 ms.

Organizacion y gestion de archivos 9 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Almacenamiento de datos

El tiempo de transferenciadepende de la cantidad de informacion que se desea trans-ferir y viene dado por la siguiente formula:

Tiempo de transferencia = tiempo de rotacion ∗ num bytes transferidosnum bytes por pista

1.3.8. El disco como cuello de botella

La tecnologıa actual permite transmitir datos a mayor velocidad de la queestos estandisponibles4. Para aprovechar al maximo las capacidades de las redes de comunicacionesse han disenado sistemas que permitan este aprovechamiento.

El striping consiste en tener sistemas de almacenamiento con multiples discos en losque la informacion se almacena a trozos entre todos, sumando ası el ancho de bandagenerado por cada uno de ellos y por tanto reduciendo proporcionalmente el tiempo detransferencia. Es un ejemplo tıpico deparalelismo.

Otra opcion es utilizar parte de la RAM como unidad disco (RAM disk) debido alabaratamiento de costes deesta. Lo que se hace es simular un disco en memoria, con loque eliminamos el retardo de rotacion y el de posicionamiento se reduce enormemente.El mayor problema es su volatilidad.

Otra posibilidad es la utilizacion de RAM como cache de disco, la cual contendra pagi-nas de datos del disco. Cuando se solicite un dato ubicado en almacenamiento secundario,el sistema buscara antes si esta ya en la cache, en cuyo caso evitara el tener que acceder adisco. El impacto en rendimiento es enorme, sobre todo cuando se accede a datos local-mente residentes (ubicados contiguamente).

Estos dosultimos tipos, (RAM disk y cache de disco) son ejemplos debuffering, quees una de las tecnicas mas utilizadas por los sistemas de E/S.

1.4. Cintas magneticas

A modo de resumen, las cintas son dispositivos magneticos de almacenamiento se-cundario de acceso secuencial (no directo). Entre sus principales ventajas podemos decirque son muy baratas, compactas, faciles de trasportar, se pueden almacenar en lugares condiferentes condiciones ambientales y proveen un acceso secuencial muy rapido a ficheros.

Los datos se organizan en la cinta uno tras otro, por lo que no es necesario ningun tipode direccionamiento. La superficie de la cinta se divide en pistas paralelas, cada una de

4Los discos actuales mas rapidos pueden transferir datos al sistema a razon de unos 100 MBytes/sg deforma sostenida. Por otra parte, las redes de comunicaciones permiten anchos de banda por cable de cobrede 1 Gbit/sg que equivale a 128 MBytes/sg y aun superiores con fibraoptica.

Organizacion y gestion de archivos 10 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Almacenamiento de datos

las cuales es una secuencia de bits. Suelen incorporar una pista para control de paridad.Los bytes se suelen agrupar en bloques de tamano que puede variar (de Bytes a KBytesdependiendo de las necesidades del usuario)5.

Los parametros fısicos caracterısticos de las cintas son la densidad medida en bits/pulgada(800, 1600, 6250, etc.), la velocidad (pulgadas/segundo) y el tamano entre bloques (pul-gadas). En la actualidad, las cintas se utilizan parabackupsy almacenamiento de archivoshistoricos de acceso poco frecuente.

5En el Catastro del Ministerio de Hacienda espanol, las cintas se formatean en bloques de 10 registrosde 720 bytes cada uno, que equivale a 7200 bytes x bloque.

Organizacion y gestion de archivos 11 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Almacenamiento de datos

Organizacion y gestion de archivos 12 Antonio Aliaga Mu noz

Capıtulo 2

Archivos

Este capıtulo es una introduccion a las operaciones fundamentales de los sistemas dearchivos: crear, abrir, cerrar, leer, escribir y posicionar (en lenguaje C:create, open, close,read, write, seek).

2.1. Archivos fısicos y archivos logicos

Un archivo es una coleccion de bytes existentes en algun dispositivo de almacena-miento (por ejemplo, en un disco o en una cinta). Por lo tanto, el archivo existe fısicamen-te. Un disco puede contener cientos o miles dearchivos fısicos. En sistemas operativoscomo LINUX se dice quecualquier dispositivo del sistemase puede considerar comosi fuera un archivo. Ası pues, el teclado, una impresora, un disco o una particion, serıantambien tratados como archivos.

Sin embargo, desde el punto de vista de un programa de usuario, un archivo es algomuy distinto. Apenas sabe nada del archivo, solo que puede enviar y/o recibir datos deel,ademas de cuando llega a su final (es como una lınea de telefono). Ademas, los programasde usuario suelen usar un numero limitado de archivos, y confıan la tarea de la comuni-cacion al sistema operativo. A esta idea de archivo como lınea de telefono la llamaremosarchico logico. Por lo tanto, el programa indicara al sistema operativo que asocie unar-chivo fısicoa unarchivo logico, y a partir de entonces solo se comunicara con elarchivologico.

2.2. Operaciones principales sobre archivos

Antes de entrar a describir las funciones que permiten el manejo de ficheros, hay quetener en cuenta que el lenguaje C distingue entre dos grupos distintos, las debajo nivel y

13

2o I.T.I.G./UAL Archivos

alto nivel.

La diferencia principal entre ellas es que en las debajo nivel (tipo UNIX) debendeclararse y mantenersetodas las zonas intermedias de memoria (buffers); todos los ac-cesos al fichero deben programarse manualmente, ası como controlar los punteros y con-tadores. Las funciones de bajo nivel, asocian al fichero un valor numerico llamadodes-criptor .

En las funciones dealto nivel (tipo ANSI), todas las lecturas y escrituras se realizansobre zonas intermedias de memoria (canaleso buffers) que no precisan mantenimientopor parte del programador, proporcionando ası un nivel de abstraccion entre la aplicaciony el dispositivo fısico utilizado, empleando el canalo buffer como dispositivo logicoo archivo logico. Este sistema esta pensado para trabajar con pantallas, discos, disquetes,teclados, etc. Aunque son dispositivos diferentes, el sistema dealto nivel asocia a cadauno un canal distinto permitiendo utilizar las mismas funciones de E/S con todos ellos.Las funciones de alto nivel asocian al fichero un registro (de tipo FILE). Existen dos tiposde canales de alto nivel, losbinarios y los detexto.

Desde un punto de vista practico, las funciones debajo nivel acceden a disco en cadaoperacion de lectura/escritura que se produce, mientras que las funciones dealto nivelsolo acceden a disco si en la operacion de lectura/escritura solicitada los datos requeridosno se encuentran en ese preciso instante en elbufferdel archivo. De este modo, en un altoporcentaje de ocasiones los datos estaran en elbuffery nos ahorraremos muchos accesosa disco, haciendo que nuestras aplicaciones sean mas rapidas.

2.2.1. Abrir archivos

Una vez asociado unarchivo logico o canal a un archivo fısico, debemos decirleal sistema operativo que queremos hacer con el archivo. Existen dos opciones:abrir unarchivo existenteo crear un archivo nuevo (esto implica borrar cualquier informacionque contuviera en caso de existir previamente). Una vez realizada alguna de estas dosoperaciones, el archivo queda a disposicion del programa para leer o escribir, posicionadoal principio del mismo.

crear (bajo nivel): int creat(char *nombreArchivo, int modo)abrir (bajo nivel) : int open(char *nombreArchivo, int modo)

crear y abrir (alto nivel) : FILE *fopen(char *nombreArchivo, char *modo)

2.2.2. Cerrar archivos

Un archivo debe cerrarse siempre. Solo ası nos aseguraremos que todos los cambiosproducidos en el mismo quedan escritos en el archivo. Cuando termina un programa se

Organizacion y gestion de archivos 14 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Archivos

cierran todos los ficheros automaticamente, pero esto no ocurre si el programaabortaantes de su fin.

Como se vio en el capıtulo anterior, es mas eficiente trabajar con bloques de datos quebyte a byte. Por ello, el sistema operativo no realiza los cambios de manera inmediata enel disco, sino que utiliza unbuffer intermedio. Al cerrar el archivo, se descarga todo elcontenido delbufferen el disco.

cerrar (bajo nivel) : int close(int descriptorFichero)cerrar (alto nivel) : int fclose(FILE *descriptorFichero)

2.2.3. Leer y escribir en archivos

Las funciones de lectura y escritura en archivos son las operaciones fundamentales delos procesos de E/S de cualquier sistema.

leer (bn): int read(int descriptorFichero, void *buffer, unsigned numeroBytes)escribir (bn): int write(int descriptorFichero, void *buffer, unsigned numeroBytes)

leer (an): int fread(void *buffer, int numeroBytes, int contador, FILE *descriptorFichero)escribir (an): int fwrite(void *buffer, int numBytes, int contador, FILE *descrFichero)

2.2.4. Posicionamiento (seek) en archivos

Cada vez que se lee o escribe con las funciones anteriores, el puntero que controla laposicion sobre el archivo se mueve al final de la cadena leıda o escrita. En ocasiones nospuede interesarsaltar directamente a otra posicion distinta de la actual sin tener que leerlos caracteres intermedios, o ir al final del fichero para anadir nueva informacion.

Posicionar (bn): long lseek(int descriptorFichero, long desplazamiento, int origen)Posicion (bn): long tell(int descriptorFichero)

Posicionar (an): long fseek(FILE *descriptorFichero, long desplazamiento, int origen)Posicion (an): long ftell(FILE *descriptorFichero)

Organizacion y gestion de archivos 15 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Archivos

Organizacion y gestion de archivos 16 Antonio Aliaga Mu noz

Capıtulo 3

Elementos basicos de las estructuras dearchivos

Cuando creamos estructuras de archivos, estamos imponiendo unorden a los datos.Existen varias formas de implantar esteorden. La mas basica consiste en un fichero detipo stream(traducido comocorriente). Supongamos que introducimos datos desde elteclado (nombre, direccion). Estos se guardarıan en el archivo en el mismo orden que losvamos tecleando como si fuera una corrienteo streamde caracteres, sin anadir ningunainformacion adicional.

Este procedimiento es simple, pero nos ocasiona varios problemas, ya que perdemosla integridad de las unidades organizativas fundamentales de nuestros datos; es decir,no sabemos distinguir nombres de direcciones, ni cuando empiezan o terminan. A estasunidades las llamaremoscampos. Por tanto, uncampo sera la menor unidad logica deinformacion con significado en un fichero.

El campo es un conceptologico importante para la estructura del fichero, pero notiene que existir fısicamente.

3.1. Estructuras de campos

Existen varias formas de estructurar los archivos en campos (Ver la figura 3.1):

Campos delongitud fija .

Comenzar cada campo con unindicador de longitud.

Utilizar undelimitador al final de cada campo.

Utilizar unaexpresion del tipoclave=valorpara identificar cada campo y su valor.

17

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

Figura 3.1: Formas de estructurar un archivo en campos.

3.1.1. Campos de longitud fija

Lo normal es que los datos que cada campo puede contener no tengan la misma longi-tud. Sin embargo, si a la hora de almacenarlos en el archivo utilizamos el mismo tamanopara todos los datos de un campo conseguiremos delimitar exactamente la posicion queocupaeste en el archivo. La principal ventaja es que basta con un contadorpara localizarel principio y final de cada campo, y la mayor desventaja es que el archivo necesita espa-cio adicional (generalmente espacios en blanco) para cubrir el hueco no ocupado por losdatos. Tambien podemos tener problemas si tenemos que almacenar distintos campos endonde alguno de ellos pudiera ser excesivamente largo, o cuando los datos de un campopueden variar de longitudconsiderablemente.

3.1.2. Comenzar cada campo con un indicador de longitud

Otra forma de organizar los datos en un archivo es incluir al principio de cada campoun entero que indique la longitud del mismo. Esto es especialmenteutil si el tamano

Organizacion y gestion de archivos 18 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

de campo no supera los 256 caracteres, ya que ası solo tendrıamos que utilizar un byteadicional por campo.

3.1.3. Utilizar un delimitador al final de cada campo

En este caso es necesario elegir un caracter delimitador adecuado, que no este pre-sente en ningun dato. Suelen utilizarse, segun convenga, caracteres de espaciado (blanco,tabulador, salto de lınea), u otros caracteres especiales de uso poco frecuente en el textocorriente ($, &).

3.1.4. Utilizar una expresion

Esta opcion tiene una ventaja que las otras no tienen, y es que cada campo proveeinformacion a cerca de su propia estructura (metainformacion). Ası solo se incluirıan enel archivo aquellos campos que existieran realmente, ignorando los que no tienen valor.Suele utilizarse en combinacion con otros metodos, fundamentalmente con delimitadores.La gran desventaja es la cantidad de espacio adicional que requiere (50 %o mas delespacio esta ocupado por informacion de control).

3.2. Estructuras de registros

Un registro se define comoun conjunto de campos que permanecen unidos desde unpunto de vista de alto nivel organizativo. Al igual que ocurre con elcampo, el registroes un concepto logicode un nivel conceptual superior al campo y con significado propio.Los registros no tienen que existir en el archivo en sentido fısico.

Existen varias formas de estructurar los archivos en registros (Ver la figura 3.2):

Registros delongitud fija en numero de bytes.

Registros delongitud fija en numero de campos.

Comenzar cada registro con unindicador del numero de bytes de longitud.

Utilizar unarchivo auxiliar donde se indica la posicion de inicio de cada registro.

Utilizar undelimitador al final de cada registro.

Organizacion y gestion de archivos 19 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

Figura 3.2: Formas de estructurar un archivo en registros.

3.2.1. Registros de longitud fija en numero de bytes

Al igual que ocurre con los campos, con este metodo se fuerza a que todos los re-gistros tengan la misma longitud. Suele ser el metodo mas utilizado en la organizacionde archivos. No es necesario que los campos del registro tambien sean de longitud fija(pueden ser de longitud variable), lo cual implicarıa la utilizacion de espacios de relleno(filler).

3.2.2. Registros de longitud fija en numero de campos

En lugar de fijar el tamano del registro, una mejor solucion consiste en fijar el numerode campos que contiene. Podremos reconocer el comienzo de cada registro simplementecontando el numero de campos leıdos.

Organizacion y gestion de archivos 20 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

3.2.3. Comenzar cada registro con un indicador del numero de bytesde longitud

En este caso se anadirıa un entero al comienzo de cada registro indicando el numerode bytes del registro. Este es el metodo mas usado para manejar registros de longitudvariable.

3.2.4. Utilizar un archivo auxiliar donde se indica la posicion de ini-cio de cada registro

Es lo que se conoce como unındice de registros. Nos permite conocer la posicionexacta de inicio de cada registro ası como su longitud por la diferencia con la posicion delregistro siguiente.

3.2.5. Utilizar un delimitador al final de cada registro

Esta solucion es equivalente a utilizar delimitadores para campos. El caracter delimi-tador, por tanto, no debe estar incluido en los datos almacenados. Normalmente suele serel caracterfin de lınea(LF) o el parretorno de carro masfin de lınea(CR+LF).

3.3. Buffers y bloques de registros

Como ya se ha citado en el primer capıtulo, se han desarrollado diferentes tecnicaspara obtener mejores resultados en cuanto a la minimizacion de los accesos a disco. Eluso de zonas de memoria a modo debuffersy la agrupacion de sectores enbloquessondos muestras de los metodos mas empleados por el sistema operativo para este fin. Ambassuelen emplearse simultaneamente ya que se complementan al aplicarse en fases distintasdel proceso de lectura/escritura de la informacion en disco.

3.3.1. Buffers

Un bufferno es mas que una porcion de memoria que se utiliza a modo decacheparala transferencia de datos desde el disco al procesador o viceversa. Cuando hablemos debuffersnos referiremos precisamente a la RAM, diferenciando aestos de los diferentesniveles dememoria cacheque suelen integrar las propias unidades de disco y sus tarjetascontroladoras.

Organizacion y gestion de archivos 21 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

El bufferse gestiona desde el sistema operativo, y eseste quien lo mantiene, dotandoal menos unopara cada fichero abierto durante el proceso de creacion (creat) o apertura(open) del archivo.

Cuando un programa de usuario solicita una peticion de lectura el proceso realizadose puede esquematizar como se muestra en el siguiente grafico (Ver la figura 3.3).

Figura 3.3: Algoritmo de lectura de un archivo conbuffer.Solo se produce un acceso a disco si el registro no se encuentra en el buffer.

De manera similar, el proceso de escritura serıa el representado segun el siguientegrafico (Ver la figura 3.4).

Con esta tecnica, al trabajar con grandes cantidades de datos en la RAM, se reducedrasticamente el numero de accesos a disco. La cuestion que se nos plantea a continuaciones si es suficiente con un solobufferpor fichero, o podemos mejorar el sistema de E/S conla utilizacion de variosbufferspor fichero. Veamos el siguiente ejemplo:

Un programa realiza entradas y salidas de un caracter cada vez en un fichero. Cuandolee el primer caracter, elbuffer se carga con el sector que contiene el caracter solicita-do, y este se transmite al programa. Si el programa decide escribir un caracter, entoncesel buffer es modificado. Si el programa solicita otro dato, antes de nada se debe volcarel buffer al disco y posteriormente recuperar el sector conteniendo dicho caracter . . . yası sucesivamente.

Esta situacion se puede optimizar utilizando dosbufferspor archivo, uno de entra-da y otro de salida. Ademas, se puede mejorar el rendimiento utilizando tecnicas de

Organizacion y gestion de archivos 22 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

Figura 3.4: Algoritmo de escritura de un archivo conbuffer.Solo se produce un acceso a disco si la siguiente operacion de lectura/escritura necesita datos

que no estan en el buffer.

doblebuffer. Esto consiste en disponer dosbuffersde escritura por archivo, de tal maneraque cuando se escribe uno en disco, se lee el otro y ası alternativamente intercambiandolos papeles de ambos. Por lo tanto, el sistema operativo puede realizar operaciones en unbuffermientras escribe el otro en disco. Esta tecnica no se limitaunicamente a dosbuffers,pudiendo tratarse de un conjunto debufferso buffer pooling.

3.3.2. Bloques

Como es logico pensar, el sistema operativo necesita tener control sobre el estado detodos lossectores(unidad mınima de transferencia de informacion entre el disco y elsubsistema de E/S) en un disco1.

Debido al enorme tamano de los discos actuales y en consecuencia, al gran numerode sectores queestos contienen, el sistema operativo utilizaun multiplo del sector comounidad mınima de transferencia de informacion de E/S, llamadaclustero bloque depen-diendo del gestor de ficheros. Por consiguiente, un bloque sera el espacio mınimo que

1Supongamos que tenemos un disco de 128 GBytes distribuidos en sectores de 512 bytes y que soloutilizamos 1 byte por sector para control; harıan falta 256 MBytes para gestionar esta tarea. Esto supondrıaque se deberıa destinar una porcion demasiado grande del disco para su propia gestion, ademas del tiempoadicional que deberıa invertirse para manejar estas enormes tablas

Organizacion y gestion de archivos 23 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

puede ocupar un fichero en disco. Un fichero no tiene por que tener el mismo tamano des-de el punto de vista fısico en distintos sistemas de ficheros, ya que en cada uno de ellosse puede definir el tamano declusterde manera distinta2.

Esta forma de gestionar el espacio en disco por el sistema operativo, repercute directa-mente sobre como se deberıan manipular nuestrosregistros de datos. Debemos conocercual es el tamano declusterpara aprovechar mejor las posibilidades que el sistema ope-rativo nos ofrece. Para ello, se deberıa tender a tener bloques del tamano de unclustero multiplos deeste3. Es facil calcular cuantos registros habra en un bloque realizando elcociente entre el tamano de bloque por el tamano de registro (suponiendo que un registrosea de longitud fija e inferior a la del bloque). A esto se conoce comofactor de bloqueoo de blocaje. Dependiendo del tipo de registros que pertenecen a un fichero se puedendistinguir dos tipos de emblocamiento, el fijo y el variable.

Factor de Bloqueo = Longitud de bloqueLongitud de regsitro

Emblocamiento fijo

Considera que todos los registros del fichero son del mismo tamano, normalmente concampos de tamano fijo y predefinido. Ademas se exige que el tamano del registro sea in-ferior al del bloque, y no se permite colocar registros en dos bloques distintos. Este tipode emblocamiento ocasiona generalmente un desperdicio de espacio al no poder ubicaralgunos registros completos en un bloque, en el caso de que el tamano de bloque no seamultiplo del tamano de registro. Requiere, pues, que se disenen los registros con un ta-mano adecuado.

Emblocamiento variable

Se aplica a registros de longitud variable. Puede haber dos variantes, elemblocamien-to variable no espaciado o no extendidoque no permite que un registro se ubique en dosbloques distintos; y elemblocamiento variable espaciado o extendido, en caso contra-rio. En el segundo caso, cuando un registro no cabe entero en un bloque se debe almacenarun puntero al siguiente bloque, ya queestos no tienen que ser adyacentes. En el caso detener registros de tamano superior al del bloque es necesario utilizar el emblocamientovariable espaciado.

2Por ejemplo, si un fichero contiene solo 5 bytes, y el tamano declusteres de 1 KByte (2 sectores), endisco ocupara 1024 bytes, desperdiciandose el 99.51 % del espacio disponible; en otro sistema con bloquesde 2 KBytes (4 sectores) ocupara 2048 bytes, desaprovechando el 99.76 %.

3Bases de datos comoOracleutilizan esta caracterıstica del sistema operativo, empleando (por defecto)bloques de 8 Kbytes en sistemas de 4 Kbytes porcluster. No obstante, el tamano de bloque es configurable.

Organizacion y gestion de archivos 24 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

En ambos casos, el calculo delfactor de blocaje es complejo y menos preciso queen el emblocamiento fijo, ya que se estima en base a la mediadel tamano de registro.Ademas hay que considerar lasmarcas que se almacenan para delimitar los registros ylos campos entre sı. Si el tamano medio de los registros es grande, tambien es aconsejableutilizar el emblocamiento variable espaciado.

3.4. Operaciones sobre registros. Fragmentacion del al-macenamiento

Las inserciones, borrados y actualizaciones de registros generan varios problemas,especialmente graves si los registros son de longitud variable. Incluso cuando los camposy registros son de longitud fija hay que dedicarle especial atencion.

3.4.1. La insercion

Si el fichero no mantiene ningun orden particular (Ver la figura 3.5), debemos buscarun bloque con suficiente espacio vacıo para colocar el nuevo registro, y en caso de noencontrar ninguno, obtendremos un bloque nuevo donde lo introduciremos.

El problema es mayor si existe un orden establecido en el archivo, por ejemplo declave primaria (Ver la figura 3.6). En este caso, hay que localizar primero el bloque quecorresponda (segun el orden). Si en el bloque hay espacio vacıo, tendremos que desplazarlos registros para colocar el nuevo registro en su lugar adecuado.

Si en el bloque no hay espacio vacıo para colocar el nuevo registro , tendremos quebuscarlo en otro bloque. Hay dos posibilidades:

1. Anadir un bloque nuevo B2 (de desbordamientoooverflow) (Ver la figura 3.7), quesera direccionado a partir de un puntero deoverflowque existe en la cabecera delbloque B1. En este nuevo bloque B2 podremos colocar los registros ordenadamente.A su vez, el bloque deoverflowpuede apuntar a un segundo bloque deoverflowB3,y ası sucesivamente.

2. Encontrar espacio en un bloque vecinoo proximo B2 (Ver la figura 3.8). Si el bloquecandidato B1 a albergar el registro no contiene suficiente espacio, lo buscamos en elbloque siguiente. Si en este segundo bloque B2 hay espacio suficiente, llevaremosel registrosuperior del bloque B1 al bloque B2 ordenadamente, desplazando a suvez los registros del bloque B2. Entonces insertamos el nuevo registro en el bloqueB1 en la posicion adecuada.

Organizacion y gestion de archivos 25 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

Figura 3.5: Insercion de un registro en un bloque no-ordenado.Los registros se insertan desde fuera hacia dentro para que el espacio libre quede siempre a

continuacion de la cabecera permitiendo la incorporacion de nuevos punteros.

Figura 3.6: Insercion de un registro en un bloque ordenado con espacio.

Organizacion y gestion de archivos 26 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

Figura 3.7: Insercion de un registro en un bloque ordenado sin espacio. Bloque deover-flow.

Figura 3.8: Insercion de un registro en un bloque ordenado sin espacio. Busqueda en elbloque vecino.

Organizacion y gestion de archivos 27 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

3.4.2. El borrado

En caso de tener unatabla de offsets, podemos eliminar el registro simplemente des-plazando los otros para dejar el espacio libre en el centro del bloque. De esta maneraqueda el espacio compactado, sin fragmentar.

Si no tenemos unatabla de offsetso no podemos desplazar los registros (Ver la fi-gura 3.9), tendremos que mantener una lista de registros borradoso espacio libre en elbloque que nos permita conocer que espacio libre hay y su tamano. Para ello serıa sufi-ciente con gestionar los fragmentos libres a modo de pila, colocando eltope de la pilaen el registro de cabecera del bloque, y en cada registro borrado un puntero al siguienteregistro eliminado.

Figura 3.9: Borrado de un registro con lista de espacio libre.

Otra tecnica es colocar unamarca de borrado en cada registro eliminado, sin mas.Este mecanismo requiere tener una tabla de registros borrados. El espacio libre que quedaal eliminar los registros puede ser recuperado realizando un proceso decompactaciongeneral del archivo.

3.4.3. La actualizacion

Si los registros son de longitud fija, las modificaciones deestos no afectan al almace-namiento ya que el tamano del registro no varıa, solo cambia su contenido.

Si los registros son de longitud variable, tenemos todos los problemas de la inserciony del borrado juntos, exceptuando la necesidad de crear marcas de borrado (en su caso).Se pueden dar dos casos:

Si la nueva version del registro es de un tamano mayor que la antigua, es necesariotomar espacio adicional del bloque. Esto puede suponer el desplazamiento de otrosregistros dentro del bloque, e incluso la creacion de un bloque de desplazamiento(overflow).

Organizacion y gestion de archivos 28 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

Si el nuevo registro es de menor tamano, podemos utilizar tecnicas de recuperacionde espacio, como se ha explicado en el apartado anterior.

3.5. Acceso a registros

Una vez que hemos tomado conciencia de que en nuestras estructuras de archivos elregistro es la mınima unidad de informacionque sera leıda o escrita a la vez, necesitamostecnicas para movernos eficientemente con esta filosofıa de organizacion de la informa-cion.

3.5.1. Llaves de busqueda

Es conveniente tener identificados cada uno de los registros del archivo con unaclave(llave o key) basada en su contenido. De esta manera conseguiremos realizar busquedasmas eficientes. Laclavees otra herramienta conceptual (como lo son el campo, registro,archivo, etc). Laforma canonicade una clave consiste en una representacion deesta quenos permite estandarizar los valores que la clave puede tomar4.

Podemos tener claves que identifiquen de formaunica a un registro. A estas claves lasllamaremosprimarias o primary keys. Otras claves que pueden definirse y que no tienenporque serunicas son lasclaves secundarias5.

Si una clave secundaria no identifica al registro de formaunica, debemos proveermecanismos que resuelvan la incertidumbre ocasionada al realizar una busqueda. Lo masnormal suele ser que se devuelva el subconjunto de registros que coinciden con dichaclave, permitiendo realizar desplazamientoo scroll entre ellos.

Algunos criterios importantes para escoger buenas claves primarias son:

Lasprimary keyssuelen no estar basadas en datos reales, debido a la incertidumbreintrınseca deestos, ya que en cualquier momento pueden repetirse valores y ademasno podran contener datosnulos.

Lasprimary keysno puedeno no deben estar definidas sobre valores cambiantes.

4Por ejemplo, si tenemos un registro cuya clave fuese el nombre ”ANTONIO”, el registro deberıa po-der encontrarse independientemente de escribir ”Antonio”o ”antonio”. En este caso, la forma canonicaconsistirıa en formar claves que solo contengan mayusculas y no contenganblancosal final de la cadena.

5Un ejemplo de clave primaria puede ser el ”NIF”, y una clave segundaria el ”nombre+apellidos”.

Organizacion y gestion de archivos 29 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

3.5.2. Busqueda iterativa de un registro en un archivo (busqueda se-cuencial)

En registros no bloqueados(Ver la figura 3.10), la eficiencia de una busqueda secuen-cial es en promedioN

2, siendo N el numero de registros del archivo, y por tanto, el orden

de eficiencia esO(N).

Figura 3.10: Busqueda secuencial en archivos no-bloqueados.

En registros bloqueadoslas busquedas son mas eficentes (Ver la figura 3.11). Comose ha visto en el primer capıtulo, el coste de recuperar un registro de disco es basicamenteel tiempo de posicionamiento(busquedao seek-time). Si recuperamos dos registros con-secutivos en un archivo no bloqueado, necesitaremos dos accesos a disco, tardando mastiempo que en recuperar esos dos registros en un solo acceso transfiriendo los datos de unsola vez. En este caso, solo habra que posicionarse en el primero de ellos y transferir enbloque la informacion de ambos.

Por tanto, podemos mejorar el rendimiento de la busqueda transfiriendo bloques deregistros en lugar de registros individuales. Aunque aumentara el tiempo de transferen-cia (que es proporcional a la cantidad de informacion), el tiempo de busqueda se redu-cira drasticamente, y en conjunto, el coste de la busqueda sera mucho menor.

Sin embargo, aunque obtendremos tiempos de busqueda muy inferiores a la busquedaen archivos no bloqueados, el orden de eficiencia continua siendoO(N). En promedio,sin embargo, el numero de accesos se puede calcular comoN

2∗FB, donde FB es el factor

de bloqueo (numero de registos por bloque).

Organizacion y gestion de archivos 30 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

El bloqueo de registros no varıa el numero de comparaciones que deben realizarse enla RAM para encontrar el registro buscado.

Figura 3.11: Busqueda secuencial en archivos bloqueados.

La busqueda secuencial puede ser recomendable en las siguientes situaciones:

Busqueda de patrones en ficheros ASCII.

Ficheros con pocos registros.

Busqueda en ficheros almacenados en cintas.

Busqueda por claves secundarias con un gran numero de resultados por clave.

3.5.3. Acceso directo eındices

El acceso directo es la alternativa mas radical al acceso secuencial. Diremos que tene-mos acceso directo a un registro cuando podemos posicionarnos directamente al comienzodel mismo y leerlo.

Organizacion y gestion de archivos 31 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Elementos basicos de las estructuras de archivos

El orden de eficiencia sera, por tanto, constanteO(1), independientemente del numerode registros del fichero. En ocasiones, la posicion de cada registro se almacena en un fi-chero secundario oındice, o bien, si prescindimos deestos, podemos conocer su posiciona partir delnumero de registro relativo (RRN) con respecto al inicio del fichero (0, 1, 2,3, . . . ). EsteRRN suele asignarse a cada registro y se almacena conel segun el orden deintroduccion en el fichero. Para trabajar con elRRN de forma eficiente necesitamos quelos registros sean de longitud fija. En caso contrario, si los registros son de longitud va-riable, la eficiencia de la busqueda seguirıa siendoO(N) ya que no sabrıamos el tamanode cada registro y por tanto no podemos obtener la posicion del registro de forma directa(para calcularla habrıa que realizar una busqueda secuencial).

Por tanto, necesitamos registros de longitud fija conocida:

Posicion del registro en el fichero = RRN ∗ longitud del registro

Organizacion y gestion de archivos 32 Antonio Aliaga Mu noz

Capıtulo 4

Organizaciones basicas de registros enarchivos

Los archivos pueden organizar los registros que contienen de diferentes formas, adop-tando una u otra en funcion de la utilidad para la que esten disenados o del tipo de registroque almacenan.

Basicamente, existen cinco tipos de organizaciones:

1. Organizacion apilada.

2. Organizacion secuencial.

3. Organizacion encadenada.

4. Organizacion directa.

5. Organizacion indexada.

En este tema solo trataremos las tres primeras y la cuarta a modo de introduccion,dejando la organizacion indexada y la directa para mas adelante por abordarse en capıtulosespecıficos para cada una.

4.1. Archivos de registros no ordenados: Organizacionapilada

Este tipo de organizacion recibe su nombre de la forma en que se incorporan nuevosregistros al archivo, ya que se hace del mismo modo que en laspilas. Es decir, los nuevos

33

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

registros siempre se incorporan al final, tras elultimo registro existente. No existe, portanto, ningun orden establecido, ni existen referencias que indiquen la posicion de unregistro en el archivo.

El acceso a la informacionsolo puede ser secuencial, de tal manera que para accedera un registro siempre sera necesario pasar por todos los anteriores al mismo comenzandodesde el principio del archivo.

4.1.1. Estructura

En funcion de la estructura de los registros que contienen estos archivos se puedenclasificar en estructurados y no-estructurados. Losno-estructurados pueden contenerregistros sin estructura definida, con diferente numero de campos, y cada campo con dife-rente tipo de datos. Losestructurados, que pueden ser de longitud fija o variable, tienenuna estructura perfectamente definida; todos tienen el mismo numero de campos, yestosson del mismo tipo y mantienen el mismo orden en el registro.

4.1.2. No estructurados

El hecho de que no tengan una estructura definida, obliga a que con cada dato se debaalmacenar informacion a cerca de su contenido. Los registros tienen la forma que muestrala figura 4.1.

Cada registro esta compuesto por el paridentificador/valor con separadores entreambos y a su vez con separadores entre diferentes parejas. Por su propia naturaleza auto-descriptiva el espacio que ocupan con respecto a la informacion verdaderamenteutil esexcesivamente elevado.

A continuacion vamos a describir en que modo afecta la estructura de este tipo deorganizacion a las operaciones1 elementales que pueden realizarse con archivos.

La insercion tiene un coste computacional bajo ya que siempre se insertaran losnuevos registos al final delultimo bloque en disco. Por tanto, el orden de eficienciaesO(1).

1Insercion: incluir un nuevo registro en el archivo de datos.Lectura: localizar un registro a partir dealgun valor de clave primariao secundaria.Lectura consecutiva: tras haber realizado una lectura, consisteen leer el siguiente registro segun el criterio de busqueda establecido, de forma ordenada.Lectura exhaus-tiva: Listar todos los registros desde el principio hasta el final, sin ordenar.Lectura ordenada: Listar todoslos registros desde el principio hasta el final, ordenados por clave.Borrado: Eliminar el registro del archivo.Actualizacion: Modificar los valores de un registro.Reorganizacion: Compactar el archivo eliminando loshuecos dejados por los registros borrados o actualizados.

Organizacion y gestion de archivos 34 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

Figura 4.1: Organizacion apilada no-estructurada

La lectura es totalmente secuencial desde el comienzo y puede suponer la lecturadel archivo completo. Para cada registro accedido, antes de comparar con su valorhay que localizar el identificador deseado segun el criterio de busqueda establecido.Es por tanto, una operacion costosa de eficienciaO(N).

La lectura consecutivadel registro siguiente (en orden) dado su anterior es costosaya que el archivo no mantiene orden alguno. Supondra la lectura de todo el archivodesde su inicio, y el orden de eficiencia esO(N).

La lectura exhaustivaes una operacion poco costosa de eficienciaO(N).

La lectura ordenada, por el contrario, es una operacion muy costosa de eficienciaO(N2). Para cada dato hay que leer de nuevo el archivo completo.

El borrado consiste en marcar el registro con un caracter especial. No requiereninguna otra accion especial. Su eficiencia esO(1).

La actualizacion. Si el registro no cambia de tamano, se actualiza directamente. Encambio, si la longitud varıa habra que marcar el registro como borrado y realizar laposterior insercion como si de uno nuevo se tratara. En cualquier caso, la eficienciaesO(1).

La reorganizacion, o compactacion requerira de un archivo auxiliar donde ir co-piando los registros validos, comenzando por el primero hasta el final del archivo.

Organizacion y gestion de archivos 35 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

Es una operacion bastante costosa de eficienciaO(N).

4.1.3. Estructurados

En este tipo de archivos todos los registros tienen el mismo numero de campos y en elmismo orden, y si los registros son de longitud fija, ademas en la misma posicion. No esnecesario almacenar mas informacion que los datos en sı mismos. la definicion de cadacampo puede estar en el propio programa que gestiona el archivo (implıcitamente defini-da) o bien se puede incorporar como el primer registro del archivo. (Ver la figura 4.2).

Figura 4.2: Organizacion apilada estructurada con registros de longitud variable.

La manipulacion de este tipo de archivos tiene las mismas caracterısticas que los noestructurados, siendo todas las operaciones de caracter secuencial. Solo tiene la ventajadel ahorro que se obtiene al no tener que procesar los identificadores y que los camposestan ordenados en el registro, lo cual es importante para encontrar el registro que satis-faga la condicion de busqueda con un menor coste computacional.

La insercion: se realiza siempre al final del archivo,O(1).

La lectura: secuencial desde el principio,O(N).

La lectura consecutiva: una vez encontrado el primer registro es necesario comen-zar de nuevo desde el principio del archivo para recuperar el siguiente,O(N).

Organizacion y gestion de archivos 36 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

La lectura exhaustiva: al igual que en los no-estructurados ,se listan todos losregistros desde el primero hasta elultimo por orden de introduccion,O(N).

La lectura ordenada: para cada registro se debe recorrer de nuevo el archivo com-pleto,O(N2).

El borrado : se marca el registro con un caracter especial,O(1).

La actualizacion: si el registro no cambia de longitud, simplemente se reemplaza.En caso contrario, se marca como borrado y se inserta al final,O(1).

La reorganizacion: se procede como en los no-estructurados, utilizando un archivoauxiliar,O(N).

4.1.4. Resumen

De forma resumida podemos decir que las organizaciones apiladas tienen las siguien-tes caracterısticas:

Son la forma menos estructurada existente de organizacion archivos.

Su uso data de los comienzos de los sistemas automaticos de procesamiento deinformacion.

Se justifica su uso en la actualidad cuando se necesita una adquisicion muy rapidade la informacion, siendo en estos casos desaconsejable su procesamiento en tiemporeal.

Tambien se aconseja cuando se desconoce el dominio de la informacion adquirida.

Los principales inconvenientes de este tipo de archivos son:

Costes de tratamiento muy elevados.

Costes de almacenamiento muy altos.

Requieren reorganizaciones periodicas, sobre todo si la volatilidad de la informa-cion es alta.

El control de la informacion es difıcil de realizar, ya que permiten distintas ocurren-cias del mismo dato en diferentes posiciones del archivo (informacion redundante).

Organizacion y gestion de archivos 37 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

4.2. Archivos de registros ordenados: Organizacion se-cuencial

Con este nuevo tipo de organizacion se intentara resolver algunos de los problemasque presentan las organizaciones apiladas. En las organizaciones secuenciales todos losregistros estan ordenadosen funcion de unaclave. Una clave es un termino que pue-de estar compuesto por uno o varios atributos (campos) y que permite la identificacioninequıvoca de un registro, o que permite la ordenacion deestos en el archivo.

Los registros tendran una estructura perfectamente definida, con el mismo numero decampos, en el mismo orden y referidos al mismo dominio de la informacion, representan-do la misma propiedad del mundo real (Ver la figura 4.3).

Figura 4.3: Organizacion secuencial con registros de longitud variable.Los registros se encuentran ordenados por la clave ISBN.

Los registros pueden ser de longitud variable o fija. En los archivos con registros delongitud variable, el acceso es secuencial ya que no es posible determinar directamente laposicion de un registro en el archivo. Cuando los registros son de longitud fija, el accesose puede realizar de forma directa si disponemos de una claveunica y de un algoritmoque calcule la posicion relativa en el archivo a partir de esta clave.

Por tanto, parece imprescindible disponer de una clave que identifique de formaunicaa cada registro del archivo. En caso de no ser posible, sera necesario utilizar un atributoexterno que haga la funcion de clave primaria.

Organizacion y gestion de archivos 38 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

4.2.1. Estructura de la organizacion secuencial

Como ya hemos adelantado, los archivos estaran compuestos por registros de estructu-ra perfectamente definida, con el mismo numero de campos (atributos) ocupando el mis-mo lugar en el registro, y ademas, en los registros de longitud fija, en la misma posicion.Este tipo de organizacion secuencial no requiere el almacenamiento de identificadoresjunto a los valores.

4.2.2. Manipulacion de los archivos secuenciales

Las inserciones de los nuevos registros no se realizaran al final, sino en la posicionindicada por el valor de la clave. Por tanto, las inserciones y actualizaciones son mascostosas que en las organizaciones apiladas.

La insercion es una operacion compleja debido al orden establecido en el archivo,y mucho mas costosa que en las organizaciones de apilo. En primer lugar debemoslocalizar la posicion de insercion del nuevo registro. Si no hay un hueco libre ha-bra que desplazar todos los registros inferiores y finalmente se inserta el registro.Esta claro que esta operacion es muy costosa porque supone el desplazamiento degran cantidad de informacion,O(N) (Ver la figura 4.4).

Figura 4.4: Organizacion secuencial. Insercion de un nuevo registro.

Si las inserciones son muy frecuentes, para evitar este problema se puede emplearunazona de derrama, bien en el propio archivo, bien en un archivo auxiliar. En

Organizacion y gestion de archivos 39 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

esta zona de derrama se insertaran directamente los nuevos registros desordenada-mente como si de una organizacion de apilo estructurada se tratara. En este caso laeficiencia de la insercion seraO(1); (Ver la figura 4.5).

Figura 4.5: Organizacion secuencial. Insercion de un nuevo registro en un archivo dederrama.

En algun momento sera necesario reorganizar el conjunto del archivo, ya sea porquese llene la zona de derrama (siesta se encuentra en el mismo fichero), o porque sellegue a un numero considerable de registros en el archivo de derrama secundario.

Las inserciones son mucho mas rapidas, pero a costa de tener parte del archivodesordenado, lo cual nos genera ciertos problemas:

• Las busquedas, y en general cualquier acceso a la informacion, deberan ex-plorar dos zonas de datos diferentes, con procedimientos de acceso distintos.En la zona ordenada el acceso sera directo, y en la zona de derrama, el accesosera secuencial.

• Cuanto mas crece la zona de derrama, el acceso a la informacion sera maslento, por lo cual se hara mas necesaria la reorganizacion.

La lectura dependera de dos factores: el criterio de busqueda y el tipo de registro(longitud fija o variable).

Si el criterio de busqueda no se realiza por la clave, el proceso sera secuencial y elcosto computacional tan elevado como en las organizaciones apiladas,O(N). Si la

Organizacion y gestion de archivos 40 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

busqueda es por clave, el costo es muy bajo, ya que pueden utilizarse algoritmosrapidos, como por ejemplo la busqueda binaria que tiene un orden de eficienciaO(log2N). Si la busqueda en la zona ordenada del archivo no ha tenidoexito yexiste una zona dederrama, habra que buscar enesta de forma secuencial la clavedeseada, incrementandose considerablemente el tiempo de acceso.

Si los registros son de longitud variable, el algoritmo de busqueda puede aplicarsea bloques en lugar de a los registros, ya que se desconoce la posicion absoluta deestos en el archivo. Por el contrario, si los registros son de longitud fija y la clavedetermina su posicion en el archivo, la lectura puede ser directaO(1).

La lectura consecutivadepende de la condicion de busqueda. Si no se busca porclave, una vez recuperado el primer registro obtener el siguiente es tan costosocomo en las organizaciones apiladas ya que sera necesario recorrer todo el archivodesde el principio,O(N).

Si la busqueda es por clave primaria, el siguiente registro estara con una probabili-dad alta en el mismo bloque o en el siguiente,O(1), o por el contrario, en la zonade derrama.

La lectura exhaustivaconsiste simplemente en leer el archivo comenzando por lazona maestra de forma ordenada y siguiendo por la zona de derrama sin ordenar,O(N).

La lectura ordenada es rapida siempre que el predicado de ordenacion incluya laclave,O(N). Si existe zona de derrama se realizara una reorganizacion del archivoantes de proceder a la lectura y despues se realiza la lectura exhaustiva. Si el predi-cado no incluye la clave, para cada registro recuperado hay que recorrer de nuevoel archivo completo para recuperar el siguiente,O(N2).

El borrado consistira simplemente el marcar el registro con un caracter especial,O(1).

La actualizacion, si se modifica la clave del registro o varıa su longitud, se marcael registro como borrado y se procede a su posterior insercion. Si no se modifica laclave y la longitud del registro no cambia se modifica directamente el registro conlos nuevos valores.

La reorganizacion consiste en generar un nuevo archivo ordenado por la clave enel que se han eliminado los registros borrados y se han intercalado los registros dela zona de derrama.

Organizacion y gestion de archivos 41 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

4.2.3. Resumen

El empleo de archivos con organizacion secuencial resuelve algunos de los proble-mas que planteaban las organizaciones apiladas y mejora el coste computacional de otrasoperaciones. No obstante siguen siendo poco eficientes cuando existen zonas de derra-ma. Por ello suelen desaconsejarse cuando el tamano del archivo esgrande o cuando lainformacion es muy volatil por las continuas reorganizaciones que requieren.

4.3. Archivos con registros enlazados: Organizacion en-cadenada

Cuando es necesario manejar medios y grandes volumenes de informacion es reco-mendable almacenaresta en varios archivos relacionados entre sı, con el fin de reducirla redundancia y controlar la consistencia de los datos almacenados. Las clases de obje-tos del mundo realo entidadesse pueden representar por uno o varios archivos, y unarelacion entre dos o varias clases de objetos por un nuevo archivo.

Es necesario, por tanto, que nuestro sistema pueda operar con multiples archivos ala vez. Los archivos secuenciales no son adecuados para trabajar con varios archivos si-multaneamente.

Ası pues, si los registros de un archivo estan relacionados a su vez con otros objetos deotros archivos, sera necesario poder almacenar informacion de esta relacion en el propioarchivo. Esto lo conseguiremos definiendo unos atributos especiales llamadospunteros,que seran un atributo de un registro cuya funcion es la de senalar a otro registro delmismo o distinto archivo con el cual se encuentra relacionado.

No se debe confundir el significado de estos punteros con lospunterosde los lengua-jes de programacion que son otra cosa bien distinta. Un puntero permitira mantener unarelacion fısica o logica entre registros de archivos, no entre direcciones de memoria.

En consecuencia, un puntero podra contener:

La direccion de maquina de un registro (cilindro, pista, cabeza y sector). Estospunteros son los mas directos y eficientes, pero tienen inconvenientes, ya que de-penden del sistema fısico de almacenamiento y de su localizacion en el mismo;ademas requieren mucho espacio de almacenamiento.

La direccion relativa de un registro con respecto al BOF (begin of fileo comien-zo del archivo). Con estos punteros se consigue la independencia del dispositivo,ya que el registro siempre ocupara la misma direccion relativa (byte de origen conrespecto al BOF) en cualquier sistema de archivos. Ademas requieren menos espa-cio que los anteriores. Sin embargo, tienen el inconveniente de que dependen de la

Organizacion y gestion de archivos 42 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

posicion del registro en el archivo, de tal manera que si el archivo se reorganiza,cambiaran muchas de las direcciones relativas de los registros.

La identificacion de un registro (o valor simbolico) a partir de la cual puede ob-tenerse alguna de las dos direcciones anteriores. Estos punteros simbolicos son in-dependientes del dispositivo ası como de la posicion del registro en el archivo. Porcontra, son difıciles de gestionar ya que requieren de complejos algoritmos paratransformar su valor en la correspondiente direccion del registro.

Resumiendo, diremos que los archivos estan basados en una organizacion encadenadasi alguno de sus atributos es un puntero (de cualquiera de las clases vistas) a otro registrodel mismo archivo o de otro diferente. Desde un punto de vista logico, los registros puedenverse como eslabones de una cadena.

Los punteros podran representar:

Relaciones entre registros.

Relaciones entre archivos.

Relaciones entre tipos de entidades.

Un orden o secuencia entre los registros de un archivo, permitiendo tener un archivoordenado por varias claves a la vez.

4.3.1. Estructura de las cadenas

Los archivos que intervienen en las cadenas de registros pueden estar compuestosde registros de longitud fija o variable, siendo alguno de sus atributos un puntero. Porsimplicidad, en adelante supondremos que los registros son de longitud fija.

Una cadenasera una coleccion de registros referenciados, cada uno ocupando unaposicion relativa con respecto al primero (llamadocabeza de la cadena) en base a unpredicadode ordenacion (compuesto por uno o varios atributos). Una cadena puede con-siderarse como unalista de registros, debiendo conocerse en cada momento la cabeza yla cola de la misma.

El uso de organizaciones encadenadas permite representar facilmente las relacioneslogicas existentes entre el dominio de un problema. Los punteros permiten aumentar elconocimiento del dominio que aporta un registro; es como si los registros de los archivosapuntadosestuvieran incluidos en el registroapuntador, pero con las siguientes venta-jas:

Organizacion y gestion de archivos 43 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

Los datos de los registros apuntados solo son almacenados una vez, evitando redun-dancias superfluas.

La penalizacion (en numero de accesos a disco) del sistema es baja ya que solosera necesario un acceso adicional para localizar el registro apuntado.

Al no haber redundancia se evitan los problemas de las inconsistencias.

No obstante, tienen el inconveniente de que requieren un diseno cuidadoso de losprocesos que actualizan los valores de las claves, ya que si se pierde algun puntero de lacadena, la informacion del archivo situada a continuacion nunca sera accesible.

Normalmente, las organizaciones encadenadas se basan en la existencia de archivossecuenciales (ordenados por una sola clave). Cuando el acceso aestos se realiza por la cla-ve,este sera muy eficiente, pero cuando se requiere acceder con un predicado de busquedabasado en otro atributo, los tiempos de acceso aumentaran proporcionalmente al tamanode la cadena, como si fuese una organizacion de apilo. Para solucionar este problema esfrecuente definir varios punterosen el archivo que lo mantengan ordenado por diferentesclaves de busqueda.

Por tanto, los elementos de una cadena pueden formar parte del mismo archivo o dearchivos diferentes. Si los elementos de la cadena pertenecen a diferentes archivos, lasorganizaciones encadenadas representan relaciones entre entidades; y cuando todos loselementos de una cadena pertenecen al mismo archivo, las organizaciones encadenadasrepresentan secuencias logicas, al igual que las organizaciones secuenciales pero con va-rias diferencias:

El orden no viene determinado por la posicion fısica de los registros, sino por lospunteros. Los registros se incorporan al final del archivo evitando el uso de zonasde derrama.

Se pueden mantener tantas secuencias como se quiera incorporando nuevos punte-ros al registro.

Se necesita conocer cual es el primer registro de la cadena.

4.3.2. Manipulacion de los archivos encadenados

Este tipo de organizaciones encadenadas se aconseja para el uso de registros estructu-rados (con estructura fija definida) y de longitud fija. En el caso de registros de longitudvariable, el tiempo de procesamiento aumenta al no conocer la longitud de los registrosademas de por la propia gestion de los punteros. En los registros de longitud fija cono-cemos siempre la posicion exacta de cada puntero en la estructura del registro, (Ver lafigura 4.6).

Organizacion y gestion de archivos 44 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

Figura 4.6: Organizacion encadenada.La cadena muestra un orden de clave primaria dentro del propio archivo.

La insercion. El nuevo registro se puede incorporar en cualquier posicion del ar-chivo (al principio, al final o en huecos dejados por registros eliminados). Una vezinsertado se deben reasignar los punteros para mantener la secuencia de la cade-na ordenada (o de las cadenas, si hay mas de una), por lo que habra que recorrer lacadena para localizar los registros afectados, siendo en este caso la eficienciaO(N).

La lectura solo podra realizarse de forma secuencial comenzando por la cabezade la cadena, necesitando en promedioN

2accesos, siendo el orden de eficiencia

O(N). Si la busqueda no es por ninguna de las claves, se realiza como si fuera unaorganizacion de apilo.

La lectura consecutivade un registro a partir del anterior (basada en alguna clave)es inmediata ya que los registros estan ordenados,O(1). En la mayor parte de loscasos el registro siguiente estara en el mismo bloque de registroso en el siguiente.Si no es por clave hay que leer el archivo desde el inicio,O(N).

La lectura exhaustivaconsistira en posicionarse en el primer registro y a partir deel recorrer todo el archivo hasta el final,O(N).

La lectura ordenada debera localizar la cabeza y a partir de ella recorrer toda lacadena de forma ordenada,O(N). Si el orden no es por ninguna de las claves de lacadena, entonces su eficiencia esO(N2).

Organizacion y gestion de archivos 45 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

La actualizacion es un proceso sencillo si no se modifica ningun atributo pertene-ciente a alguna clave, simplemente actualizando su valor,O(1). Pero si intervieneen alguna cadena ordenada habra que reestructurar cuidadosamente los punteros,O(N). En ocasiones, puede ser interesante borrar e insertar en lugar de actualizar.

El borrado se realizara marcando el registro con un caracter especial y reasignandolos punteros de la cadena en la que interviene,O(1). Si el registro esta implicado enmas de una cadena, no podra ser marcado como eliminado mientras seasignificanteen las otras cadenas. Esto se controla mediante el uso de unas marcas en el propioregistro que indican la significancia del mismo con respecto a cada cadena.

La reorganizacion debera realizarse periodicamente debido a la existencia de re-gistros no-significantes para ninguna de las cadenas existentes en el archivo. Tam-bien puede ser necesaria si se ha producido algun fallo en el sistema (software ohardware)o en el proceso de mantenimiento del archivo y se ha perdido el punterode alguna de las cadenas declaradas, quedando informacion no enlazada que hayque eliminar.

En caso de existir unaunica cadena, se lee el archivo como si de una organizacionde apilo se tratara guardando en un archivo temporal los registros validos a modode organizacion secuencial (ordenadamente), para posteriormente asignar la direc-cion de cada puntero a su registro siguiente. Si hay mas de una cadena, el procesose complica pues sera necesario tener en cuenta los punteros que referencian a to-dos aquellos registros que cambian de posicion tras la reorganizacion. En cualquiercaso, la eficiencia de l areorganizacion esO(N).

4.4. Archivos relativos (hashing): Organizacion directa

Existe otro tipo de organizacion primaria basada en el direccionamiento calculadoo hashing, que proporciona un acceso muy rapido a los registros con cierta condicion debusqueda. Esta organizacion suele llamarseorganizacion directa.

La condicion de busqueda suele estar basada en un solo campoo atributo llamadocampo de direccionamiento calculado, y si este campo es la clave del archivo se de-nominaclave de direccionamiento calculado. Tambien necesitaremos una funcion hllamadafuncion de direccionamiento calculadoo funcion hasho funcion de aleatori-zacion, la cual devuelve para cada registro la posicion del mismo en funcion de la clave.Tambien puede devolver la direccion del bloque al que pertenece el registro, realizandoposteriormente la busqueda del registro dentro del bloque en la RAM.

Organizacion y gestion de archivos 46 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

4.4.1. Hashingestatico cerrado

El hashingestatico se denomina ası porque requiere conocera priori el numero deregistros que se van a almacenar2. Si la funcionhashdirecciona registros, se llamarahas-hing cerrado, y si devuelve la direccion de bloques de registros, le llamaremoshashingabierto.

El hashingcerrado3 se implementa como una tablao array de registros. Suponiendoque tenemosM registros, la funcion hashh debera transformar el campoo clavek en unvalor ente [0..M-1]. Normalmente, las funcioneshashtienen la forma:h(k) = k mod M .

Los valores dek no-enteros pueden convertirse utilizando la conversion ASCII. Elsiguiente ejemplo muestra un algoritmo tıpico de conversion para cadenas de caracteres:

temp = 1;for (i = 0; i < M; i++)

temp = (temp * k[i]) % M;direcci on = temp % M;

Las funcioneshashtienen el problema de que no garantizan que para cada dos clavesdistintas exista siempre dos valores de direccionamiento diferentes. No son funcionesperfectas. Generalmente, el espacio de direccionamiento calculado (los valores que puededevolver la funcion hash) suele ser mayor que el espacion de direcciones (o numero dedirecciones disponibles para los registros). La funcionhashlo que hace es establecer unacorrespondencia entre ambos.

En los casos en que la funcion hashdevuelve una misma direccion para distintosvalores de la clavek diremos que se ha producido unacolision. En estos casos tendremosque almacenar el registro en otra posicion diferente a la calculada porh ya queesta yaesta ocupada por otro registro insertado anteriormente. Por tanto, debemos disenar unproceso deresolucion de colisiones. Existen varios metodos:

Direccionamiento abierto: se examina el archivo hasta encontrar la primera posi-cion libre.

Encadenamiento: consiste en mantener unasareas de desbordamiento (derrama)extendiendo el array mediante el uso de punteros. La colision se resuelve colocandoel registro en estearea y encadenandolo al registro anterior con un puntero. Ası setendra una lista enlazada de registros para cada valor de la funcionhash.

2Por contraposicion llamaremoshashingdinamico a aquel que no precisa conocera priori el numero deregistros.

3Algunos autores tambien lo denominan hashing interno.

Organizacion y gestion de archivos 47 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

Hashingmultiple : consiste en aplicar una segunda funcionhash. Si se siguen pro-duciendo colisiones puede aplicarse una tercera funcion y tambien aplicar directa-mente direccionamiento abierto.

El objetivo de la funcion hashes distribuir los registros uniformente en el espaciode direcciones de manera que minimice el numero de colisiones y se ocupen el mayornumero de posiciones del array. Estudios demuestran que es recomendable tener tablasque no superen el 70 % . . . 90 % de espacio ocupado para evitar las colisiones y para queno se desperdicie demasiado espacio. Por tanto, para almacenarr registros en una tablahabra que escoger unM tal que0,7 ≤ r

M≤ 0,9, siendoM un numero primo, ya que se

ha demostrado que los numeros primos realizan una mejor distribucion de los registros alutilizarse conjuntamente con la funcion mod. Tambien es usual tomarM como potenciade 2.

4.4.2. Manipulacion de los archivoshash

En este tipo de organizaciones cualquier operacion es eficiente siempre que se realicebasandose en el campo clave por el que se calcula la funcion hash. En caso contrario, laeficiencia en la misma que la de los archivos de apilo.

La insercion se realiza siempre en la posicion devuelta por la funcion hash, O(1).Si se produce una colision debemos aplicar algun metodo de resolucion de colisio-nes que permita insertar el registro.

La lectura Se compara el registro con el indicado por la funcion hash, O(1). Si nocoincide es porque hubo una colision y debemos buscar en otro lugar en funciondel metodo de resolucion de colisiones implementado.

La lectura consecutivade un registro a partir del anterior debe realizarse de formasecuencial desde el inicio del archivo ya que no esta ordenado por ninguna clave,O(N).

La lectura exhaustivaconsiste en leer el archivo desde el inicio hasta el final sinordenar.

La lectura ordenada se realiza recorriendo para cada registro de nuevo el archivocompleto,O(N2).

La actualizacion es simple si no se modifica la clave. Basta con localizar el registroy cambiar su valor,O(1). Si se modifica la clave, tambien cambiara la direccionasociada por la funcion hash, por lo que habra que eliminarlo y volverlo a insertaren su lugar adecuado,O(1).

Organizacion y gestion de archivos 48 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

El borrado consiste en marcarlo como eliminado,O(1).

La reorganizacion no parece ser necesaria salvo que se disponga de zonas de des-bordamiento con registros marcados como eliminados y sea necesario recuperar elespacio.

4.4.3. Hashingabierto

Para adecuar elhashinga las caracterısticas del almacenamiento en disco los que sehace es dividir el espacio de direcciones de destino encubetas4, siendoestas bloques dedisco o bien un grupo de bloques contiguos. La funcion hashestablecera una correspon-dencia entre la clave del registro y un numero de cubeta relativo, en lugar de asignar unadireccion absoluta. En la cabecera del fichero debemos tener una tabla que convierta elnumero de la cubeta en la direccion fısica del bloque de disco correspondiente.

Con este metodo, el problema de las colisiones no es demasiado grave porque se asig-nan a una cubeta tantos registros como caben en la misma. Sin embargo, si una cubetase llena debemos tener un mecanismo que permita la insercion en otro lugar mantenien-do enlazada la lista de registros. Esto se hace con punteros a registros que guarden ladireccion del bloque y la posicion relativa del registro eneste.

El hashingque asigna un numero fijo de cubetas se denomina hashing estatico abierto.Este tiene varios problemas ya que puede ocurrir que se desperdicie mucho espacio o porel contrario, que nos falte. Para solucionar estas cuestiones se ha disenado elhashingdinamico.

4Tambien llamadas cubos.

Organizacion y gestion de archivos 49 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones basicas de registros en archivos

Organizacion y gestion de archivos 50 Antonio Aliaga Mu noz

Parte II

Indexacion

51

Capıtulo 5

Conceptos basicos sobreındices

5.1. Archivos conındices

5.1.1. Definicion

Al final de muchos libros aparecen unas cuantas paginas conteniendo unındice. Unındice es una tabla que contiene una lista de claves y la referencia a los numeros de laspaginas donde aparecen. Todos losındices estan basados en los mismos conceptos:clavesy campos referenciados. La funcion de unındice es proporcionar un camino para accedera un registro rapidamente evitando tener que escanear el contenido completo del libro odel archivo en busca de la clave deseada.

Los ındices son, por tanto, estructuras auxiliares disenadas para acelerar operacionesque no son eficientes en nuestras organizaciones basicas de archivos.

Un ındice es otra herramienta conceptual y permite imponer un orden en un archivosin necesidad de reorganizarlo. Tienen la ventaja de que puede haber variosındices defi-nidos sobre un archivo, basandose en distintas claves, lo cual nos permite tener multiplescaminos de aceso al archivo.

Desde un punto de vista formal, unındice es una coleccion de entradas de datos queproporcionan un camino eficiente para localizar todas las entradas de datos con un valorde la clave de busquedak. Cada entrada de datosk* contiene toda la informacion necesariapara recuperar todos los registros con el valor de la clave de busquedak (por ejemplo, unpuntero al registro referenciado).

5.1.2. Estructura de losındices

Debemos tener en cuenta dos cuestiones importantes:

53

2o I.T.I.G./UAL Conceptos basicos sobreındices

¿Exactamente que se debe almacenaren una entrada de datos?

¿Como se organizan las entradas de datospara soportar de forma eficiente recupe-raciones a partir de un valor dado?

Una entrada de datosk* nos permitira recuperar uno o mas registros con el valor de laclavek. Existen varias alternativas sobre que se debe almacenaren las entradas de datosde unındice:

1. Una entrada de datosk* es un registro de datos con valor de la clave de busquedak.

2. Una entrada de datosk* es un par< k,Rid > dondeRid es el identificador delregistro cuyo valor de clave esk (puntero).

3. Una entrada de datosk* es un par< k1, ListaDeRid > dondeListaDeRides unalista de identificadores de registros cuya clave de busqueda esk.

En el caso 1, elındice no necesita almacenar registros de datos de forma separada alos propios datos. Elındice esta contenido implıcitamente en la propia organizacion delarchivo (secuencial, encadenado ohash). Las alternativas 2 y 3, que contienen entradasque apuntan a registros de datos, son independientes de la organizacion usada para elarchivo de datos. La solucion 3 suele gestionar mejor el espacio, pero las entradas dedatos suelen ser de longitud variable. Si deseamos utilizar variosındices, uno de ellosestara basado en la opcion 1 para ahorrarnos tener que almacenar el contenido de archivovarias veces.

Una forma de organizar las entradas de datoses realizandohashingsobre la clave debusqueda. En este caso, las entradas de datos se tratan como un archivo con organiza-cion directa (hash). Otra solucion serıa organizar las entradas de datos construyendo unaestructura de datos para las busquedas:arboles yhash.

5.2. Propiedades de losındices

Veremos algunas propiedades de losındices que afectan a la eficiencia de las busque-das utilizando elındice.

5.2.1. Indices agrupados y no-agrupados (clustered/unclustered)

Un ındice esagrupado si el orden de los datos en elındice es el mismo que el de laorganizacion del archivo de datos. Por definicion, todos losındices de tipo 1 son agrupa-dos. Losındices de tipo 2 y 3 seran agrupados si los registros de datos estan ordenados

Organizacion y gestion de archivos 54 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Conceptos basicos sobreındices

por la misma clave delındice. Losındices basados enhashingno almacenan las entradasde datos de forma ordenada, por lo tanto, solo seran agrupados si utilizan la alternativa 1.Los ındices que mantienen entradas de datos ordenadas por la clave de busqueda utilizanorganizaciones basadas enarboles.

En la practica es raro mantener archivos de datos totalmente ordenados debido al costeque supone tener que reorganizar la informacion constantemente (inserciones y borrados).Normalmente, los registros son ordenados inicialmente en paginas o bloques que dejanun cierto espacio sin ocupar para absorber nuevas inserciones en orden. Si el espaciode la pagina esta agotado, se obtiene mas espacio usando paginas de desbordamiento(overflow). Posteriormente, el fichero debera ser reorganizado para asegurar un buen ren-dimiento. Por tanto, losındices agrupados son relativamente caros de mantenercuandoel archivo es modificado; tambien cuando las entradas de datos pueden ser movidas en-tre paginas estando los registros identificados por la combinacion (pagina, slot). Mientrasque solo podemos tener unındice agrupado en el archivo, podemos tener variosındicesno-agrupados.

El coste de utilizar unındice para recuperar un rango de registros en funcion de la clavede busqueda puede variar mucho. Si elındice es agrupado solo tenemos que recuperarunos pocos bloqueso paginas, si es no-agrupado tendremos que recuperar muchas paginasde registros.

5.2.2. Indices densos y dispersos (dense/sparse)

Un ındice esdensosi contiene al menos una entrada para cada valor de la clave debusqueda. Unındice disperso contiene una entrada para cada pagina de registros delarchivo de datos.

Los ındices dispersos deben ser agrupados, por tanto, podemos tener como muchoun ındice disperso. Tıpicamente, losındices dispersos suelen ser mucho menores que losdensos.

5.2.3. Indices primarios y secundarios

Si unındice esta basado en los campos de laclave primaria diremos que es unındiceprimario . En otro caso, es unındice secundario. Los ındices de la alternativa 1 sonprimarios y el resto secundarios. Unındice primario garantiza que no hay valores declave duplicados. Losındices secundarios pueden contener duplicados. En caso de quesepamos que en unındice secundario no hay duplicados, lo llamaremosındice unico(unique index).

Organizacion y gestion de archivos 55 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Conceptos basicos sobreındices

5.2.4. Indices sobre claves multiples

La clave de busqueda de unındice puede contener varios campos, llamandoseclavecompuesta.

En estosındices, diremos que una consulta de igualdades aquella en la que cada cam-po de la clave de busqueda se compara con una constante con el operador = (ej: edad = 20and salario = 10). Los archivoshashsolo permiten este tipo de consultas. Por otra parte,una consulta de rangoes aquella en la que alguno de los campos de la clave de busquedano se compara con una constante con el operador = (ej: edad< 30 and salario> 40), obien (ej: edad = 30 - omitiendo salario). El orden de los campos en la clave de busque-da delındice influye bastante a la hora de definireste (ej:edad+salariono es igual quesalario+edad).

5.2.5. Indices multinivel

Consisten en tener una especie deındice de unındice. Esto puede serutil cuando te-nemos unındice que esta compuesto de muchas entradas (ındices de gran tamano). Igual-mente podemos pensar en anadir un tercer nivel, etc., pero esto tiene lımites en terminosde eficiencia y en tal caso deberıamos considerar la implantacion de unındice basado enarboles-B.

Organizacion y gestion de archivos 56 Antonio Aliaga Mu noz

Capıtulo 6

Organizaciones indexadas

6.1. Organizacion secuencial indexada

Ver el tema 5 del libroFicheros: organizaciones clasicas para el almacenamiento dela informacion de Irene Luque Ruiz.

6.2. Organizacion indexada simple

Un ındicesimple es aquel que puede ser representado utilizandoarrays simplesdeestructuras que contienen las claves y los campos referenciados. Es importante recordarque unındice es una herramienta conceptual que impone un orden en un archivo sinnecesidad de reorganizarlo.

6.3. Estructura

Las entradas delındice consistiran en registros de longitud fijacon un campo para elvalor de laclavey otro campo para elpuntero a la posicion real del registro referenciadoen el archivo de datos.

En el ındice habra una entrada para cada registro del archivo de datos (es unındicedenso). El ındice esta ordenado, mientras que el archivo de datos no tiene por que estarlo(ındiceno-agrupado). Normalmente el archivo de datos suele tener unaorganizacionapilada para realizar mas eficientemente las inserciones y borrados, pudiendo tener re-gistros de longitud variable.

57

2o I.T.I.G./UAL Organizaciones indexadas

6.4. El acceso a los datos

La operacion de localizar y acceder a un registro del archivo de datos utilizando elındice es simple:

Las caracterısticas del nuevo procedimiento de busqueda son:

Se trabaja con dos archivos: el archivo de datos y el archivo deındice. El archivodeındice es considerablemente mas facil de gestionar por dos motivos:

• Los registros son de longitud fija, lo cual facilita el uso del algorıtmo debusqueda binaria.

• Los registros son de menor tamano, lo que permite tener todo el contenido enmemoria.

Al tener registros de longitud fija en elındice, estamos imponiendo un tamano maxi-mo de clave. Si las claves son el archivo de datos son de mayor tamano y se producetruncamiento, puede haber problemas al violar la restriccion de clave primaria.

El archivo deındice no almacena nada mas que el valor de la clave y el puntero enla mayorıa de los casos. Sin embargo, puede ser necesario guardar otros atributos,como por ejemplo, el tamano de registro.

6.5. Operaciones basicas en unındice

Hemos visto que mantener archivos de datos ordenados para poder ejecutar sobreellos busquedas binarias puede resultar demasiado costoso. Una de las grandes ventajasde utilizar ındices simples es que la adicion de registros puede realizarse mucho masrapidamente que en un archivo ordenado, siempre que podamos tener todo elındice enmemoria. Suponiendo que la longitud del registro deındice es pequena, podremos cargaren memoria varios miles de entradas en una estructura del tipoarray . Entonces, todas lasoperaciones de busqueda se realizaran en la RAM utilizando busquedas binarias, siendomucho mas rapidas, teniendo que acceder al archivo de datos una sola vez para hacerseek()y recuperar la informacion. En caso de no tener unındice y estar el archivo dedatos ordenado, cada operacion de busqueda (aunque sea binaria) accedera a disco, siendomucho menos eficiente.

Sin embargo, el mantenimiento de las estructuras deındices requiren la realizacion detareas adicionales, como por ejemplo:

Crear el archivo deındice originalmente vacıo y el archivo de datos.

Organizacion y gestion de archivos 58 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones indexadas

Leer el contenido delındice en memoria antes de usarlo.

Escribir elındice de memoria a disco despues de su uso.

Anadir registros al archivo de datos y alındice.

Eliminar registros del archivo de datos y delındice.

Modificar registros en el archivo de datos y en elındice.

6.5.1. Creando los archivos

Los dos archivos (datos eındice) se crean vacıos con los registros de cabecera nadamas.

6.5.2. Leer elındice en memoria

Se asume que elındice es lo suficientemente pequeno como para poder albergarlo enuna estructura de tipoarray. Cada elemento de la estructura es un registro delındice. Lalectura se realiza de forma secuencial desde el archivo deındice en disco a la estructuraen memoria, recuperando en cada acceso un gran numero de registros (para ahorrarnosaccesos a disco).

6.5.3. Guardando elındice en disco

Cuando no se necesita utilizar mas elındice, se guarda su contenido en disco. En lossistemas informaticos pueden generarse corrupciones de datos debido a fallos del sistema(softwareo hardware) o cortes de suministro electrico. Debido a que elındice se mantieneıntegramente en memoria y solo se actualiza en disco cuando se deja de utilizar, si antes derealizar esta operacion se produce un fallo, entonces tendremos un serio problema. Paraevitar desastres (o mas bien para poder recuperar el sistema ante un fallo) se deberıanimplementar al menos un par de mecanismos de seguridad:

El programa debe saber cuando elındice esta fuera de fecha (out of date). Esto pue-de realizarse gestionando una marca de modificado tanto en memoria como en lacabecera del archivo deındice en el preciso instante que se produzca la primera mo-dificacion. Esta marca se eliminara cuando se guarde elındice completo en disco.De esta manera, si se produce un fallo durante la ejecucion del programao antes definalizar el procedimiento de escritura, el archivo en disco quedara marcado comofuera de fecha.

Organizacion y gestion de archivos 59 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones indexadas

Cualquier programa, antes de utilizar elındice debera consultar su estado, y siesta marcado, debera regenerar elındice antes de su uso.

6.5.4. Insercion de registros

El procedimiento de insercion debe realizarse siempre sobre el archivo de datos ysobre elındice. Anadir en el archivo de datos es facil, solo deberemos recordar la posicionde insercion para asignarsela al puntero de la nueva entrada de datos en elındice. Como elarray del ındice esta ordenado, la insercion de un nuevo registro requerira probablementela reorganizacion del ındice. El procedimiento supondra el desplazamiento de todos losregistros posteriores al nuevo para dejarle espacio aeste. La gran ventaja de losındices esque este proceso se haceıntegramente en memoria sin acceder ni una sola vez a disco.

6.5.5. Borrado de registros

Al igual que la insercion, el borrado debe actuar sobre el archivo de datos (por los me-canismos estudiados en capıtulos anteriores: marca de borrado, recuperacion de espacio,etc.) y sobre elındice en memoria. Existen dos posibilidades:

Marcar simplemente el registro delındice como borrado.

Desplazar el contenido de todos los registros posteriores liberando el espacio de laentrada borrada.

6.5.6. Actualizacion de registros

Podemos distinguir dos casos, dependiendo de que el cambio afecte a la clave deindexacion o no:

La actualizacion modifica el valor de la clave. Esta operacion puede significar lareoganizacion delındice y del archivo de datos, para lo cual, el camino mas sencilloconsiste en realizar una operacion de borrado seguida de una insercion.

La actualizacion no afecta a la clave. Normalmente no afecta alındice, pero puedesuponer reorganizar el archivo de datos. Si el tamano del registro de datos no varıao disminuye, entonces solo hay que actualizar el archivo de datos nada mas. Encaso de que varıe su tamano, incrementandose, puede ser necesario recolocarlo enotra posicion del archivo de datos, teniendo por tanto que actualizar el puntero delregistro delındice.

Organizacion y gestion de archivos 60 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones indexadas

6.5.7. Indices que no caben en memoria

Los metodos vistos hasta ahora presuponen que el contenido completo delındiceesta en memoria. Desgraciadamente, esto no es posible con todos losındices existentes,teniendo que realizar las operaciones de mantenimiento delındice sobre almacenamientosecundario. Las desventajas de losındices simples que no pueden gestionarse integramen-te en memoria son las siguientes:

La busqueda binaria, al requerir varios accesos a disco, no es significantivamentemas rapida que realizarla directamente sobre el archivo de datos.

La reorganizacion delındice (debida a inserciones, borrados y actualizaciones) serealizara sobre disco siendo millones de veces mas costosa que haciendola sobreRAM. En este punto habrıa que reconsiderar seriamente la utilizacion de organi-zaciones basadas enhashsi la velocidad de acceso es la prioridad o de estructurasbasadas enarboles-B+ si se necesita la flexibilidad del acceso por clave y del accesosecuencial ordenado.

En cualquier caso, losındices simples proseen una importante serie de ventajas sobrelos archivos de datos ordenados por clave, aun cuando no puedan ser gestionados enmemoria:

Un ındice simple hace posible el uso de la busqueda binaria sobre archivos de datoscon longitud variable, ya que elındice establece una asociacion entre la longitudfija del ındice y la longitud variable del registro de datos.

Los registros delındice son mucho mas pequenos, por lo que las operaciones dereorganizacion, ordenacion, etc., seran mucho menos costosas sobre elındice quesobre el archivo de datos (debido a que habra que mover menor cantidad de infor-macion).

El uso delındice permite reorganizar las claves sin mover los registros del archivode datos.

Podemos tener diferentesındices por distintas claves de busqueda, mientras que enel archivo de datos ordenado por una sola clave solo se permite un orden.

6.6. Indices secundarios

6.6.1. Definicion

Un ındicesecundarioes aquel que permitira establecer un orden adicional al de laclave primaria en nuestro archivo de datos. Los campos o atributos en los que estan ba-

Organizacion y gestion de archivos 61 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones indexadas

sados estos nuevosındices se llaman claves secundarias yestos pueden contener valoresduplicados.

6.6.2. Estructura

Las entradas de datos de losındices secundarios suelen estar compuestas de un par declaves: una clave secundaria y la correspondiente clave primaria del registro de datos conel que esta relacionado. Las claves se almacenan en formacanonica (mayusculas) conregistros de longitud fija. Aunque serıa posible construir unındice secundario de igualmanera que unındice primario, incluyendo un puntero al byte de inicio del registro de da-tos asociado, existen poderosas razones para no hacerlo ası (borrados y actualizaciones).

6.6.3. Operaciones basicas

Insercion de registros

Cuando tenemos presente unındice secundario, la insercion de un nuevo registro dedatos supone tambien la insercion de una nueva entrada en elındice secundario. Pre-viamente debera haberse incluido esta clave en elındice primario, siendo el coste de lainsercion el mismo en ambos casos (desplazamiento de entradas desde la posicion de laclave hasta el final en RAM).

Borrado de registros

Borrar un registro de datos implica borrarlo del archivo de datos y tambien todas lasreferencias ael existentes en elındice primario ası como en los secundarios. Por lo tanto,habra que reorganizar los registros restantes delındice para recuperar el espacio liberadopor la entrada eliminada. Sin embargo podemos optar por no borrar las entradas deındicesecundario, especialmente si no podemos cargarlo en memoria y lo estamos manteniendoen almacenamiento secundario. Esto no afectarıa al funcionamiento de nuestra aplicacionya que al buscar una clave en elındice secundario, su valor de puntero en elındice pri-mario devolverıa un valorno-existe, lo cual nos indicarıa que dicha clave no es validaaunque este aun en elındice secundario. Con este metodo, podemos ganar enormementeen eficiencia de borrado ya que solo serıa necesario mantener elındice primario en lasoperaciones de borrado. Sin en lugar de la referencia a la clave primaria en elındice se-cundario, hubieramos almacenado el puntero al registro de datos, entonces no podrıamosignorar la operacion de borrado en estosındices, debido a que estarıamos apuntando aregistros erroneos que no se corresponden con la entrada indicada por la clave secundaria.Sin embargo, tenemos un espacio adicional ocupado por entradas de datos invalidas en

Organizacion y gestion de archivos 62 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones indexadas

los ındices secundarios. Si el sistema de archivos realiza pocas operaciones de borrado,esto no supone ningun problema adicional. No obstante, sera necesario realizar reorgani-zaciones periodicas de losındices secundarios eliminando aquellas entradas que no tienenasignado un valor de clave primaria valido. Si el sistema de archivos es muy volatil, en-tonces deberıamos considerar el uso de otras estructuras deındices como losarboles-B,que permiten el borrado de registros sin reorganizar todas las entradas delındice.

Actualizacion de registros

En la operacion de borrado hemos visto como elındice primario actua como unbufferprotector aislando alındice secundario de los cambios del archivo de datos. Este aisla-miento puede extenderse a la actualizacion de registros. Si nuestrosındices secundarioscontienen punteros al byte del archivo de datos no queda mas remedio que actualizar elındice secundario ya que los registros de datos podrıan cambiar de posicion. Pero si elındice secundario hace referencia alındice primario solo habra que cambiarlo si se modi-fica el valor de la clave primaria o de la clave secundaria, en otros casos, elındice quedaintacto.

Existen tres posibles situaciones:

La actualizacion cambia el valor de clave secundaria. Sera necesario reorganizar elındice para mantenerlo ordenado. Puede ser una operacion bastante costosa.

La actualizacion cambia el valor de la clave primaria. Esta operacion supone ungran impacto para elındice primario, pero en elındice secundario solo habra quemodificar el valor de la clave en aquellos registros afectados. Como el cambio noafecta a la clave secundaria, no habra que reorganizar elındice a menos que hayamas de una entrada para la mısma clave secundaria, lo cual puede significar quehaya que reorganizar localmente solo aquellos registros que coinciden en esta clavepara mantener elındice totalmente ordenado en aquellos casos de coincidencia dela clave secundaria.

La actualizacion afecta a otros campos. Todos los cambios que no afecten a lasclaves primaria o secundaria no suponen cambios en losındices secundarios.

6.6.4. La recuperacion de registros utilizando una combinacion declaves secundarias

Hasta ahora hemos encontrado un camino eficiente para recuperar informacion delarchivo de datos basandonos solo en la clave primaria (ındice primario) o en alguna de lasclaves secundarias (ındices secundarios).

Organizacion y gestion de archivos 63 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones indexadas

A modo de ejemplo, supongamos que tenemos un archivo de datos que guarda unacoleccion de grabaciones de musica. El archivo esta indexado por la combinacion delcodigo de companıa discografica y no de grabacion como clave primaria. Tambientiene dosındices secundarios basados en elcompositor y otro en eltıtulo de la obra.Si deseamos consultar aquellos registros que pertenezcan al autorA y a la obraO y notuvieramos estosındices secundarios, deberiamos realizar una busqueda secuencial sobrela totalidad del archivo de datos. Sin embargo podemos realizar busqueda muy eficientede la siguiente manera:

1. Recuperamos todos aquellas entradas delındice secundario cuyo autor esA.

2. Recuperamos todas aquellas entradas delındice secundario cuya obra esO.

3. Realizamos la interseccion de ambos conjuntos obteniendo aquellos valores de cla-ve primaria que estan en ambos.

4. Obtenemos los datos de los registros del archivo de datos.

Por tanto, utilizando losındices secundarios, podemos obtener rapidamente respuestaa consultas basadas en combinaciones de claves secundarias relacionadas con los opera-doresOR/AND mediante uniones o intersecciones de conjuntos.

6.6.5. Mejorando la estructura delındice secundario. Listas inverti-das

Las estructuras de losındices secundarios que hemos visto plantean dificultades endos aspectos:

Tenemos que reorganizar elındice cada vez que se anade un registro.

Si hay entradas de clave secundaria duplicadas,estas estaran repetidas haciendo queel tamano de los archivos deındices sea mayor de lo necesario.

Una posible solucion serıa cambiar la estructura delındice secundario asociando acada clave secundaria unarray de referencias de clave primaria con un numero fijo de en-tradas para cada clave secundaria. Este metodo soluciona (en parte) la segunda dificultadde la insercion de nuevos registros cuando existen valores duplicados de clave ya que eneste caso no habra que reorganizar elındice. Sin embargo nos ocasiona otros problemasanadidos:

Al proveer espacio para un numero fijo de registros por entrada de clave secundaria,necesitamos mecanismos que resuelvan el problema de tener mas de cuatroo cincoentradas para una misma clave.

Organizacion y gestion de archivos 64 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones indexadas

El espacio desperdiciado por las claves no usadas es bastante grande. Por tanto, ne-cesitamos una estructura que no requiera la reorganizacion delındice cada vez queinsertamos una nueva entrada y que no utilice mas espacio del necesario, permitien-do un numero ilimitado de entradas para cada clave duplicada.

Una mejor solucion consistira en enlazar una lista de referencias a cada valor de laclave secundaria. A este tipo de estructura le llamaremoslistas invertidas ya que acce-demos a la clave primaria a partir de la clave secundaria. El terminolista indica de hechoque tenemos una lista de claves primarias. Esta solucion permitira tener un numero inde-terminado de entradas para cada clave, de tal modo que la clave secundaria solo apareceuna vez ahorrando espacio de almacenamiento. Por el contrario, necesitamos reorganizarel archivo deındice solo si una nueva clave es insertada.

Por lo tanto, necesitamos redefinir la estructura de nuestrosındices secundarios, cons-tando ası de una entrada con la clave secundaria mas un puntero a la referencia de laprimera clave primaria asociada en la lista invertida. La lista invertida de claves primariasse almacenara en un archivo aparte.

El hecho de asociar elındice del archivo secundario a un nuevo archivo que contienelas listas enlazadas de referencias provee nuevas ventajas a la estructuras vistas hastaahora:

Solo necesitaremos reorganizar el archivo delındice secundario si una nueva clavesecundaria es insertada, o actualizada. Si borramos o anadimos registros de unaclave existente solo requiere actualizar la lista invertida.

La reorganizacion delındice secundario (inserciones o actualizaciones) es mas rapi-da al haber menos registros o entradas yestas son mas pequenas.

Permiten ser gestionados en almacenamiento masivo dejando mas espacio en RAMa otras estructuras de datos.

La lista enlazada no necesita ser ordenada.

La lista enlazada contiene entradas de tamano fijo lo cual permite ser compactadafacilmente para elimiar el espacio ocupado por entradas correspondientes a registrosde datos eliminados.

El principal inconveniente del uso de las listas de claves primarias es la imposibilidadde tener juntas las entradas correspondientes a una misma clave secundaria. Esto ocasionatener que reposicionarse en el archivo de la lista enlazada demasiadas veces para accedera los registros de una misma clave secundaria. Una solucion a este problema podrıa serleer la lista completa en RAM, lo cual puede ser muy costoso e incluso impracticable sitrabajamos con variosındices a la vez (se podrıa hacer paginacion leyendo solo una partede la lista en funcion de nuestras necesidades, en cualquier caso no resuelve el problema).

Organizacion y gestion de archivos 65 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizaciones indexadas

6.7. Binding: Enlazando o vinculando

A continuacion nos planteamos una cuestion importante que esta asociada a los siste-mas que utilizanındices:

¿En que momento se vinculan a la direccion fısica sus registros asociados?

En el desarrollo de este capıtulo hemos visto que la vinculacion de las claves prima-rias a una direccion se realiza cuando el archivo de datos es construido, mientras que enlos ındices secundarios, las claves secundarias se vinculan a una direccion cuando sonusadas. Logicamente, si unındice se relaciona directamente con el byte de inicio de cadaregisto del archivo de datos, conseguimos mayor rapidez en el acceso (es lo que sucede enlos ındices primarios). Por tanto, si pensamos en realizar lo mismo con losındices secun-darios, ganarıamos bastante en tiempo de acceso, sobre todo si elındice esta gestionadoen disco y no en memoria principal. Sin embargo, la desventaja de enlazar o vincular di-rectamente es que las reorganizaciones del archivo de datos afectaran a todos los archivosdeındices, pudiendo llegar a ser demasiado costosas. Al retrasar el vınculo o enlace hastael momento del acceso (en tiempo de ejecucion), podremos disenar ındices secundariosque requieran un mınimo de reorganizaciones cuando se anaden o borran nuevos regis-tros. Otra ventaja de referenciar losındices secundarios a las claves primarias en lugar dehacerlo directamente a la posicion fısica del registro es que podemos permitir la existen-cia de claves secundariasfalsas, ya que quien determinara realmente la existencia de unaclave o no sera la correspondiente clave primaria. De otra forma, cualquier valor de claveasociado a un puntero deberıa ser correcto (valido) o de lo contrario tendrıamos unındicecorrupto.

Con este metodo de referenciar losındices secundarios a partir de los primarios ob-tenemos un nivel de seguridad importante ya que solo tendremos que realizar cambiosimportantes en elındice primario, mejor que hacerlo en varios lugares (ademas los secun-darios).

Existen casos en los que puede ser deseable vincular losındices secundarios directa-mente al puntero del registro de datos:

Cuando se requiere un alto rendimiento en la recuperacion de datos.

Cuando el archivo de datos es estatico (no requiere adicion, borrado o actualizacionde registros o pocas modificaciones).

Por ejemplo, los archivos contenidos en CD-ROM (almacenamientooptico) son ar-chivos de solo lectura.

Organizacion y gestion de archivos 66 Antonio Aliaga Mu noz

Capıtulo 7

Reorganizacion multinivel con arbolesB y B+

7.1. Introduccion

Los arboles-B comenzaron a gestionarse a principios de los setenta pero no toma-ron forma hasta 1979 (Douglas Corner), dando una solucion eficiente al mantenimientoy la organizacion de grandes sistemas de archivos con un mınimo coste adicional, con-virti endose ası en la organizacion estandar para losındices en los sistemas de bases dedatos.

En un artıculo de R. Bayer y E. McCreight publicado en 1972 se dan los primerospasos hacia la solucion definitiva, realizando el planteamiento del problema desde la im-posibilidad de mantener elındice completamente en memoria principal. Se expone laarquitectura de la nueva estructura delındice, concluyendo que los tiempos de insercion,borrado y recuperacion de la informacion tienen un orden de eficiencia delogkN dondek es el tamano de pagina yN el tamano delındice (numero de claves). Por lo tanto, se haintroducido un nuevo concepto, que sera necesario optimizar en cada sistema de archivos,que es eltamano de pagina.

A modo de ejemplo, unındice con un millon de entradas y un tamano de pagina de64 necesitara (log642

20 ≤ 4) no mas de 4 accesos a disco para recuperar la informacionsolicitada. Por el contrario, una busqueda binaria requerira 20 accesos para la mismaoperacion. Ademas, la sobrecarga del sistema es mınima cuando se realiza una inserciono borrado de datos.

El nombrearbol-B (B-trees) puede provenir de tres diferentes orıgenes, ninguno deellos confirmado:

B de Boeing donde trabajaban R. Bayer y E. McCreight en 1972.

67

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

B de Bayer.

B debalanced, broad, bushy(balanceado, externo, poblado).

7.2. Planteamiento del problema

El problema fundamental de gestionar unındice directamente sobre el almacenamien-to secundario es la lentitud inherente al almacenamiento secundario. Este problema puededividirse en dos cuestiones mas especıficas:

La busqueda binaria requiere demasiados posicionamientos en disco, invirtiendomas tiempo del deseable.

Puede ser demasiado costoso mantener elındice ordenado para poder realizar busque-das binarias debido a la necesidad de desplazar grandes cantidades de datos cuandose insertan o borran datos.

7.3. Arboles binarios de busqueda

Una posible solucion podrıan ser losarboles binarios de busqueda. Los nodos de estaestructura de datos contienen los punteros (derecha e izquierda) a sus hijos. Si cada nodoes un registro de longitud fija y los punteros son el numero de registro relativo (RRN)podremos mantener esta estructura en disco.

Esta estructura no aparece ordenada en disco, sino de forma aleatoria, ni existe rela-cion entre la secuencia de registros y la estructura delarbol. Toda la informacion sobrela estructura de los datos esta basada en los punteros. Con este punto de vista, la adicionde un nuevo registro se realiza en cualquier posicion, generalmente al final del archivo,realizando ademas el enlace de esta nueva clave con los nodos apropiados. El rendimien-to de una busqueda en unarbol binario es bueno siempre y cuandoeste este balanceadoo equilibrado. Diremos que unarbol esta balanceadocuando la altura del camino mascorto a una hoja no difiera en mas de un nivel al camino mas largo. Se dice que estacom-pletamente balanceadosi todos los caminos son de la misma altura o longitud. Si unarbol no esta balanceado debido a que se realizan inserciones sin reorganizar elarbol,los tiempos de respuesta de las busquedas no seran los deseados en algunos de los casos,especialmente si enarbol esta siendo gestionado en almacenamiento secundario.

Organizacion y gestion de archivos 68 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

Figura 7.1:Arboles binarios de busqueda

7.4. Arboles AVL ( Adelson-Velskii-Landis)

Un arbol AVL es unarbol balanceado en altura. La maxima diferencia de altura entredos nodos con la raız es 1.

Dos caracterısticas importantes son:

Al exigir que la diferencia maxima permitida entre las dos ramas delarbol no ex-ceda de 1, garantizamos un cierto nivel mınimo de eficiencia en las operaciones debusqueda.

Al mantener elarbol en la forma AVL, la insercion de nuevos nodos implican eluso de alguna de las cuatro posibles rotaciones que se realizan sobre una zona localdel arbol que no necesita de mas de cinco reasignaciones de punteros. Es decir, lasnuevas inserciones son eficientes.

Los arboles AVL representan una solucion a la degeneracion producida en losarbolesbinarios de busqueda debido a las inserciones de nuevos nodos. El problema de losarbolesAVL es que no son directamente aplicables a la mayoria de las estructuras de archivosdebido a la gran cantidad de nivieles que presentan, suponiendo cada nivel un accesoa disco, resultando ineficiente el acceso a la informacion. Sin embargo son interesantesdesde el punto de vista de que permiten mantener unarbol de forma equilibrada con pocasoperaciones (bajo coste).

Organizacion y gestion de archivos 69 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

Figura 7.2:Arboles AVL

7.5. Arboles binarios paginados

La idea de la paginacion viene del hecho ya comentado en esta asignatura de quelo mas costoso en el acceso a disco es el tiempo de posicionamineto de la cabeza deldisco en algun lugar deeste. Una vez allı, la lectura de unan gran cantidad de datossecuencialmente es muy rapida. Por tanto, en un sistema paginado, despues de posicionarla cabeza, se lee el tamano de bytes correspondiente a una pagina completa del archivo.Una pagina contendra una gran cantidad de registros individuales, ahorrandonos el costedel acceso a disco para cada uno de ellos. Por tanto, deberemos dividir alarbol binario enpaginas, almacenandolas en bloques contiguos de disco.

En este ejemplo (Ver la figura 7.3) accederemos a cualquier registro con no mas dedos accesos a disco (de un total de 63 nodos). Cada pagina almacena siete nodos y puederamificarse en ocho nuevas paginas (64×7 = 448+63 = 511) y ası sucesivamente (4095nodos con cuatro accesos como maximo). Claramente, troceando elarbol en paginas obte-nemos una busqueda mas rapida sobre almacenamiento secundario, mejor que cualquierade la estudiadas hasta ahora.

El numero maximo de accesos en este tipo dearboles binarios paginados es (conrespecto a los arboles binarios):

En arboles binarios:log2(N + 1) - En arboles binarios paginados:logk+1(N + 1)

Organizacion y gestion de archivos 70 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

Figura 7.3:Arboles binarios paginados

Ejemplo: Sea unarbol completamente balanceado de 511 nodos por pagina, en 3niveles de paginacion (k=511, tamano en disco 8 kbytes por pagina).¿Cuantos registrospueden gestionarse con estearbol?:

logk+1(N + 1) = 3 =⇒ log511+1(N + 1) = 3 =⇒N + 1 = 5123 =⇒ N = 5123 − 1 =⇒

N = 134217721¿Cuantos accesos son necesarios para localizar un registro con elN calculado arriba en

un arbol binario?log2134217721 + 1 = 27

Con este ejemplo se demuestra la gran ventaja, desde el punto de vista del numero deaccesos al almacenamiento secundario, de utilizar la paginacion enarboles binarios.

Sin embargo, el uso de grandes paginas no es gratuito. Cada acceso a una paginarequiere la trasmision de una gran cantidad de datos, peor aun si el espacio ocupado porla pagina no esta siendo utilizado completamente. Pero el principal problema no eseste(ya que lo que invertimos en la transmision nos lo ahorramos en mayor medida en eltiempo de posicionamiento), sino como se organiza elarbol para que la busqueda searealmente eficiente.

Si tenemos el conjunto completo de claves delarbol antes de queeste sea construido,la solucion al problema es relativamente facil: podemos ordenar la lista de claves y cons-truir el arbol desdeesta, partiendo de la clave situada en el punto medio de la lista como

Organizacion y gestion de archivos 71 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

clave raız de la pagina raız delarbol (procediendo de igual forma con cada una de las dospartes de la lista, hasta el final).

Desafortunadamente, no solemos disponer de la lista completa de claves al comienzo,sino mas bien de una lista desordenada de claves que llegan aleatoriamente. Despues derecibir una nueva clave, debemos ir rotando elarbol hasta encontrar aquella posicion quelo deje de foma balanceada. Despues de insertar todas las claves, generalmente solemosobtener unarbol desbalanceado (Ver la figura 7.4). Este problema deriva directamente delhecho de que elarbol lo construimos desde la raız hacia abajo. Si las claves que entranen primer lugar no son las adecuadas, posiblemente tengamos un malarbol, o una malarama delarbol (si esta en un nivel inferior). A estar elarbol paginado, no podemos rotarpaginas completas de la misma forma que hacıamos en losarboles sin paginar, ya queesto supondra tener que romper paginas, lo cual abre un amplio mundo de posibilidadesy dificultades. Romper las paginas significara reorganizar parte delındice en disco ya queel cambio afectara a varias paginas. Esta operacion puede llegar a ser muy costosa si laspaginas son de gran tamano.

Figura 7.4:Arboles binarios paginados (desbalanceo)

En cualquier caso, nos quedaremos con la idea de que agrupar claves en paginas esuna mejor solucion al problema ya que reduce drasticamente los accesos a disco.

Sin embargo tenemos tres cuestiones pendientes de resolver:

¿Como nos aseguramos de que las claves de la pagina raız son buenos separadores,dividiendo al resto de las claves de una forma mas o menos equilibrada?

Organizacion y gestion de archivos 72 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

¿Como agrupamos claves que no deben compartir la misma pagina? (en el ejemplo(c,d y s).

¿Como garantizamos que cada pagina contiene un mınimo de claves? Si tenemos untamano de pagina grande, podemos tener paginas muy sobrecargadas y otras pocoocupadas desperdiciando espacio.

LOS ARBOLES-B SON LA SOLUCI ON A TODOS ESTOS PROBLEMAS.

7.6. Arboles-B

Los dos principales problemas que presentan losarboles binarios paginados son:

No existe una buena polıtica de situacion de las claves en los nodos lo cual provocala evolucion hacia unarbol desbalanceado.

Mientras algunas paginas delarbol estan completas, otras estan casi vacıas provo-cando desequilibrio en elarbol incrementando excesivamente la altura de algunossubarboles.

7.6.1. Definicion

Esta claro que el hecho de agrupar un numero determinado de nodos en un mismobloque de informacion reduce considerablemente el numero de accesos a disco. Esta ope-racion, desde un punto de vista logico, puede considerarse como cambiar elarbol binariopasando a sern-ario, siendon el numero de nodos en cada bloque. Por tanto, cada bloquetendra ahoran vıas o bifurcaciones. Cada bloque de registros se considerarıa como un no-do delarbol (un nodo tendrıa varias claves y varios apuntadores a otros subarboles). Estosarboles, por su naturaleza, tambien se llamanarboles multivıa o multinivelo arboles deaccesos multiples.

En unarbol multivıa (de ordenn), cada nodo tienen o menos punteros y contieneuna clave menos que el numero de punteros. Si un nodo esta lleno, tendra n-1 claves ynpunteros. Si el nodo no esta lleno, contendra i ≤ n− 1 claves yi + 1 punteros.

Al tener multiples claves, cuando se insertan registros se vuelven a presentar los mis-mos problemas que ocurrıan en losarboles binarios debido a la inadecuada seleccion delnodo raız y a la mala polıtica de distribucion de las claves, provocando el desbalanceo.Todo esta ocasionado por la seleccion en cada momento de una raız inadecuada, lo cualrequiere realizar reorganizaciones periodicas delarbol o de partes del mismo que tienenun coste computacional muy elevado. Hemos visto que si tuvieramos mas informacion a

Organizacion y gestion de archivos 73 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

priori , antes de seleccionar la raız, podrıamos construir unarbol mejor, lo cual hace pre-ver que retrasando la eleccion de la misma podemos solucionar este problema. Esta ideada lugar a la tecnica de construir elarbol de abajo hacia arriba, al reves de como se havenido haciendo hasta ahora. La polıtica a seguir en la construccion de losarboles-B con-sistira en seleccionar una nueva raız para dos nodos conocidos, permitiendo ası escogerla mejor para ambos.

Para definir losarboles-B utilizaremos la terminologıa expuesta por Knuth (mas claray menos confusa que la expuesta por Bayer y McCreight).

Propiedades:

1. En unarbol-B, unahoja es un nodo sin descendientes.

2. Cada nodo tiene como maximon descendientes.

3. Cada nodo tiene al menosdn/2e descendientes, excepto la raız y las hojas.

4. La raız tiene al menos 2 descendientes, salvo que sea una hoja.

5. Todas las hojas se encuentran al mismo nivel.

6. Un nodo (no hoja) conk descendientes tienek-1 claves.

7. Un nodo hoja tiene al menosdn/2e−1 claves y no mas den-1.

Por tanto, un nodo estara compuesto por una secuencia de claves ordenadas y por unconjunto de punteros (que siempre es mayor que el numero de claves en una unidad).

Las claveski cumplen quek1 < k2 < k3 < . . . < kn−1 y pi apunta a un subarbol convalores mayores queki−1 y menores queki.

7.6.2. Operaciones

La busqueda

La localizacion de una clave concreta en unarbol-B es inmediata:

1. Partiendo de la raız se realiza una busqueda de la clave en el nodo (si es grande elnumero de elementos se realiza una busqueda binaria).

2. Si la clavek esta en el nodo la busqueda ha terminado.

3. En caso contrario, suponiendo que la claveki < k < ki+1 se repite el proceso debusqueda descencidendo por el subarbol apuntado porpi.

Organizacion y gestion de archivos 74 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

La insercion

El mecanismo en que se basa la insercion para conseguir que elarbol este siemprecompletamente balanceado consiste en promocionar la clave central de un nodo que sedivide al no poder albergar mas claves (Ver la figura 7.5).

Figura 7.5:Arboles-B

Cuando un nodo esta lleno se ordenan todas las claves, incluida la nueva, y se elige lacentral para situarla en el nodo padre, dividiendo el nodo original en dos nodos cada unoapuntado por un puntero del nodo padre, con la mitad de claves cada uno.

Algoritmo de insercion:

1. Se busca la hoja delarbol donde debe insertarse la nueva clave.

2. Si el nodo no esta lleno se inserta de forma ordenada en ese nodo.

3. Si el nodo esta lleno:

a) Si el numero de claves es par, se ordena el conjunto de claves mas la nueva yla central se promociona al nodo padre, dividiendo el nodo en dos mitades conel mismo numero de claves a la izquierda y derecha de la clave promocionada.

b) Si el nodo es impar, se promociona una de las dos claves centrales, produ-ciendose una polarizacion derecha/izquierda al quedar uno de los nodos divi-didos con una clave mas que el otro.

Organizacion y gestion de archivos 75 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

El algoritmo de insercion resuelve el problema del desbalanceo porque siempre sepromociona la clave que nos conviene (la central).

La eliminacion

Se trata de un proceso mas complejo que el de la insercion. Siempre podemos recurrira la posibilidad de marcar la clave como borrada manteniendola en la estructrura delarbol, ya que ası se coserva la consistencia para posteriores accesos. Logicamente tiene elincoveniente de ocupar un espacio innecesario en memoria lo cual requerira de posterioresreorganizaciones.

Si decidimos eliminar la clave debemos recordar las restricciones impuestas a losarboles-b, concretamente que el numero de descendientes es al menosdn/2e.

Algoritmo de borrado:

1. Si se elimina una clave de un nodo hoja que tiene mas dedn/2e−1 claves, no hayque hacer nada mas (Ver la figura 7.6).

2. Si se borra una clave de un nodo intermedio (no hoja) se sustituye dicha clave porsu sucesor en elarbol: intercambio (Ver la figura 7.7).

3. Si algun nodo queda con menos claves de las permitidas (insuficiencia):

a) Se toma una clave prestada de un nodo adyacente (redistribuci on). En reali-dad, se sustituye la clave eliminada por la del padre y la del padre se sustituyepor la del hermano del nodo en el que se elimino la primera clave (un no-do siempre tiene un hermano adyacente excepto la raız) (Ver la figura 7.8).Otra forma de plantear laredistribuci on es creando un nodo auxiliar dondeinsertamos todas las claves de los dos nodos adyacentes (el que ha quedadoinsuficiente y su hermano) ademas de la clave separadora entre ambos queesta en el padre. Una vez realizado este proceso, se elige como clave separa-dora la clave central, que es la que se coloca en el padre (reemplazando a laanterior), y se se distribuyen el resto de claves entre los dos nodos.

b) Si el nodo en el que se va a borrar la clave no tiene nigun hermano adya-cente con mas dedn/2e−1 claves, entonces el prestamo lo toma del padrerealizandose una consolidacion oconcatenacion de nodos teniendo como re-sutado un nodo lleno (Ver la figura 7.9).

c) Si el nodo padre no puede prestar ninguna clave a sus hijos, debera pedir unaclave a algun hermano.

Organizacion y gestion de archivos 76 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

d) Si el nodo que presta la clave es la raız y esta solo tiene una clave, se produceun descenso en la altura delarbol.

Debemos tener en cuenta que las operaciones de insercion y borrado estan disenadasde tal manera que se preserva en todo momento la estructura balanceada delarbol.

Figura 7.6:Arboles-B (eliminacion simple en una hoja)

7.6.3. Organizacion del ındice enarbol-B

La estructura delındice enarbol-B es unarbol equilibrado en el que cualquier caminodesde la raız hasta una hoja tiene siempre la misma longitud. El numero de claves quealmacena cada nodo (factor de bloqueo) es una unidad menor que el numero de punterosa otros nodos delarbol. Ademas existiran otros punteros a los datos (zona maestra).

Una propuesta de implementacion de losarboles-B en lenguaje C puede ser la siguien-te:

typedef struct {long posicionRegistro;char clave[80];long punteroBloqueNivelAnterior;

} elementoB;

Organizacion y gestion de archivos 77 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

Figura 7.7:Arboles-B (eliminacion simple en un nodo intermedio)

Figura 7.8:Arboles-B (eliminacion: redistribucion)

typedef struct {long punteroBloqueNivelAnterior;elementoB bloque[FactorDeBloqueo];

Organizacion y gestion de archivos 78 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

Figura 7.9:Arboles-B (eliminacion: concatenacion)

} NodoB;

7.6.4. Variantes dearboles-B: arboles-B*

Uno de los inconvenientes que se pueden encontrar en losarboles-B es que serıa de-seable un mayor nivel de aprovechamiento del espacio que se reserva con respecto al querealmente esta ocupado por las claves. Es evidente que en el peor de los casos podrıamostener un arbol-B con mas del 50 % del espacio sin utilizar debido a la propiedad que dicequeun nodo tiene al menosdn/2e−1 claves.

Basicamente unarbol-B* es unarbol-B con alguna de sus propiedades modificadaspara que el nivel de aprovechamiento sea al menos del 66 % (2/3).

Propiedades:

1. Cada nodo tiene como maximon descendientes.

2. Cada nodo tiene al menos(2n− 1)/3 descendientes, excepto la raız y las hojas.

3. La raız tiene al menos 2 descendientes, salvo que sea una hoja.

4. Todas las hojas se encuentran al mismo nivel.

Organizacion y gestion de archivos 79 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

5. Un nodo (no hoja) conk descendientes tienek-1 claves.

6. Un nodo hoja tiene al menosb(2n− 1)/3c claves y no mas den-1.

Sin embargo, este tipo de definicion de las propiedades de losarboles-B* trae apare-jado el problema de la division del nodo raız, ya que siempre se toman dos nodos paraobtener a partir de ellos tres nodos nuevos con las claves redistribuidas, y resulta que laraız no tiene ningun hermano para poder realizar esta operacion.

Existen varias alternativas para solucionar este inconveniente:

Hacer que el nodo raız seamas grandeque el resto de nodos con respecto al numerode claves que almacena. De esta forma, podra dividirse en nodos que tendran sus2/3 partes llenas, cumpliendo todas las propiedades de losarboles-B*. Tiene elinconveniente de tener que manejar nodos de diferente tamano, lo cual dificulta eldesarrollo de los algoritmos.

Otra solucion consiste en realizar una division sencilla del nodo raız en dos partesiguales (como si de unarbol-B se tratase) y tener en cuenta en los procedimientosde insercion y borrado las caracterısticas especiales de estos nodos que desciendendirectamente de la raız.

7.7. Arboles-B+

Los arboles-B son una estructra que da un excelente acceso para recuperar un registroindividual a partir de una clave. Pero si deseamos recuperar una secuencia ordenada deregistros y el archivo de datos no esta ordenado, este proceso deberemos hacerlo a partirdel ındice lo cual es muy costoso, sobre todo si elındice esta gestionado en disco. Por otraparte, no conviene tener el archivo de datos ordenado por la baja eficiencia que presentaen las operaciones de insercion y borrado.

Los arboles-B+ resuelven este inconveniente incorporando un puntero en cada hoja ala siguiente.

typedef struct {char clave[80];long punteroBloqueNivelAnterior;

} elementoNodoB+;

typedef struct {long punteroBloqueNivelAnterior;

Organizacion y gestion de archivos 80 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

elementoNodoB+ bloque[FactorDeBloqueo];} NodoB+;

typedef struct {long posicionRegistro;char clave[80];

} elementoHojaB+;

typedef struct {ElementoHojaB+ bloque[FactorDeBloqueo];long punteroSiguienteHoja;

} NodoHojaB+;

Como puede observarse, en el primer nivel (hojas) existiran tantos nodos como seannecesarios para almacenar las claves de todos los registros del archivo de datos. Cada hojacontendra ademas de un puntero a cada registro de datos un puntero adicional a la siguien-te hoja, lo cual permitira acceder secuencialmente de forma rapida a todos los registrosdel archivo de datos ordenadamente. Los nodos intermedios ya no contienen punteros alarchivo de datos, estandoestos presentes solo en las hojas del primer nivel. En esta es-tructura delındice existe redundancia de informacion ya que en los nodos intermedios sealmacenan entradas delındice que ya se encuentran en las hojas.

Al primer nivel del ındice (hojas) se le llamaconjunto secuencialya que permiterealizar un recorrido secuencial rapido y ordenado por la clave.

7.7.1. Variantes dearboles-B+: arboles-B+ de prefijo simple

Uno de los inconvenientes de losarboles-B+ tal como se han descrito en este capıtuloes el alto nivel de redundancia existente debido a la necesidad de tener que duplicar todaslas claves de los nodos intermedios en el nivel de las hojas.

Los arboles-B+ de prefijo simple eliminan esta redundancia e incluso reducen elnumero total de nodos del conjunto delındice empleando trozoso prefijos de las claves enlugar de la clave completa, y direccionando bloques de registros en lugar de direccionarregistros individuales.

Por tanto, el archivo de datos (zona maestra) estara gestionado por bloques de re-gistros manteniendo una secuencia ordenada a traves de apuntadores de cada bloque alsiguiente, todos ellos en el dispositivo de almacenamiento secundario. Se tratara, por tan-to, de unaorganizacion encadenadade bloques de registros que constituira en sı mismael conjunto secuencialdel ındice.

Organizacion y gestion de archivos 81 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

Por otra parte, el conjunto delındice (es decir, los nodos intermedios) estara basdoen unarbol-B donde las claves son sustituidas por el prefijo de entrada al bloque y elcorrespondiente apuntador al bloque de datos en elarea maestra.

Mantenimiento del ındice

Mientras realicemos inserciones o borrados de registros en el conjunto secuencial queno impliquen una reorganizacion de los bloques de datos, entonces el conjunto delındicepermanece invariable.

Si por el contrario los cambios requieren reorganizar multiples bloques en el conjuntosecuencial, entonces el conjunto delındice debe reorganizarse conforme a las reglas delos arboles-B.

El tamano de bloque

El conjunto secuencial debe tener un tamano de bloque adecuado con respecto aldispositivo de almacenamiento secundario empleado (tamano de sector, de cluster, etc.) ytambien respecto de la RAM disponible y de las caracterısticas intrınsecas de los registrosque gestionemos.

El conjunto delındice debe regirse por los mismos parametros descritos para el con-junto secuencial. Normalmente, ambos suelen tener el mismo tamano de bloque.

7.8. Arboles-B frente a arboles-B+

Las estructuras basadas enarboles-B y B+ son las mas utilizadas en la organizacionde losındices en la mayoria de sistemas actuales.

Caracterısticas comunes:

Producenarboles equilibrados lo que permite acceder rapidamente a cualquier nodoy por tanto al registro de datos.

Las operaciones de insercion y borrado son bastante simples suponiendo un granahorro computacional.

Diferencias:

Los arboles-B no contienen ningun tipo de redundancia y no precisan alcanzar elprimer nivel delındice para acceder a los registros de datos; son mas rapidos.

Organizacion y gestion de archivos 82 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

Los arboles-B necesitan mas espacio para almacenar los niveles intermedios, ocu-pan mas, no obstante al no tener redundancias el tamano total delındice es menor(aunque no demasiado).

Un recorrido secuencial en unarbol-B es mas costoso que en unarbol-B+. El con-junto secuencial de losarboles-B+ permite un recorrido secuencial de todo el archi-vo de datos muy eficiente.

Organizacion y gestion de archivos 83 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Reorganizacion multinivel con arboles B y B+

Organizacion y gestion de archivos 84 Antonio Aliaga Mu noz

Capıtulo 8

Organizacion directa. Hashing

8.1. Caracterısticas de la organizacion hashing

Cuando se exige un alto rendimiento en la lectura directa de registros, losındicesbasados enarboles no son todo lo buenos que desearıamos, ya que poseen un orden deeficiencia O(log(FB+1)r). Tienen por tanto las siguientes deficiencias:

Las inserciones y borrados requieren mas de una operacion.

Las lecturas requieren al menos dos operaciones, en elındice y en los datos.

La organizacion hashingmejora el rendimiento consiguiendo extraer la informacioncon unaunica operacion de accesoO(1), de tal forma que solo se realizara un acceso adisco realizando toda la carga computacional en la RAM.

La organizacion hashse basa en la aplicacion de una funcion o algoritmo (funcionhash) a la clave de los registros, proporcionandoesta el valor de la direccion de alma-cenamiento del registro en un bloque de datos llamadocubo. De una manera ideal nodeberıa haber dos registros que fueran direccionados por la funcion hashal mismo cubo,o bien, que en cada cubo hubiera espacio suficiente para almacenar todos los registros queson direccionados al mismo cubo.

Dependiendo del numero de cubos disponibles para almacenar los registros, y de lafuncionhashexisten varios tipos dehashing:

Estatico. Se necesita conocera priori el numero de cubos disponibles.

• Cerrado. Solo existe un cubo. La funcion hashdetermina la posicion del re-gistro en el cubo.

85

2o I.T.I.G./UAL Organizacion directa. Hashing

• Abierto. Existe mas de un cubo, cada uno de ellos almacenando mas de unregistro.

Dinamico. No se requiere conocer el numero de cubos, yeste va variando en tiempode ejecucion, adaptandose a las necesidades del problema.

8.2. Elementos que intervienen en la organizacion has-hing

El tamano de los cubos.

La densidad de empaquetamiento de los cubos (δ).

La funcionhash.

La existencia de colisiones.

8.2.1. Los cubos o unidades de direccionamiento

Todos los registros se encontraran almacenados en unos cuantos cuboso unidades dealmacenamiento. Eltamano del cuboC determina labondaddel metodohashing, de talmanera que aumentando el tamano, tambien aumenta la probabilidad de que un registrose pueda alojar en ese cubo, pudiendo llegar a ser igual a 1 (la probabilidad) si existe ununico cubo de tamano mayor o igual al numero de registros.

Unacolision se produce cuando un registro es direccionado a un cubo que esta com-pleto, ocasionando un desbordamiento(overflow), para lo cual sera necesario disponer deuna zona de desbordamientoo derrama. Cuando existan colisiones sera necesario mas deun acceso para recuperar la informacion solicitada, perdiendo el metodo en eficiencia.

Un tamano de cubo demasiado grande ralentizara las operaciones de recuperacion yalmacenamiento, siendo necesario analizar todos los registros del cubo antes de realizardicha operacion; ademas requerira mucha RAM para su procesamiento. Se necesita, portanto, un compromiso entre el valor de este parametro y el numero de colisiones que seproducen. El tamano de cubo suele ser un multiplo del tamano de bloqueo cluster delsistema operativo: tıpicamente 512, 1024, 2048o 4096 bytes.

Dependiendo del tamano de los cubos que hayamos definido en nuestro sistema, elnumero de cubos de que disponemos puede calcularse como:

Fc = bCRc y c = d r

Fc

e Donde:

Organizacion y gestion de archivos 86 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizacion directa. Hashing

Fc ⇒ Factor de blocajeo factor de cubo;C ⇒ Tamano de cuboR ⇒ Tamano de registro;c ⇒ Numero de cubos;r ⇒ Numero de registros.

8.2.2. La densidad de empaquetamientoδ

La densidad de empaquetamientoδ es la razon entre el numero de registros y el tamanodel espacio de direccionamiento.

δ =r

c · Fc

Puede observarse claramente que cuandoδ disminuye, tambien disminuye la probabi-lidad de que se produzcan colisiones, pero aumenta el desperdiciode espacio de almace-namiento, y viceversa.

Podemos redfinir el numero de cubos en funcion de la densidad de empaquetamientode la siguiente forma:

c = dd r

Fc

e · 1

δe

8.2.3. La funcion hash

La funcion hashdetermina la homogeneidad de la distribucion de los registros enel espacio de almacenamiento. Esta funcion devuelve la direccion del cubo donde debeubicarse un registro dado.

Un algoritmo que realice una distribucion uniformede los registros en los cubos pro-ducira menos colisiones que otro que no realice dicha distribucion uniforme. Esto tambiendependera de que las claves de los registros correspondan, a su vez, con una distribucionuniforme.

Las operaciones basicas que realiza la funcionhashson:

1. Si la clave no es numerica, debe transformarla sin perdida de informacion, debiendoser un proceso reversible.

2. A partir del valor numerico de la clave, se obtendra un valor dentro del orden demagnitud del numero de cubos disponibles. Por ejemplo, si se dispone de 2970cubos, el orden de magnitud es 10000; para 75690 cubos, sera 100000.

3. Mediante un proceso de translacion se convierte el valor anteriormente calculadoen un numero de cubo entre 0 y c-1.

Organizacion y gestion de archivos 87 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizacion directa. Hashing

8.2.4. Tratamiento de las colisiones

Una colision o desbordamiento se produce cuando la funcionhashdirecciona un cuboque esta totalmente ocupado, por lo que sera necesario almacenar el registro en otra zonadistinta llamada zona de derrama o de desbordamiento. Las posibles soluciones a esteproblema son:

Tomar como zona de derrama una zona independiente de la zona maestra, abierta,sin lımites de direccionamiento.

El area de derrama se encuentra dentro de la zona maestra, utilizando unos cu-bos especiales,o bien almacenando los desbordes en los mismos cubos de la zonamaestra.

8.3. Hashingestatico

Se caracteriza fundamentalmente porque se necesita conocera priori el numero decubos disponibles, siendoeste fijo para el desarrollo del problema.

8.3.1. Algoritmos hashing

Algoritmo de la divisi on

Este algoritmo garantiza una distribucion uniforme de los registros en los cubos siem-pre y cuando exista una distribucion uniforme de los valores de las claves.

1. Se elige un divisord, primo y aproximadamente igual ac, (d ≤ c).

2. Ci = modulo(Vi, d); dondeVi = valor de la claveKi.

Caracterısticas:

Puede haber espacio desperdiciado debido a cubos que no llegan a utilizarse ya qued ≤ c.

Los registros con claves consecutivas se almacenan en cubos consecutivos.

Ejemplo:

Sea:r = 100000 registros;R = 60 bytes/registro;C = 1024 bytes/cuboPor tanto:Fc = 17 registros/cubo yc = 5883 cubos.

En consecuencia, tomaremosd = 5881.

Organizacion y gestion de archivos 88 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizacion directa. Hashing

Algoritmo del centro de los cuadrados

1. Dado un registroRi, su clave esKi y su valor numerico esVi entonces calculamosVi

2. Se toman los digitos centrales de igual orden de magnitud quec. En el ejemploanterior, comoc = 5883, su orden de magnitud es< c >= 10000, tomamos loscuatro digitos centrales deVi

2 obteniendoV ′i .

2. Se ajusta el numero obtenido anteriormente al intervalo[0, c− 1] multiplicando por

la fraccion de ajuste:ha =c

< c >. Entonces:Ci = V ′

i · ha.

En el ejemplo anterior,ha =5883

10000= 0,5883

Con este algoritmo, claves pequenas van al mismo cubo y claves consecutivas no vana cubos consecutivos.

8.3.2. Tenicas para evitar colisiones

En los algoritmos descritos anteriormente se pretende distribuir las claves en los cu-bos de forma uniforme de modo que se eviten los desbordes o colisiones. Si se conocenlas claves de los registrosa priori y el numero deestos es relativamente pequeno (unoscientos), es relativamente sencillo encontrar un algoritmo que sea capaz de evitar las co-lisiones. A estos algoritmos se les conoce comohashingperfectoya que los registrospueden localizarse con solo una operacion de lectura.

Sin embargo, en la mayor parte de problemas aparecen colisiones de manera inevi-table. Podemos dar como aceptable un algoritmo que garantice un maximo del 10 % deregistros con colisiones, para el cual el numero medio de accesos sera relativamente bajo.

El analisis de claves

El analisis de claves puede realizarse si las conocemos a priori, o bien conocemos elintervalo de valores en queestas pueden variar. El algoritmo tratarıa de encontrar gruposo patrones repetitivos de dıgitos eliminandolos, dando lugar ası a una distribucion masuniforme. Tambien es posible que se produzcan menos colisiones incorporando un mayorconjunto de atributos a la clave (por ejemplo, el nombre + apellidos + dni).

Doblehashing

En lugar de evitar las colisiones, lo que se persigue con este metodo es resolverlo lomas rapidamente posible aplicando una segunda funcion hashsobre la clave del registrocolisionado.

Organizacion y gestion de archivos 89 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizacion directa. Hashing

Aumento del desperdicio

Bien aumentando la capacidad de los cubos o disminuyendo la densidad de empaque-tamiento se consigue un descenso en el numero de colisiones. Por el contrario, tenemosun aumento del espacio necesario para almacenar la informacion y un aumento del tiempode transferencia de los cubos a memoria al tener mayor tamano.

8.3.3. Tecnicas de resolucion de colisiones. Operaciones

Cuando el algoritmohashingdirecciona un registro a un cubo que esta lleno, estese desborda y se produce una colision. Entonces debera ser almacenado en una nuevazona con suficientes garantias de que pueda ser recuperado en un tiempo razonablementepequeno. El tratamiento de los desbordamientos puede realizarse almacenandolos en elpropio area maestra, o bien en unarea especıfica llamada zona de derrama. La elecciondependera de los factores utilizados en la organizacion hashingy de las caracterısticas eldispositivo de almacenamiento.

Tratamiento de los desbordes en elarea maestra

Todos los desbordes de registros colisionados se almacenan en la propia zona maestrao en algun espacio reservado dentro deesta.

Almacenamiento de los desbordes en los cubos maestros. Cuando un registroprovoca una colision, se almacena en otro cubo de la zona maestra que tenga espa-cio libre. Se elige un cubo proximo al elegido en primer lugar (el que provoco eldesborde).

1. Se elige el cubo siguiente.

• Sencillo de implementar.

• Presenta problemas de aglomeracion cuando no existe una distribucionhomogenea de claves.

• Para encontrar un registro, primero se busca en el cubo elegido y si noesta allı se sigue buscando en el siguiente hasta encontrarlo, o bien, hastaencontrar un cubo incompleto (en este caso el registro no existirıa).

2. Se elige un cubo distante.

• La distancia se fija de antemano.

• Se evita el problema de los amontonamientos, pero funciona mal cuandoel nivel de ocupacion es alto.

Estos dos ejemplos presentan varios problemas:

Organizacion y gestion de archivos 90 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizacion directa. Hashing

• Presenta problemas en la recuperacion, ya que si el registro no esta en elcubo direccionado hay que seguir leyendo cubos hasta encontrarlo o biendar con un cubo incompleto.

• Problemas en la insercion, ya que para poder insertar hay que leer y ana-lizar el cubo completo para saber si tiene espacio disponible y en casode estar lleno, deberıa procederse de igual manera con el cubo siguientehasta encontrar un cubo que tuviera espacio disponible. El coste compu-tacional que representa esta operacion puede paliarse si en cada cubo sereserva un espacio para almacenar un indicador de ocupacion o una listade espacio libre.

• Problemas con los borrados ya que despues de localizar el cubo con el re-gistro a borrar,este puede eliminarse (teniendo que reestructurar todo elcontenido del cubo) o bien debe marcarse como borrado con un caracterespecial. Esto ocasiona graves problemas a la funcion de recuperacion yaque si antes de borrar el registro el cubo estaba lleno, ahora no lo estara yel algoritmo de recuperacion puede devolver un falso ”NO ENCONTRA-DO”debido a que ha encontrado un cubo incompleto, o de lo contrario,habrıa que analizar todos los cubos hasta el final. Si se decide no liberarel espacio de los registros borrados se resuelven estos problemas pero sedesperdiciara mucho espacio y se eleva el numero de colisiones al habermenos espacio libre.

3. Se establece unındice de cubos de ocupacion.

• La localizacion de un cubo disponible cuando se produce una colision serealiza en el catalogo.

• El catalogo se gestiona en memoria.

• De esta manera se pretende que como maximo sean necesarios dos acce-sos para recuperar un registro.

Cubos de desborde distribuidos en la zona maestra. Consiste en intercalar uni-formemente una serie de cubos entre los cubos de la zona maestra con la condicionde que no pueden ser direccionados por la funcion hash. Por ejemplo, si se inser-ta un cubo de desborde cada tres cubos de la zona maestra,este almacenara lascolisiones de estos tres cubos.

Tratamiento de los desbordes en unarea independiente

Se trata de unarea independiente a la zona maestra, que puede tener cualquier estruc-tura y puede estar organizada de cualquier forma, debiendo ser abierta. Generalmente setrata de una organizacion encadenada de registros. Bastarıa con reservar un espacio en

Organizacion y gestion de archivos 91 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizacion directa. Hashing

cada cubo para albergar un puntero al primer registro desbordado del primer cubo en lazona de derrama. Por tanto, en la zona de derrama existen tantas cadenas como cubos.Esta tecnica es viable y facil de implementar, pero tiene el inconveniente de los retrasosen las recuperaciones, ya que los registros en la zona de derrama pueden estar muy dis-tantes entre sı. Las inserciones con colisiones tambien son costosas computacionalmente.Esta tecnica puede mejorarse utilizando una estructura encadenada de cubos en lugar decadenas de registros. Mejora a la anterior ya que en la mayor parte de los casos solo senecesitaran dos accesos. Por el contrario, desperdicia mucho espacio ya que aunque solohaya una colision se reservara espacio para un cubo completo.

8.4. Hashingdinamico

La organizacionhashingha sido concebida para recuperar la informacion con un soloacceso a los dispositivos de almacenamiento secundario, sin embargo, la existencia de unazona de derrama trunca todas las espectativas al respecto. Las colisiones suponen un costecomputacional anadido a las operaciones de lectura, insercion y borrado, complicandoademas los algoritmos correspondientes, provocando que esta organizacion no satisfagalos requerimientos para los que fue concebida.

El principal problema deriva de la necesidad de la existencia de la zona de derramadebido a que el numero de cubos es constante y se fija aa priori, sin conocer exactamenteque claves se van a gestionar dsde un principio, o bien a que la funcionhashno es perfecta.

El hashingestatico estudiado hasta ahora permite construir una funcionhashque dis-tribuya uniformemente los registros en el espacio de direccionamiento aunqueestos no seconozcana priori, siempre y cuando su numero no varıe en el tiempo. Sin embargo, elhashigestatico, desde hace decadas solo se emplea para gestionarse en memoria principaly no para el almacenamiento en disco.

Cuando no conocemos el numero de registrosa priori o la cantidad deestos es varia-ble, elhashingestatico no garantiza la restriccion del numero de accesos.

El hashingdinamico surgio a principios de los anos ochenta como un conjunto demetodos y organizaciones que garantizan el acceso a la informacion con una sola opera-cion de transferencia.

8.4.1. Caracterısticas

Las caracterısticas comunes a todos los metodos dehashingdinamico son:

El numero de cubos no se fijaa priori en funcion del numero de registros actual oesperado, sino que los cubos se crean o destruyen segun van siendo necesarios.

Organizacion y gestion de archivos 92 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizacion directa. Hashing

Suele existir en casi todos los metodos un catalogo o directorio que mantiene infor-macion del numero de cubos existentes y su ubicacion en el dispositivo de almace-namiento.

En el catalogo se guardan los resultados de las salidas de la funcion hashsobre lasposibles claves de los registros.

Una vez aplicada la funcion hashsobre un registro, se localiza en el catalogo elcubo elegido obteniendo su direccion fısica.

Los cubos tienen un tamano fijo c, pudiendo almacenar un numero determinado deregistrosFc.

No existe una zona de derrama, aunque algunos metodos pueden mantener espaciostemporales de registros desbordados.

Fundamentalmente, la diferencia principal entre elhashingestatico y el dinamico esque enesteultimo el numero de cubos que puede direccionar la funcionhashpuede variarcon el tiempo.

8.4.2. Hashingextensible

Este tipo de organizacion utiliza una funcion hashque aplicada a una clave de un re-gistro obtiene un valor binario del tamano de la palabra de la computadora (generalmente32 bits), lo que significa que puede direccionar232 cubos. Estos cubos se van generando amedida que van siendo necesarios. Por tanto, en cada momento solo seran necesariosc′ deltotal dec cubos posibles, tomando solo los i bits menos significativos (0 ≤ i ≤ b = 32)de la cadena binaria devuelta por la funcionhash.

Todos los valores binarios para un determinadoi se almacenan en el catalogo juntoa la direccion fısica del cubo en el dispositivo de almacenamiento. Al numeroi se llamaprofundidad total del catalogopt, siendo2pt el numero de entradas existentes en cadamomento en el catalogo.

Las caracterısticas delhashingextensible que lo diferencian de otros metodos son:

Dado uni en el catalogo exixten2i entradas, de las cuales solo hay presentesc′

cubos, siendoc′ ≤ 2i.

Mas de una entrada del catalogo puede estar asociada a una salida, a un mismocubo.

El numero de entradas que apuntan a un mismo cubo es2pt−pj .

Organizacion y gestion de archivos 93 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizacion directa. Hashing

La insercion

1. Inicialmente, la zona de direccionamiento esta vacıa y el catalogo no existe, debien-do reservarse espacio en el dispositivo de almacenamiento para ambos.

2. Inserciones en profundidad 0.

a) No es neceario aplicar la funcionhashal registro.

b) Se generan en el catalogo, que inicialmente esta vacıo, 20 entradas (o sea, unaentrada).

c) Se localiza espacio para un cubo y se almacena allı el registro.

d) Al cubo se le asigna el valor de profundidadpj = 0, ya que no es necesarioningun bit para direccionar el cubo correspondiente (ya que solo hay uno).

e) Se asigna a la entrada del catalogo el 0, y como salida, la direccion del cuboseleccionado.

f ) Se van realizando nuevas inserciones hasta que el cubo este lleno.

3. Inserciones en profundidad 1.

a) Se reserva espacio para un nuevo cubo.

b) Se inserta una nueva entrada en el catalogo y se actualiza con la direcccion desalida de cada cubo.

c) A los cubos se les asigna el valor de profundidadpj = 1, ya que ahora esnecesario un bit para direccionar el cubo correspondiente (ahora hay dos).

d) Los registros almacenados en el primer cubo se redistribuyen entre los doscubos en funcion del bit menos significativo del valor devuelto por la funcionhashaplicada a cada clave.

e) Se van realizando nuevas inserciones hasta que el cubo este lleno.

4. Inserciones en profundidad 2.

a) Cuando alguno de los cubos se llene, se reservara espacio para un nuevo cu-bo y aumentara la profundidad del catalogo, siendopt = 2, teniendo cuatroentradas (00, 01, 10, 11).

b) Se reserva espacio para un nuevo cubo.

c) El cubo en el que se ha experimentado la colision se divide en dos, (los regis-tros se redistribuyen en funcion de los dos bits menos significativos).

d) A los dos cubos nuevos, se asigna el valor de profundidadpj = 2, mientrasque el cubo que no produjo ningun colision mantienepj = 1, y en el catalogohay dos entradas que apuntan ael.

Organizacion y gestion de archivos 94 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizacion directa. Hashing

Observaciones:

Las inserciones en profundidad superior a 2 se realizan de igual forma, desdoblandoaquellos cubos que se desbordan por colisiones, y redistribuyendo los registros entreambos.

Cuando la colision se produce en un cuboci cuyo nivel de profundidadpcisea igual

al nivel de profundidad total del catalogopt, sera necesario aumentar la profundidaddel catalogo en una unidad, originando nuevas entradas, y por tanto, haciendo quevarias de ellas apunten a un mismo cubo.

La reorganizacion de los cubos implica aplicar de nuevo la funcion hasha cada re-gistro para saber a cual de los nuevos cubos ira destinado, lo cual no es demasiadocostoso por realizarse en memoria. Sin embargo, la reorganizacion fısica de los re-goistros en dichos cubos sı puede se costosa, tanto mas cuanto mayor sea el tamanode los cubosc.

Suponiendo que el catalogo no es demasiado grande, pordra gestionarseıntegramenteen memoria.

La recuperacion

La recuperacion de un registro consistirıa simplemente en:

1. Aplicar la funcionhasha la clave del registro.

2. Tomar solo los bits menos significativos correspondientes a la profundidad delcatalogopt.

3. Acceder a la entrada del catalogo correspondiente y obtener la direccion del cubodonde se debe encontrar.

4. Cargar el cubo en memoria y analizar la existencia allı del registro. Si no se encuen-tra en el cubo es que no esta almacenado (ventajas de no tener zona de derrama).

El borrado

Para borrar un registro, primero ha de localizarse el cubo correspondiente, y despuesde transferirlo a memoria y reorganizarlo se vuelve a grabar. Si el proceso de borrado dalugar a que un cubo queda vacıo, se libera el espacio deeste y se reorganiza el catalogo.Se procedera de igual forma si es posible reunir los registros de dos cubos en uno solo.

Organizacion y gestion de archivos 95 Antonio Aliaga Mu noz

2o I.T.I.G./UAL Organizacion directa. Hashing

En caso de que el cubo quede vacıo, se libera su espacio y en el catalogo se actualizasu entrada para que apunte al cubogemelo, que es aquel en el que solo varıa el bit designificanciapt. Si no existe ningun cubo gemelo, el nivel de profundidad del catalogopuede disminuir en una unidad.

Tambien puede disminuir el numero de cubos sin que ninguno quede vacıo, siempreque el numero de registros total en los cubos gemelos sea menor queFc; en tal caso, sereunificarıan ambos cubos.

Organizacion y gestion de archivos 96 Antonio Aliaga Mu noz