You are on page 1of 22

Archivos

Almacenamiento de las Bases de Datos

 Las bases de datos se almacenan físicamente como archivos en algún medio de


almacenamiento.
 El SGBD puede recuperar, actualizar y procesar después estos datos cuando lo necesite.

Esquema Lógico

Esquema Conceptual Esquema Físico

Base de Datos
Tipos de almacenamiento
 Los medios de almacenamiento forman una jerarquía de almacenamiento que incluye dos
categorías principales:
 Almacenamiento principal o primario. Incluye los medios de almacenamiento en los que la CPU
(unidad central de procesamiento) puede operar directamente, como la memoria RAM.
 Acceso rápido
 Capacidad limitada
 Costo alto
 Almacenamiento volátil
 Almacenamientos secundario. Incluye, entre otros, los discos disco duros. La CPU no puede
procesar directamente los datos almacenados en éste; primero deben copiarse en el
almacenamiento principal.
 Acceso más lento
 Mucha capacidad
 Costo reducido
 Almacenamiento permanente
Almacenamiento de las BD

Los datos se intercambian entre los discos de almacenamiento y la memoria principal cuando sea necesario.
Como el intercambio de datos con el disco es lento comparado con la velocidad de la CPU, es fundamental
que el SGBD estructure los datos para localizarlos de la forma más eficaz.
Transferencia de datos
La transferencia de datos entre la memoria principal y el disco se realiza en
unidades de bloques de disco
 Un disco magnético está estructurado en pistas
 Una pista está dividida en sectores
 Un bloque de disco consiste en un número fijo de sectores contiguos.
 El tamaño del bloque lo establece el sistema operativo al formatear el disco y no se
puede cambiar dinámicamente

Para poder acceder a los bloques es necesario conocer:


 La dirección del bloque y
 La dirección del búfer (área reservada en el almacenamiento principal para almacenar un bloque)

Para leer datos, el bloque del disco Para escribir datos, el


se copia en el búfer de memoria. contenido del búfer se
copia en el bloque de disco.

El acceso a un bloque de un disco es una operación costosa debido a:


 Tiempo de búsqueda Las estructuras de archivos buscan minimizar el número Mantener en la memoria
 Retardo rotacional de transferencias de bloques para localizar y transferir principal tantos bloques como
 Tiempo de transferencia datos desde el disco a la memoria principal. sea posible
Organización de los archivos
Los datos normalmente se almacenan en forma de registros.
Los registros se agrupan en archivos.
En general, todos los registros de un archivo son del mismo tipo.

 Registros de longitud fija: todos los registros del archivo tiene exactamente el mismo tamaño en bytes.

• Cada registro de Empleado tiene una longitud de 73 bytes R es el tamaño en bytes de cada registro
• El archivo Empleado tiene un total de 8 registros r es la cantidad de registros del archivo

 Registros de longitud variable: los registros del archivo tienen tamaños diferentes.

Longitud variable

• Campos de longitud variable


La longitud variable puede ser debido a: • Campos multivaluados
• Campos opcionales
Organización de los archivos
El bloque es la unidad de transferencia de datos entre el disco y la memoria  los
registros de un archivo se asignan a bloques de disco.
 Organización extendida: almacena parte de un registro en un bloque y el resto en otro bloque, consecutivo o no. Los
registros se extienden más allá del final del bloque (pudiendo abarcar más de un bloque).

 Organización no extendida: no se permite que un registro esté almacenado en varios bloques.

 La cantidad de bloques del archivo = b


 El tamaño del bloque, en bytes = B
 En archivos con registros de longitud fija:
 Cuando B > R (tamaño del registro)  entran varios registros por bloque
 Cantidad de registros a insertar en un bloque de disco: fbl =  B/R  registros por bloque  factor de bloqueo
 En general, R no divide a B con exactitud, por lo que en cada bloque se desperdicia espacio igual a: B  (fbl * R) bytes
 Cantidad de bloques que se necesitan para almacenar un archivo de r registros: b =  r/fbl  bloques por archivo
Organización de los archivos
La asignación de los bloques de un archivo en disco puede ser:

 Asignación contigua: los bloques de un archivo se asignan a un conjunto de bloques de disco consecutivos.
 Desperdicio de espacio
 La lectura del archivo entero es mucho más rápida Tabla de asignación de archivos
 Número de búsquedas y tiempo de búsqueda mínimos
para acceder a archivos contiguos
 Se hace más complejo expandir el archivo

 Asignación enlazada: los bloques están dispersos en cualquier parte del disco; cada bloque del archivo
contiene un puntero al siguiente bloque del archivo.
 No hay desperdicio de espacio
 La expansión del archivo es más sencilla
 La lectura del archivo entero más lenta
Organización de los archivos
 Cabecera de Archivo
Una cabecera de archivo contiene información necesaria para los programas que tienen acceso
a los registros del archivo.
La información de cabecera:
 permite determinar las direcciones en el disco de los bloques del archivo y
 contiene la descripción de formato de los registros
a) Archivos con registros no extendidos y de longitud fija:
 longitud y orden de los campos dentro del registro
b) Archivos con registros de longitud variable:
 marcas de tipo de campo (campos opcionales)
 caracteres separadores entre los campos
 marcas de tipo de registro (registros de tipo mixto)
 se utiliza cuando se necesitar buscar registros dentro del archivo en disco
Operaciones con archivos
1) Operaciones de RECUPERACIÓN DE DATOS
No alteran los datos del archivo, sólo localizan ciertos registros para poder examinar y procesar su contenido.
La localización o búsqueda de un registro dentro de un archivo en disco se realiza de la siguiente manera:
 Se copian los bloques en los búfers de la memoria principal
 Los programas buscan el registro deseado, dentro de los búfers, utilizando la información de la cabecera del archivo.

 Búsqueda Lineal: se examina bloque por bloque hasta encontrar el registro o hasta haber buscado en todos los bloques
del archivo sin encontrarlo.
 Procedimiento costoso, puede requerir mucho tiempo si el archivo es grande
 Mejor de los casos: el registro se encuentra en el primer bloque
 Peor caso: se examinan los b bloques del archivo
 Caso promedio: se examinan b/2 bloques
 Búsqueda Binaria: los valores de búsqueda se encuentran ordenados; el conjunto de valores se divide en 2 partes
y el valor central se compara con el valor del registro que se busca
 Constituye una mejora sobre la búsqueda lineal
 Mejor de los casos: el registro se encuentra en el primer bloque
 Peor caso: se examinan los  log2 (b)  bloques del archivo
 Caso promedio: se examinan  log2 (b)/2  bloques

2) Operaciones de ACTUALIZACIÓN DE DATOS


Modifican el archivo: inserción, modificación o eliminación de registros.
Operaciones con archivos
Organización de Archivo
 Organización de los datos dentro de un archivo:
 Registros (de longitud fija o variable)
 Bloques (organización no extendida o extendida)
 Colocación de los bloques en el medio de almacenamiento y su interconexión
 Asignación de bloques del archivo (contigua o enlazada)

Método de Acceso
 Conjunto de operaciones para recuperar y/o actualizar los registros del archivo
 Localización
 Inserción
 Modificación
 Eliminación

Se deberá elegir una organización que permita efectuar de manera eficiente las operaciones requeridas
sobre el archivo  Mejor combinación entre la organización del archivo y el método de acceso.
Métodos para organizar los registros de un archivo
 Según la forma de almacenamiento:
 Archivo de registros no ordenados
 Archivo de registros ordenados
 Archivo hash

 Utilizando estructuras de acceso auxiliares:


 Índices ordenados de un nivel
o Índice primario
o Índice secundario
o Índice de agrupamiento
o Índice secundario con indirección
 Índices multinivel
 Índices multinivel dinámicos
o Árbol B
o Árbol B+
Archivos de registros desordenados
r0
 Es la forma básica más simple. r1
b0
 Los nuevos registros se insertan en orden de llegada, al final del r2
r3
archivo.
r0
 Ingresar un nuevo registro es eficiente: se lee el último bloque del r1
b1
archivo en la memoria búfer, se agrega el registro y se vuelve a grabar el r2
r3
bloque en el dispositivo.
− La dirección de este último bloque se registra en la cabecera del r0
archivo. r1
b2
r2
 Eliminar un registro implica leer el bloque que tiene el registro en r3

memoria, eliminar (o marcar) el registro y regrabar el bloque en disco.


r0
− Esto deja un espacio desocupado en el bloque. r1
− El archivo puede requerir una reorganización periódica para r2 b3
recuperar espacio y que los bloques ocupen su máxima capacidad. r3

 Los registros que se empleen en estos archivos pueden ser de longitud r0


r1
fija o variable, con organización extendida o no. r2
b4

r3
Archivos de registros desordenados
r0
 La búsqueda de un registro dado implica una búsqueda lineal, r1
b0
leyendo bloque por bloque. En promedio se leen b/2 bloques. r2
r3
 Para leer los registros en orden según un campo se debe crear una r0
copia ordenada de estos registros. La ordenación de un archivo r1
b1
voluminoso es costosa. Se emplea una ordenación externa. r2
r3
 Para archivos con registros de longitud fija, bloques no extendidos
y almacenamiento contiguo, se puede acceder fácilmente a r0
r1
cualquier registro por su posición relativa en el archivo: r2
b2

− Bloque i-ésimo =  i/fbl  r3

− Registro i-ésimo dentro del bloque =  i mod fbl  r0


Ejemplo: encontrar el registro que se encuentra en la 10ma posición. r1
r2 b3
• Bloque =  10/4  = 2 r3
• Registro =  10 mod 4  = 2 (registro con valor 16 dentro del bloque b2)
r0
r1
b4
r2
r3
Archivos de registros ordenados
 Los registros se almacenan físicamente ordenados en el dispositivo de
acuerdo con un “campo” de ordenamiento.
− Si el campo de ordenamiento es un campo clave  clave de
ordenamiento.
Ventajas respecto a los archivos desordenados
 Leer los registros en orden, según los valores del campo de
ordenamiento, es eficiente ya que no se requiere ordenar el archivo.
 Leer el próximo registro en orden, según el campo de ordenamiento, no
suele requerir de accesos adicionales de bloques.
 Buscar un registro en un archivo ordenado, según su valor de campo de
ordenamiento, es más rápida ya que se puede emplear la búsqueda
binaria (realizando una búsqueda por bloques).
Si se quiere acceder a los registros basándose en los valores de otros
campos no ordenados del archivo  estas ventajas desaparecen.
 Las búsquedas que involucran criterios tales como <,≤, >, ≥ sobre el
campo de ordenamiento son eficientes porque todos los registros que
satisfacen la condición están contiguos en el archivo. Si por ejemplo el
criterio de búsqueda es: Nombre < 'G‘.
Archivos de registros ordenados
Las inserciones y eliminaciones de registros son operaciones costosas en archivos ordenados porque los
registros deben permanecer físicamente en orden.
 Insertar un nuevo registro significa:
− encontrar su posición correcta en el archivo, según su campo de ordenamiento
En general se deben regrabar en el
− abrirle espacio en el archivo desplazando los registros disco, en promedio, la mitad de los
− grabar el registro y grabar el bloque bloques del archivo
 Para hacer más eficiente la inserción:
− Mantener en cada bloque un espacio desocupado para nuevos registros. Sin embargo, una vez que se llena el
bloque … el problema original reaparecerá.
− Crear un archivo de desbordamiento, temporal, no ordenado, en el que se insertarán los nuevos registros.
Periódicamente, dicho archivo se ordena y se mezcla con el archivo actual o maestro, para generar un nuevo
maestro ordenado.
• Aumenta la complejidad de la búsqueda: será lineal en el archivo de desbordamiento y binaria en el maestro.
 Eliminar un registro
− Mismos problemas que la inserción, pues se debe mantener el orden en los registros.
− Menos grave si se utilizan marcadores de borrado y una reorganización periódica
 Modificar un registro:
− Si la condición de búsqueda involucra al campo clave de ordenamiento, se utiliza búsqueda binaria; en caso contrario, se
debe hacer una búsqueda lineal.
− Si el campo modificado es el de ordenación, el registro puede cambiar su posición en el fichero. Esto requiere la eliminación
del registro antiguo, seguida por la inserción del registro modificado.
Los archivos ordenados rara vez se emplean en aplicaciones de BD, a no ser que se les especifique un índice primario.
Archivo Hash (acceso directo)
 Utiliza un campo simple (K) del registro denominado campo hash. Si es clave se denomina clave
hash.
 Se aplica una función h (función hash) sobre el campo hash que da como resultado la dirección del
bloque en disco donde se va a almacenar el registro.
− El objetivo de dicha función es obtener una distribución uniforme de los registros dentro del espacio de
direcciones para:
• Minimizar el número de colisiones
• Maximizar el número de posiciones ocupadas
 La función que se emplea con mayor frecuencia es la
del resto de la división: h (K) = K mod M M = cantidad
- Los valores no numéricos de un campo hash se de cubetas

pueden transformar antes de aplicar la función hash.


- Hay funciones hash que aplican otras técnicas para
obtener el direccionamiento calculado.

 La búsqueda de un registro particular se lleva a cabo en un búfer de la memoria principal.


− En la mayoría de los registros, sólo se necesita acceder a un bloque para recuperarlo
 Este tipo de archivo ofrece el acceso más rápido posible para recuperar un registro dado, no así para el
acceso de registros en orden de acuerdo con la clave.
− Existen funciones hash que “preservan el orden” de las claves
Archivo Hash (acceso directo)
El espacio de direcciones de destino se compone de “buckets” (cubos o cubetas), cada uno de los cuales
constituye un bloque de disco o un grupo de bloques contiguos.
■ La función hash mapea una clave a una dirección absoluta (bloque) o relativa (número de bloque).
■ Cada cubeta puede almacenar 1 o más registros.

“Bucket” con un conjunto de registros: hace


un mejor manejo de las colisiones.

Desventaja del direccionamiento calculado  No garantiza que a valores distintos de K se obtengan diferentes
direcciones
Archivo Hash (acceso directo)
Colisión: ocurre cuando el valor de un registro con clave hash que se quiere insertar da una
dirección que ya contiene un registro y debe ser ubicado en alguna otra posición.
Hallar otro lugar para el nuevo registro cuando se produce una colisión se llama “resolución
de colisiones”:
 Direccionamiento abierto: A partir de la dirección que da la transformación de la clave hash, el
programa busca en las direcciones subsecuentes hasta que encuentra la primera posición vacía.
 Encadenamiento: En este caso se tienen varias direcciones (bloques) aparte donde se guardarán las
colisiones. En la primera posición vacía de los bloques se guarda la colisión, y se asigna un puntero
hacia esta posición en el bloque que debería haber ocupado. Se mantiene una lista vinculada de
colisiones.
 Hash múltiple: se aplica una segunda conversión clave-dirección. Si da una nueva colisión se aplica
una tercera ó alguno de los 2 métodos para colisiones descriptos anteriormente.
Archivo Hash (acceso directo)
■ Direccionamiento abierto: A partir de la dirección que da la transformación de la clave hash, el programa
busca en las direcciones subsecuentes hasta que encuentra la primera posición vacía.
Sea una tabla hash con 6 cubetas de 1 registro cada una. Cada registro tiene los siguientes campos: Nombre,
Descripción, Carrera. La función hash se llama “h”. Se desea almacenar los registros siguientes y en caso de
colisión tratar los desbordes con direccionamiento abierto (o derrame consecutivo):

Archivo hash
Nombre Dirección hash
0 Física
Paradigmas h=2
1 Química
Algoritmos y estr. de datos h=3
2 Paradigmas
Álgebra h=5
colisión
3 Algoritmos y estr. de datos
Base de datos h=3
4 Base de datos
Física h=0

colisión 5 Álgebra
Química h=3

1 bucket = 1 bloque  6 cubetas de 1 registro cada una


Archivo Hash (acceso directo)
 Encadenamiento: En este caso se tienen varias direcciones (bloques) aparte donde se guardarán las
colisiones. En la primera posición vacía de los bloques se guarda la colisión, y se asigna un puntero hacia
esta posición en el bloque que debería haber ocupado. Se mantiene una lista vinculada de colisiones.
Sea una tabla hash con 6 cubetas de 1 registro cada una. Cada registro tiene los siguientes campos: Nombre,
Descripción, Carrera. La función hash se llama “h”. Se desea almacenar los registros siguientes y en caso de
colisión tratar los desbordes con encadenamiento:

Archivo hash Cubetas de Desbordamiento


Nombre Dirección hash
0 Física 6 Base de datos null
7
Paradigmas h=2
1 7 Química null
Algoritmos y estr. de datos h=3
2 Paradigmas 8
Álgebra h=5
colisión
3 Algoritmos y estr. de datos 9
Base de datos h=3
4 10
Física h=0
colisión
5 Álgebra 11
Química h=3

1 bucket = 1 bloque  6 cubetas Los punteros de la lista enlazada


de 1 registro cada una son punteros a registros
Para profundizar en el tema:
• Archivo de teoría (Campus)

• Libro de Navathe y Elmasri:

- CAPÍTULO 13: Almacenamiento en disco,


estructuras básicas de ficheros y dispersión

You might also like