Módulo 01: Sistemas de almacenamiento

Objetivos del módulo

  • Conocer la jerarquía de memoria y las características de cada soporte de almacenamiento: registros, caché, RAM, SSD, HDD, cinta y discos ópticos
  • Manejar con soltura las unidades de medida de capacidad y de rendimiento (prefijos decimales y binarios, IOPS, latencia, ancho de banda)
  • Distinguir entre almacenamiento local (DAS), en red (NAS y SAN) y en la nube (de objetos, de bloques y de ficheros)
  • Comprender los niveles de RAID 0, 1, 5, 6 y 10, y calcular su capacidad útil y su tolerancia a fallos
  • Diseñar una política de copias de seguridad (completa, incremental y diferencial) y aplicar la regla 3-2-1
  • Dominar los conceptos de fichero, registro, campo y clave, y los tipos de ficheros según su uso
  • Conocer las organizaciones de ficheros (secuencial, secuencial indexada y directa con hashing) y sus métodos de acceso
  • Calcular el coste de una búsqueda en cada organización
  • Comparar los sistemas orientados al proceso con los orientados a los datos
  • Identificar los problemas de los sistemas de ficheros tradicionales y las ventajas del enfoque de bases de datos

1. ¿Por qué un curso de bases de datos empieza hablando de discos?

Una base de datos es, al final, un conjunto de ficheros guardados en un soporte físico. Todo lo que hace un SGBD (índices, cachés, registros de transacciones, copias de seguridad) existe para resolver un problema muy concreto: leer y escribir datos en disco es lento comparado con la velocidad a la que trabaja el procesador, y los discos se estropean.

📘 Concepto: El almacenamiento es la capacidad de un sistema informático de conservar datos para usarlos posteriormente. Se distingue entre:

  • Almacenamiento volátil: pierde su contenido al cortarse la alimentación (registros, caché, RAM).
  • Almacenamiento no volátil o persistente: conserva los datos sin alimentación (SSD, discos duros, cintas, discos ópticos).

Una base de datos, por definición, debe ser persistente (módulo 00). Pero, para ser rápida, también necesita aprovechar al máximo la memoria volátil. El equilibrio entre ambas es la clave del rendimiento de cualquier SGBD.


2. La jerarquía de memoria

2.1. El compromiso entre velocidad, capacidad y coste

No existe una memoria que sea a la vez muy rápida, muy grande, muy barata y persistente. Por eso los ordenadores combinan varios tipos de memoria organizados en una jerarquía: arriba, memorias pequeñas, rapidísimas y caras; abajo, memorias enormes, lentas y baratas.

flowchart TB
    R["Registros de la CPU<br/>bytes · menos de 1 ns"]
    C["Memoria caché L1 / L2 / L3<br/>KB a decenas de MB · 1 a 20 ns"]
    M["Memoria principal (RAM)<br/>GB a TB · unos 100 ns"]
    S["SSD (memoria flash)<br/>cientos de GB a decenas de TB · decenas de µs"]
    H["Disco duro (HDD)<br/>TB · varios ms"]
    T["Cinta magnética y discos ópticos<br/>TB a PB · segundos a minutos"]
    R --> C --> M --> S --> H --> T

A medida que bajas por la jerarquía:

  • Aumenta la capacidad.
  • Disminuye el coste por byte.
  • Aumenta el tiempo de acceso (latencia).
  • A partir de la RAM hacia abajo, la memoria pasa a ser persistente (salvo tecnologías especiales).

💡 Consejo: Una analogía útil: los registros son lo que tienes en la mano; la caché, tu mesa de trabajo; la RAM, la estantería de tu habitación; el SSD, el trastero de casa; el disco duro, un guardamuebles en las afueras; la cinta, el archivo histórico de otra ciudad. Cuanto más lejos está algo, más espacio hay, pero más tardas en ir a por ello.

2.2. Tabla comparativa

Las cifras siguientes son órdenes de magnitud orientativos; varían mucho entre fabricantes y generaciones.

Nivel Tecnología Capacidad típica Latencia típica ¿Volátil? Uso en un SGBD
Registros Biestables en la CPU Bytes Menos de 1 ns Sí Operaciones del procesador
Caché L1/L2/L3 SRAM en la CPU KB a decenas de MB 1 a 20 ns Sí Gestionada por el hardware
RAM DRAM GB a TB Unos 100 ns Sí Caché de bloques del SGBD (en Oracle, buffer cache dentro de la SGA)
SSD Memoria flash NAND Cientos de GB a decenas de TB 10 a 100 µs No Ficheros de datos, registros de transacciones
HDD Platos magnéticos Varios TB a decenas de TB 5 a 10 ms No Datos de gran volumen, copias de seguridad
Cinta Cinta magnética (LTO) Decenas de TB por cartucho Segundos a minutos No Copias de seguridad y archivo a largo plazo
Óptico CD, DVD, Blu-ray 0,7 a 100 GB por disco Del orden de 100 ms No Distribución, archivo de poco volumen

⚠️ Importante: Observa la diferencia entre la RAM (unos 100 nanosegundos) y un disco duro (unos 10 milisegundos): es un factor de 100.000. Si un acceso a RAM durase un segundo, un acceso a un disco duro duraría más de un día. Por eso los SGBD intentan por todos los medios mantener en memoria los bloques que más se usan y minimizar el número de accesos a disco.

2.3. Registros y memoria caché

Los registros son pequeñas celdas de memoria dentro del procesador donde se guardan los operandos de la instrucción que se está ejecutando. La memoria caché (niveles L1, L2 y L3) guarda copias de los datos de la RAM que el procesador usa con más frecuencia. Ni el programador ni el SGBD las controlan directamente: las gestiona el hardware.

El principio que hace funcionar las cachés es el principio de localidad:

  • Localidad temporal: si un dato se acaba de usar, es probable que se vuelva a usar pronto.
  • Localidad espacial: si se usa un dato, es probable que se usen pronto los que están a su lado.

📘 Concepto: Los SGBD aplican exactamente la misma idea a otra escala: mantienen en RAM una caché de bloques de disco (en Oracle, el database buffer cache). Cuando una consulta necesita una fila, el SGBD mira primero si el bloque que la contiene está en memoria (acierto, hit) y solo si no está lo lee del disco (fallo, miss). Lo verás en el módulo 03.

2.4. Memoria principal (RAM)

La RAM (Random Access Memory) es la memoria de trabajo del ordenador: en ella residen los programas en ejecución y los datos que manejan. Es de acceso aleatorio (se tarda lo mismo en leer cualquier posición) y volátil.

Un servidor de bases de datos moderno puede tener cientos de GB o incluso varios TB de RAM. Algunas bases de datos (las llamadas bases de datos en memoria, módulo 02) mantienen todos los datos en RAM y usan el disco solo para garantizar la persistencia.

2.5. Discos duros (HDD)

El disco duro (Hard Disk Drive, HDD) almacena la información magnéticamente sobre uno o varios platos que giran a velocidad constante. Unos cabezales montados en un brazo móvil leen y escriben sobre la superficie.

Estructura física:

Elemento Descripción
Plato Disco rígido recubierto de material magnético; puede tener dos caras útiles
Cabezal Lee y escribe; hay uno por cada cara
Pista Circunferencia concéntrica de la superficie de un plato
Sector Porción de una pista; unidad mínima de lectura/escritura del disco (tradicionalmente 512 bytes, hoy habitualmente 4096 bytes)
Cilindro Conjunto de pistas que están a la misma distancia del centro en todos los platos
Brazo actuador Mueve todos los cabezales a la vez hacia la pista deseada

El tiempo de acceso a un dato en un HDD se descompone en tres partes:

Tiempo de acceso = Tiempo de búsqueda + Latencia rotacional + Tiempo de transferencia
                   (mover el brazo)     (esperar al sector)    (leer los datos)
  • Tiempo de búsqueda (seek time): lo que tarda el brazo en llegar a la pista. Es el componente más lento (varios milisegundos de media).
  • Latencia rotacional: lo que tarda el sector en pasar bajo el cabezal. De media, media vuelta del plato.
  • Tiempo de transferencia: lo que se tarda en leer los datos una vez colocado el cabezal.

💻 Ejemplo: Un disco gira a 7200 rpm (revoluciones por minuto). ¿Cuál es su latencia rotacional media?

Una vuelta dura 60 s / 7200 = 0,00833 s = 8,33 ms. De media hay que esperar media vuelta: 4,17 ms. Si su tiempo medio de búsqueda es de 8 ms, el tiempo medio para llegar a un sector aleatorio ronda los 12 ms, sin contar la transferencia. Es decir, el disco puede hacer unos 80 accesos aleatorios por segundo (1000 ms / 12 ms ≈ 83).

⚠️ Importante: En un disco duro, leer datos contiguos es muchísimo más rápido que leer datos dispersos, porque solo se paga una vez el tiempo de búsqueda y la latencia. Esta es la razón por la que la organización física de los ficheros (apartado 8) es tan importante.

2.6. Unidades de estado sólido (SSD)

Un SSD (Solid State Drive) almacena los datos en chips de memoria flash NAND. No tiene partes móviles, por lo que:

  • No hay tiempo de búsqueda ni latencia rotacional: el acceso aleatorio es casi tan rápido como el secuencial.
  • Es más resistente a golpes, más silencioso y consume menos.
  • Ofrece miles o cientos de miles de operaciones por segundo (IOPS), frente a las decenas o pocos cientos de un HDD.

Pero tiene peculiaridades:

  • Desgaste: cada celda soporta un número limitado de ciclos de escritura. Los fabricantes indican la resistencia en TBW (terabytes written) o DWPD (drive writes per day). El controlador reparte las escrituras (wear leveling) para alargar su vida.
  • Escritura por bloques: la flash no se puede sobrescribir directamente; hay que borrar bloques completos, lo que el controlador gestiona internamente.

Según su interfaz, los SSD pueden ser SATA (la misma interfaz que los HDD, limitada a unos 600 MB/s) o NVMe (conectados por PCI Express, mucho más rápidos y con menor latencia).

2.7. Cinta magnética

La cinta magnética es el soporte más antiguo que sigue en uso profesional. El estándar actual es LTO (Linear Tape-Open); por ejemplo, un cartucho LTO-9 almacena 18 TB sin comprimir, y las generaciones posteriores siguen aumentando esa cifra.

  • Acceso secuencial: para leer un dato del final hay que bobinar toda la cinta. Tiempo de acceso de segundos a minutos.
  • Coste por TB muy bajo y larga duración (décadas en buenas condiciones).
  • Desconectable: una cinta guardada en un armario no puede ser cifrada por un ransomware. A esta separación física se le llama air gap.

Uso típico: copias de seguridad y archivo de datos que casi nunca se consultan, pero que hay que conservar (por ejemplo, por obligación legal).

2.8. Almacenamiento óptico

Los discos ópticos se leen y escriben con un láser.

Soporte Capacidad habitual Observaciones
CD 700 MB Prácticamente en desuso para datos
DVD 4,7 GB (una capa) / 8,5 GB (doble capa) Distribución de software y vídeo
Blu-ray 25 GB por capa (50 GB doble capa; formatos BDXL de 100 GB o más) Vídeo de alta definición, archivo

Hoy su papel en informática profesional es residual (algunos sistemas de archivo a largo plazo), pero siguen apareciendo en los temarios por su interés histórico y porque ilustran bien el concepto de soporte de solo lectura (ROM), de una escritura (R, WORM: write once, read many) y regrabable (RW).

2.9. Clasificación de los soportes según el tipo de acceso

Tipo de acceso Descripción Soportes
Secuencial Para llegar a un dato hay que pasar por todos los anteriores Cinta magnética
Directo (aleatorio) Se puede ir a cualquier posición sin recorrer las anteriores HDD, SSD, discos ópticos, RAM

📘 Concepto: No confundas el tipo de acceso del soporte con la organización del fichero (apartado 8). Un fichero secuencial puede estar en un disco duro (soporte de acceso directo), pero en una cinta solo puede haber ficheros secuenciales.


3. Unidades y medidas

3.1. Bit y byte

  • Bit (binary digit): unidad mínima de información; vale 0 o 1. Se abrevia b.
  • Byte: conjunto de 8 bits; permite representar 2⁸ = 256 valores distintos (por ejemplo, un carácter en codificación ASCII). Se abrevia B.

⚠️ Importante: No confundas b (bit) con B (byte). Una conexión de “100 Mb/s” (megabits por segundo) transfiere como máximo 100 / 8 = 12,5 MB/s (megabytes por segundo). Las velocidades de red se suelen expresar en bits y las capacidades de almacenamiento en bytes.

3.2. Prefijos decimales (SI) y binarios (IEC)

Durante décadas se usó “kilobyte” tanto para 1000 como para 1024 bytes, lo que creó confusión. La norma internacional distingue hoy dos series de prefijos:

Prefijo decimal (SI) Valor Prefijo binario (IEC) Valor Diferencia
kilobyte (kB) 10³ = 1000 B kibibyte (KiB) 2¹⁰ = 1024 B 2,4 %
megabyte (MB) 10⁶ B mebibyte (MiB) 2²⁰ = 1.048.576 B 4,9 %
gigabyte (GB) 10⁹ B gibibyte (GiB) 2³⁰ B 7,4 %
terabyte (TB) 10¹² B tebibyte (TiB) 2⁴⁰ B 10,0 %
petabyte (PB) 10¹⁵ B pebibyte (PiB) 2⁵⁰ B 12,6 %
exabyte (EB) 10¹⁸ B exbibyte (EiB) 2⁶⁰ B 15,3 %
zettabyte (ZB) 10²¹ B zebibyte (ZiB) 2⁷⁰ B 18,1 %

💻 Ejemplo: Compras un disco de 1 TB. El fabricante usa prefijos decimales: 1 TB = 10¹² bytes. Tu sistema operativo muestra la capacidad en unidades binarias (aunque a veces las rotule como “GB”): 10¹² / 2³⁰ ≈ 931 GiB. No te han engañado: es la misma cantidad expresada en otra unidad.

💡 Consejo: En la documentación de Oracle, los tamaños de memoria y de ficheros (2G, 512M) se interpretan en potencias de 2. Cuando calcules espacio para una base de datos, sé coherente y aclara siempre qué unidad usas.

3.3. Medidas de rendimiento

Medida Qué mide Unidad Importancia para una BD
Latencia Tiempo que tarda en completarse una operación individual ns, µs, ms Decisiva en consultas que leen pocas filas dispersas (OLTP)
IOPS Operaciones de entrada/salida por segundo operaciones/s Decisiva cuando hay muchos usuarios haciendo transacciones pequeñas
Ancho de banda (throughput) Cantidad de datos transferidos por unidad de tiempo MB/s, GB/s Decisivo en lecturas masivas (informes, copias de seguridad, cargas)
Capacidad Cantidad de datos que caben GB, TB Dimensionamiento del sistema
MTBF / AFR Tiempo medio entre fallos / tasa anual de fallos horas / % Fiabilidad, planificación de RAID y sustituciones

💻 Ejemplo: Hay que copiar una base de datos de 2 TB a una cinta que escribe a 300 MB/s. ¿Cuánto se tarda?

2 TB = 2.000.000 MB. Tiempo = 2.000.000 / 300 ≈ 6667 s ≈ 1 h 51 min. Si la ventana de copia nocturna es de una hora, esa copia completa no cabe: habrá que recurrir a copias incrementales (apartado 6) o a un soporte más rápido.


4. Almacenamiento local, en red y en la nube

4.1. Almacenamiento local (DAS)

El almacenamiento de conexión directa (Direct Attached Storage, DAS) está conectado físicamente a un único servidor: los discos internos o una cabina externa conectada por SAS o USB.

  • Ventajas: sencillo, barato, baja latencia.
  • Inconvenientes: no se comparte fácilmente entre servidores; si el servidor falla, sus discos quedan inaccesibles hasta repararlo.

4.2. Almacenamiento conectado a la red (NAS)

Un NAS (Network Attached Storage) es un equipo especializado que ofrece ficheros a través de la red local mediante protocolos de compartición de archivos como NFS (habitual en Linux/Unix) o SMB/CIFS (habitual en Windows).

  • Los clientes ven carpetas y ficheros compartidos, igual que una unidad de red.
  • Fácil de instalar y administrar.
  • Rendimiento limitado por la red y por el protocolo de ficheros.

4.3. Red de área de almacenamiento (SAN)

Una SAN (Storage Area Network) es una red dedicada de alta velocidad que conecta servidores con cabinas de discos. A diferencia del NAS, ofrece bloques (discos “en bruto”, llamados LUN): el servidor los ve como si fueran discos locales, los formatea y gestiona su propio sistema de ficheros.

  • Protocolos: Fibre Channel (red dedicada de fibra), iSCSI (SCSI sobre redes IP) o NVMe over Fabrics.
  • Alto rendimiento, baja latencia, alta disponibilidad.
  • Cara y compleja de administrar.
flowchart LR
    subgraph DAS_["DAS"]
        S1["Servidor"] --- D1[("Discos<br/>internos")]
    end
    subgraph NAS_["NAS"]
        C1["PC 1"] --- LAN(("Red local<br/>LAN"))
        C2["PC 2"] --- LAN
        S2["Servidor"] --- LAN
        LAN ---|"ficheros<br/>NFS / SMB"| N1[("NAS")]
    end
    subgraph SAN_["SAN"]
        S3["Servidor BD 1"] --- FC(("Red de<br/>almacenamiento"))
        S4["Servidor BD 2"] --- FC
        FC ---|"bloques<br/>FC / iSCSI"| CAB[("Cabina<br/>de discos")]
    end
Característica DAS NAS SAN
Qué ofrece Discos locales Ficheros Bloques (discos virtuales)
Conexión Directa (SATA, SAS, NVMe, USB) Red local (Ethernet) Red dedicada (Fibre Channel, iSCSI)
Protocolos — NFS, SMB/CIFS FC, iSCSI, NVMe-oF
Compartido entre servidores No Sí (a nivel de fichero) Sí (a nivel de bloque)
Rendimiento Alto Medio Muy alto
Coste y complejidad Bajos Medios Altos
Uso típico Servidor pequeño, puesto de trabajo Carpetas compartidas, copias de seguridad Bases de datos críticas, virtualización, clústeres

💡 Consejo: Las bases de datos de producción importantes suelen residir en almacenamiento de bloques (discos locales NVMe o SAN), porque el SGBD quiere controlar con precisión cómo se escriben sus bloques. Oracle, por ejemplo, ofrece ASM (Automatic Storage Management), un gestor de volúmenes y sistema de ficheros propio que trabaja directamente sobre discos de bloques.

4.4. Almacenamiento en la nube

Los proveedores de nube ofrecen almacenamiento como servicio, que se paga por uso. Hay tres modelos principales:

Modelo Qué es Cómo se accede Ejemplos Uso típico
De objetos Cada dato es un objeto (contenido + metadatos + identificador único) guardado en un “cubo” (bucket), sin jerarquía real de carpetas API HTTP (REST): PUT, GET, DELETE de objetos completos Amazon S3, Azure Blob Storage, Google Cloud Storage, OCI Object Storage Fotos, vídeos, copias de seguridad, data lakes, ficheros estáticos de webs
De bloques Discos virtuales que se conectan a una máquina virtual Como un disco local (el SO lo formatea) Amazon EBS, Azure Managed Disks, Google Persistent Disk, OCI Block Volume Sistemas operativos y bases de datos en máquinas virtuales
De ficheros Sistema de ficheros compartido gestionado (un NAS en la nube) NFS o SMB Amazon EFS, Azure Files, Google Filestore, OCI File Storage Carpetas compartidas entre varios servidores

Características del almacenamiento de objetos, el más característico de la nube:

  • Escalabilidad prácticamente ilimitada y alta durabilidad (los proveedores replican cada objeto en varios centros de datos).
  • No se modifica una parte de un objeto: se sustituye entero. Por eso no sirve para los ficheros de datos de un SGBD tradicional, que modifica bloques sueltos constantemente.
  • Ofrece clases de almacenamiento según la frecuencia de acceso: estándar (caliente), acceso poco frecuente (frío) y archivo (por ejemplo, Amazon S3 Glacier), con precios por GB cada vez más bajos y tiempos de recuperación cada vez más altos.

💻 Ejemplo: Una tienda online guarda en Oracle (sobre almacenamiento de bloques) los clientes, productos y pedidos; las fotos de los productos en un bucket de almacenamiento de objetos (la tabla PRODUCTOS solo guarda la URL de la foto); y las copias de seguridad de la base de datos en almacenamiento de objetos de clase archivo.


5. RAID: redundancia y rendimiento con varios discos

5.1. Concepto

📘 Concepto: RAID (Redundant Array of Independent Disks, originalmente of Inexpensive Disks) es una técnica que combina varios discos físicos en una única unidad lógica para mejorar el rendimiento, la tolerancia a fallos o ambas cosas. Se describió en un artículo de Patterson, Gibson y Katz (Universidad de California en Berkeley) publicado en 1988.

RAID se basa en tres técnicas:

Técnica En inglés Qué hace Aporta
Distribución en bandas Striping Reparte los datos en trozos (bandas) entre varios discos Rendimiento (se lee y escribe en paralelo)
Espejo Mirroring Escribe los mismos datos en dos o más discos Tolerancia a fallos (copia exacta)
Paridad Parity Calcula información redundante (normalmente con XOR) que permite reconstruir un disco perdido Tolerancia a fallos con menos espacio desperdiciado que el espejo

5.2. Niveles de RAID

RAID 0: distribución sin redundancia

Los datos se reparten en bandas entre todos los discos. No hay redundancia.

   Disco 1    Disco 2    Disco 3
  +--------+ +--------+ +--------+
  |   A1   | |   A2   | |   A3   |
  |   A4   | |   A5   | |   A6   |
  |   A7   | |   A8   | |   A9   |
  +--------+ +--------+ +--------+
  • Capacidad útil: la suma de todos los discos (N × C).
  • Rendimiento: excelente en lectura y escritura.
  • Tolerancia a fallos: ninguna. Si falla un disco, se pierde todo el volumen. De hecho, con más discos la probabilidad de perderlo todo aumenta.

RAID 1: espejo

Cada dato se escribe idéntico en dos (o más) discos.

   Disco 1    Disco 2
  +--------+ +--------+
  |   A1   | |   A1   |
  |   A2   | |   A2   |
  |   A3   | |   A3   |
  +--------+ +--------+
  • Capacidad útil: la de un solo disco (50 % con dos discos).
  • Rendimiento: buena lectura (se puede leer de cualquiera de los dos); escritura como un disco.
  • Tolerancia a fallos: soporta el fallo de un disco (de todos menos uno si hay más de dos en espejo).

RAID 5: distribución con paridad distribuida

Los datos se reparten en bandas y, en cada fila, uno de los discos guarda la paridad de los demás. La paridad va rotando entre los discos.

   Disco 1    Disco 2    Disco 3    Disco 4
  +--------+ +--------+ +--------+ +--------+
  |   A1   | |   A2   | |   A3   | |   Ap   |
  |   B1   | |   B2   | |   Bp   | |   B3   |
  |   C1   | |   Cp   | |   C2   | |   C3   |
  |   Dp   | |   D1   | |   D2   | |   D3   |
  +--------+ +--------+ +--------+ +--------+
  • Capacidad útil: (N − 1) × C. Se “pierde” el equivalente a un disco.
  • Rendimiento: buena lectura; la escritura es más lenta porque hay que recalcular y escribir la paridad (penalización de escritura).
  • Tolerancia a fallos: soporta el fallo de un disco. Durante la reconstrucción (que en discos grandes puede durar muchas horas), un segundo fallo provoca la pérdida total.
  • Mínimo: 3 discos.

RAID 6: doble paridad

Como RAID 5, pero con dos bloques de paridad independientes por fila.

  • Capacidad útil: (N − 2) × C.
  • Rendimiento: buena lectura; escritura más penalizada que RAID 5.
  • Tolerancia a fallos: soporta el fallo de dos discos cualesquiera.
  • Mínimo: 4 discos.

RAID 10 (1+0): espejos distribuidos

Se crean parejas de discos en espejo (RAID 1) y sobre esas parejas se distribuyen los datos en bandas (RAID 0).

flowchart TB
    R0["RAID 0<br/>(bandas)"] --> M1["RAID 1<br/>espejo A"]
    R0 --> M2["RAID 1<br/>espejo B"]
    M1 --> D1[("Disco 1<br/>A1 A3 A5")]
    M1 --> D2[("Disco 2<br/>A1 A3 A5")]
    M2 --> D3[("Disco 3<br/>A2 A4 A6")]
    M2 --> D4[("Disco 4<br/>A2 A4 A6")]
  • Capacidad útil: 50 % (N × C / 2).
  • Rendimiento: excelente en lectura y escritura (sin cálculo de paridad).
  • Tolerancia a fallos: soporta al menos un fallo, y hasta un fallo por cada pareja de espejo (pero no los dos discos de la misma pareja).
  • Mínimo: 4 discos.

5.3. Tabla comparativa

Nivel Técnica Discos mín. Capacidad útil Fallos tolerados Lectura Escritura Uso típico
RAID 0 Bandas 2 N × C (100 %) 0 Excelente Excelente Datos temporales, edición de vídeo; nunca datos críticos
RAID 1 Espejo 2 C (50 % con 2 discos) 1 (N − 1) Muy buena Normal Disco del sistema operativo, servidores pequeños
RAID 5 Bandas + paridad 3 (N − 1) × C 1 Muy buena Regular (penalización) Servidores de ficheros, datos de lectura mayoritaria
RAID 6 Bandas + doble paridad 4 (N − 2) × C 2 Muy buena Mala (doble penalización) Grandes volúmenes con discos de mucha capacidad, archivo
RAID 10 Espejo + bandas 4 N × C / 2 (50 %) 1 garantizado (hasta N/2) Excelente Muy buena Bases de datos con mucha escritura (OLTP), registros de transacciones

(N = número de discos; C = capacidad de cada disco, suponiendo que todos son iguales).

💻 Ejemplo: Tienes 6 discos de 4 TB. Capacidad útil según el nivel:

  • RAID 0: 6 × 4 = 24 TB (sin protección).
  • RAID 5: (6 − 1) × 4 = 20 TB (soporta 1 fallo).
  • RAID 6: (6 − 2) × 4 = 16 TB (soporta 2 fallos).
  • RAID 10: 6 × 4 / 2 = 12 TB (soporta 1 fallo seguro, hasta 3 si caen en parejas distintas).

5.4. Cómo funciona la paridad

La paridad se calcula con la operación XOR (o exclusivo, ⊕), que tiene una propiedad mágica: si A ⊕ B ⊕ C = P, entonces cualquiera de los cuatro valores se puede recalcular a partir de los otros tres.

Disco 1 (A1): 1 0 1 1 0 0 1 0
Disco 2 (A2): 0 1 1 0 1 0 0 1
Disco 3 (A3): 1 1 0 0 1 1 1 0
              ---------------  XOR bit a bit
Paridad (Ap): 0 0 0 1 0 1 0 1

Falla el disco 2. Se reconstruye A2 = A1 ⊕ A3 ⊕ Ap:
A1:           1 0 1 1 0 0 1 0
A3:           1 1 0 0 1 1 1 0
Ap:           0 0 0 1 0 1 0 1
              ---------------
A2 recuperado:0 1 1 0 1 0 0 1   ✔ coincide con el original

5.5. Otros aspectos de RAID

  • RAID por hardware: una controladora dedicada (a menudo con caché protegida por batería) gestiona el RAID; el sistema operativo ve un único disco.
  • RAID por software: lo gestiona el sistema operativo (por ejemplo, mdadm en Linux, Espacios de almacenamiento en Windows) o el propio SGBD (Oracle ASM ofrece redundancia en espejo).
  • Disco de reserva (hot spare): disco instalado y sin usar que el sistema incorpora automáticamente cuando falla otro, para empezar la reconstrucción sin esperar a que llegue un técnico.

⚠️ Importante: RAID NO es una copia de seguridad. RAID protege frente al fallo físico de un disco, pero si alguien borra una tabla por error, un virus cifra los ficheros o se incendia el servidor, RAID replica el desastre en todos los discos al instante. Necesitas, además, copias de seguridad.


6. Copias de seguridad

6.1. Conceptos básicos

📘 Concepto: Una copia de seguridad (backup) es una copia de los datos guardada en un lugar distinto del original, que permite restaurarlos si se pierden o se corrompen.

Dos indicadores guían cualquier política de copias:

Indicador Significado Pregunta que responde
RPO (Recovery Point Objective) Cantidad máxima de datos que se puede perder, medida en tiempo “Si hay un desastre, ¿cuántas horas de trabajo podemos perder?”
RTO (Recovery Time Objective) Tiempo máximo que puede tardar la recuperación “¿Cuánto tiempo podemos estar sin sistema?”

💻 Ejemplo: Si un banco hace una copia cada noche a las 2:00 y el servidor falla a las 18:00, se perderían 16 horas de operaciones: un RPO inaceptable. Por eso los SGBD guardan, además de las copias, un registro de transacciones (en Oracle, los redo logs y sus copias archivadas) que permite “rehacer” todas las operaciones desde la última copia hasta el momento del fallo.

6.2. Tipos de copia

Tipo Qué copia Ventajas Inconvenientes
Completa (full) Todos los datos Restauración sencilla: basta una copia Lenta y ocupa mucho espacio
Incremental Solo lo que ha cambiado desde la última copia de cualquier tipo Muy rápida y pequeña Para restaurar se necesita la última completa y todas las incrementales posteriores, en orden
Diferencial Lo que ha cambiado desde la última copia completa Restauración con solo dos copias: la completa y la última diferencial Cada día ocupa más que el anterior (hasta la siguiente completa)

6.3. Ejemplo comparativo de una semana

Supón una base de datos de 500 GB en la que cada día cambian unos 20 GB distintos. Se hace una copia completa el domingo.

Día Estrategia incremental Tamaño Estrategia diferencial Tamaño
Domingo Completa 500 GB Completa 500 GB
Lunes Incremental (cambios del lunes) 20 GB Diferencial (cambios desde el domingo) 20 GB
Martes Incremental (cambios del martes) 20 GB Diferencial (lunes + martes) 40 GB
Miércoles Incremental 20 GB Diferencial 60 GB
Jueves Incremental 20 GB Diferencial 80 GB
Viernes Incremental 20 GB Diferencial 100 GB
Sábado Incremental 20 GB Diferencial 120 GB
Total semanal   620 GB   920 GB

Si el disco falla el jueves por la tarde (después de la copia del jueves):

  • Con incrementales, hay que restaurar: completa del domingo + incremental del lunes + martes + miércoles + jueves (5 copias, en orden). Si cualquiera está dañada, no se puede llegar al jueves.
  • Con diferenciales, hay que restaurar: completa del domingo + diferencial del jueves (2 copias).
flowchart LR
    subgraph INC["Restauración con incrementales"]
        F1["Completa<br/>domingo"] --> I1["Inc.<br/>lunes"] --> I2["Inc.<br/>martes"] --> I3["Inc.<br/>miércoles"] --> I4["Inc.<br/>jueves"]
    end
    subgraph DIF["Restauración con diferenciales"]
        F2["Completa<br/>domingo"] --> D4["Dif.<br/>jueves"]
    end

6.4. La regla 3-2-1

📘 Concepto: La regla 3-2-1 es la recomendación básica para no perder datos:

  • 3 copias de los datos (el original y dos copias).
  • En 2 soportes o tipos de almacenamiento distintos (por ejemplo, disco y cinta, o disco local y nube).
  • 1 copia fuera de las instalaciones (off-site), para sobrevivir a un incendio, inundación o robo.

Ante la amenaza del ransomware, se habla también de la regla 3-2-1-1-0: además de lo anterior, 1 copia inmutable o desconectada (air gap), y 0 errores en las pruebas de restauración.

6.5. Otras clasificaciones de las copias

Criterio Tipos Descripción
Estado de la BD En frío / en caliente En frío, la base de datos está parada (copia consistente pero sin servicio); en caliente, sigue funcionando mientras se copia
Nivel Física / lógica La física copia los ficheros o bloques (en Oracle, con RMAN); la lógica exporta objetos y filas a un fichero (en Oracle, con Data Pump: expdp / impdp)
Destino Local / remota / nube Dónde se guarda la copia
Automatización Manual / programada Las copias deben estar programadas y supervisadas, nunca depender de que alguien se acuerde

⚠️ Importante: Una copia de seguridad que nunca se ha restaurado es solo una esperanza. Programa pruebas periódicas de restauración en un entorno separado y documenta el procedimiento: el día del desastre no es el momento de aprender cómo se restaura.


7. Ficheros: conceptos básicos

Antes de que existieran los SGBD, los datos de las organizaciones se guardaban en ficheros gestionados directamente por los programas. Hoy los SGBD siguen guardando sus datos en ficheros, aunque los gestionan ellos y no los programas de aplicación. Los conceptos de este apartado son la base de la organización física de cualquier base de datos.

7.1. Fichero, registro, campo

📘 Concepto:

  • Un campo (field) es la unidad mínima de información con significado propio: un nombre, un DNI, un precio. Tiene un nombre, un tipo y una longitud.
  • Un registro (record) es un conjunto de campos relacionados que describen un elemento (un alumno, un producto, un movimiento bancario).
  • Un fichero o archivo (file) es un conjunto de registros del mismo tipo almacenados en un soporte de forma persistente.
FICHERO ALUMNOS.DAT
                  campo        campo                        campo        campo
                  NIA          NOMBRE                       FECHA_NAC    CICLO
               +----------+------------------------------+------------+------+
registro 1 --> | 10234567 | Lucía Romero Serrano         | 2007-03-12 | DAW  |
registro 2 --> | 10234568 | Hugo Rubio Marín             | 2006-11-02 | ASIR |
registro 3 --> | 10234569 | Sara Ortiz Delgado           | 2007-07-25 | DAM  |
               +----------+------------------------------+------------+------+
                 8 bytes     30 bytes                       10 bytes     4 bytes
                 longitud del registro = 52 bytes

Las bases de datos relacionales heredan estos conceptos con otros nombres: el fichero se convierte en tabla, el registro en fila y el campo en columna.

Sistema de ficheros Modelo relacional (teoría) SQL (práctica)
Fichero Relación Tabla
Registro Tupla Fila
Campo Atributo Columna
Tipo del campo Dominio Tipo de dato

7.2. Registro lógico y registro físico

  • Registro lógico: el registro tal como lo ve el programa (un alumno).
  • Registro físico o bloque: la cantidad de datos que se transfiere en una sola operación de lectura o escritura entre el soporte y la memoria.

📘 Concepto: El factor de bloqueo es el número de registros lógicos que caben en un bloque físico.

Factor de bloqueo = ⌊ tamaño del bloque / tamaño del registro ⌋

💻 Ejemplo: Con bloques de 8192 bytes (8 KB, el tamaño de bloque más habitual en Oracle) y registros de 52 bytes, el factor de bloqueo es ⌊8192 / 52⌋ = 157 registros por bloque. Un fichero de 100.000 alumnos ocupa ⌈100.000 / 157⌉ = 637 bloques. Leer el fichero completo requiere 637 operaciones de lectura, no 100.000.

7.3. Registros de longitud fija y variable

Tipo Descripción Ventajas Inconvenientes
Longitud fija Todos los registros ocupan lo mismo; cada campo tiene un tamaño fijo Se calcula fácilmente la posición del registro n: (n − 1) × longitud Desperdicia espacio (un nombre corto ocupa los mismos 30 bytes que uno largo)
Longitud variable Cada registro ocupa lo que necesita; se usan separadores o indicadores de longitud Aprovecha el espacio No se puede calcular la posición directamente; las modificaciones que alargan un registro son problemáticas

Los ficheros de texto con separadores, como CSV, son ficheros de registros de longitud variable:

nia;nombre;fecha_nac;ciclo
10234567;Lucía Romero Serrano;2007-03-12;DAW
10234568;Hugo Rubio Marín;2006-11-02;ASIR

💡 Consejo: En Oracle, el tipo CHAR(n) es de longitud fija (rellena con espacios) y VARCHAR2(n) de longitud variable. Por eso, salvo para códigos de longitud realmente fija (como el campo descatalogado CHAR(1) del esquema EMPRESA), se usa casi siempre VARCHAR2. Lo verás en el módulo 23.

7.4. Claves

📘 Concepto: Una clave es un campo (o conjunto de campos) que se usa para identificar o localizar registros.

  • Clave primaria (o principal): identifica de forma única cada registro; no puede repetirse (el NIA de un alumno).
  • Clave secundaria (o alternativa de búsqueda): permite localizar registros, pero puede repetirse (el ciclo: hay muchos alumnos de DAW).
  • Clave de ordenación: el campo por el que está ordenado el fichero.

En el modelo relacional estos conceptos se formalizan y amplían (superclave, clave candidata, clave primaria, clave alternativa, clave ajena): lo verás en el módulo 16.

7.5. Operaciones sobre ficheros

Operación Descripción
Creación Se define y se reserva el fichero
Apertura / cierre Se prepara para su uso y se libera al terminar
Consulta (lectura) Se recupera uno o varios registros
Alta (inserción) Se añade un registro nuevo
Baja (borrado) Se elimina un registro. Puede ser lógica (se marca como borrado) o física (se elimina realmente)
Modificación Se cambia el valor de uno o varios campos de un registro
Reorganización Se reescribe el fichero eliminando las bajas lógicas y reordenando
Fusión (merge) Se combinan dos ficheros ordenados en uno
Clasificación (sort) Se ordena el fichero según una clave

7.6. Tipos de ficheros según su uso

Tipo Contenido Permanencia Ejemplo
Maestro (permanente) Datos fundamentales y estables de la organización, en su estado actual Larga; se actualiza periódicamente Clientes, productos, cuentas bancarias con su saldo actual
De movimientos (transacciones) Operaciones ocurridas en un periodo, que se usarán para actualizar el maestro Temporal; se procesa y luego se archiva Ventas del día, ingresos y reintegros de la jornada
Histórico Datos que ya no son actuales, pero se conservan por razones legales, estadísticas o de auditoría Muy larga; rara vez se consulta Pedidos de hace diez años, movimientos de ejercicios cerrados
De trabajo (de maniobra, temporal) Resultados intermedios de un proceso Solo mientras dura el proceso Fichero ordenado temporalmente para un listado
De constantes (tablas) Datos que casi nunca cambian y se usan como referencia Larga Provincias, tipos de IVA, códigos postales
De informe (de salida) Resultados preparados para imprimir o enviar Temporal Listado de nóminas en formato de impresión
De copia de seguridad Duplicado de otros ficheros para recuperación Según la política de copias Copia del maestro de clientes del domingo
De registro (log) Anotaciones cronológicas de lo que ocurre en el sistema Variable Registro de accesos, registro de errores

💻 Ejemplo: El proceso clásico de actualización de un banco en los años 70: durante el día se graba un fichero de movimientos con los ingresos y reintegros. Por la noche, un programa lee a la vez el maestro de cuentas (ordenado por número de cuenta) y el fichero de movimientos (ordenado igual), aplica los movimientos a cada cuenta y genera un nuevo maestro con los saldos actualizados. El maestro anterior y los movimientos pasan a ser ficheros históricos (y sirven de copia de seguridad: es el esquema de copias “abuelo-padre-hijo”).

flowchart LR
    MV["Movimientos<br/>del día<br/>(ordenados)"] --> P["Programa de<br/>actualización<br/>nocturna"]
    MA["Maestro de<br/>cuentas<br/>(día N)"] --> P
    P --> MN["Nuevo maestro<br/>(día N+1)"]
    P --> INF["Listado de<br/>incidencias"]
    MA -.-> H["Histórico /<br/>copia"]
    MV -.-> H

📘 Concepto: En las bases de datos relacionales estos papeles siguen existiendo, aunque como tablas: en el esquema EMPRESA, CLIENTES y PRODUCTOS hacen el papel de tablas maestras, y PEDIDOS y LINEAS_PEDIDO, de tablas de movimientos.


8. Organización de ficheros

📘 Concepto: La organización de un fichero es la forma en que los registros se disponen físicamente en el soporte. Determina qué operaciones serán rápidas y cuáles lentas, y se decide al crear el fichero.

Las tres organizaciones clásicas son: secuencial, secuencial indexada y directa (o aleatoria).

8.1. Organización secuencial

Los registros se graban uno detrás de otro, en el orden en que se dan de alta o según una clave de ordenación.

+--------+--------+--------+--------+--------+--------+-----
| Reg. 1 | Reg. 2 | Reg. 3 | Reg. 4 | Reg. 5 | Reg. 6 | EOF
+--------+--------+--------+--------+--------+--------+-----
  inicio                                                 fin de fichero

Características:

  • Es la única organización posible en soportes secuenciales (cinta).
  • Las altas se añaden al final (si el fichero no está ordenado) o requieren reescribir el fichero (si está ordenado).
  • Las bajas suelen ser lógicas (marca de borrado) y se eliminan físicamente al reorganizar.
  • Las modificaciones que no cambian la longitud se pueden hacer en el mismo sitio (en soportes de acceso directo).
  • Búsqueda de un registro: hay que leer desde el principio hasta encontrarlo.
    • Si el fichero tiene n registros, la búsqueda de un registro que existe lee de media n/2 registros; si no existe y el fichero no está ordenado, n.
    • Si está ordenado por la clave de búsqueda, se puede parar en cuanto se supera el valor buscado (media n/2 incluso si no existe). Y si además está en un soporte de acceso directo con registros de longitud fija, se puede aplicar búsqueda binaria (dicotómica): log₂ n accesos como máximo.
Ventajas Inconvenientes
Sencilla y sin desperdicio de espacio Búsqueda de un registro concreto muy lenta
Ideal para procesar todos los registros (nóminas, facturación mensual) Altas en orden e eliminaciones costosas
Funciona en cualquier soporte Para tener varios órdenes hay que mantener varias copias

8.2. Búsqueda binaria

💻 Ejemplo: Buscar el NIA 10234590 en un fichero ordenado de 16 registros (posiciones 1 a 16).

  1. Se lee el registro central (posición 8): NIA 10234575. Es menor que el buscado → se descarta la primera mitad (1-8).
  2. Se lee el central de 9-16 (posición 12): 10234595. Es mayor → se descarta 12-16.
  3. Central de 9-11 (posición 10): 10234588. Es menor → queda 11.
  4. Posición 11: 10234590. ¡Encontrado! 4 accesos = log₂ 16.

Con búsqueda secuencial se habrían necesitado 11 accesos.

8.3. Organización secuencial indexada

Es una organización mixta: los registros están ordenados por la clave (como en la secuencial) y, además, existe un índice que permite saltar directamente a la zona donde está el registro buscado.

📘 Concepto: Un índice es una estructura auxiliar formada por pares (valor de la clave, dirección) ordenados por la clave, que permite localizar rápidamente un registro sin recorrer todo el fichero. Funciona igual que el índice de un libro: buscas el tema, miras la página y vas directamente a ella.

Un fichero secuencial indexado tiene tres zonas:

Zona Contenido
Área primaria (de datos) Los registros, ordenados por la clave, agrupados en bloques
Área de índices Para cada bloque del área primaria, la clave más alta (o más baja) que contiene y la dirección del bloque
Área de desbordamiento (overflow) Registros dados de alta después de crear el fichero que no caben en su bloque; se enlazan desde el bloque correspondiente
   ÁREA DE ÍNDICE                    ÁREA PRIMARIA (bloques de 3 registros)
  +-------------+---------+        +----------------------------------+
  | Clave máx.  | Bloque  |        | B1: 1003  1007  1012             |
  +-------------+---------+        | B2: 1015  1020  1028             |
  |    1012     |   B1    |  --->  | B3: 1031  1040  1044 --> desbord.|
  |    1028     |   B2    |        | B4: 1050  1061  1070             |
  |    1044     |   B3    |        +----------------------------------+
  |    1070     |   B4    |        ÁREA DE DESBORDAMIENTO
  +-------------+---------+        | 1042 (alta posterior)            |
                                   +----------------------------------+

Para buscar la clave 1020: se consulta el índice (1020 ≤ 1028 → bloque B2), se lee el bloque B2 y se localiza el registro. 2 accesos.

Tipos de índice:

Tipo Descripción
Denso Tiene una entrada por cada registro del fichero
Disperso (no denso) Tiene una entrada por cada bloque; solo es posible si el fichero está ordenado por la clave del índice
Primario Índice sobre la clave de ordenación del fichero
Secundario Índice sobre otro campo; el fichero no está ordenado por él, así que debe ser denso
Multinivel Si el índice es muy grande, se crea un índice del índice, y así sucesivamente, formando un árbol

💡 Consejo: Los índices multinivel evolucionaron hacia los árboles B y B+ (B-trees), estructuras que se mantienen equilibradas automáticamente al insertar y borrar. Son el tipo de índice por defecto en Oracle y en casi todos los SGBD relacionales. Los crearás con CREATE INDEX en el módulo 26.

Ventajas Inconvenientes
Permite acceso directo (por el índice) y secuencial (en orden) Ocupa espacio adicional para el índice
Búsquedas muy rápidas Las altas llenan el área de desbordamiento y degradan el rendimiento
Muy versátil Requiere reorganizaciones periódicas

8.4. Organización directa (aleatoria)

En la organización directa, la posición física de cada registro se calcula a partir del valor de su clave. No hace falta recorrer el fichero ni consultar un índice: se va directamente a la dirección calculada.

Direccionamiento directo

Si la clave es un número entero pequeño y sin huecos, la clave puede ser directamente la dirección (número de registro relativo). Por ejemplo, las 52 provincias españolas con su código del 1 al 52: el registro de la provincia 46 (Valencia) está en la posición 46.

Rara vez es posible: las claves reales (DNI, NIF, códigos de producto) tienen muchos dígitos y grandes huecos. Reservar una posición por cada DNI posible (cien millones) para guardar 3000 alumnos sería absurdo.

Direccionamiento calculado: hashing

📘 Concepto: Una función de dispersión o función hash h(clave) transforma el valor de la clave en una dirección dentro de un rango limitado de posiciones (llamadas cubos o buckets). La técnica más sencilla es el método del resto de la división:

dirección = clave MOD N

donde N es el número de posiciones disponibles, preferiblemente un número primo para repartir mejor las claves.

Colisiones

Como hay muchas más claves posibles que posiciones, inevitablemente dos claves distintas pueden dar la misma dirección. A esto se le llama colisión, y a las claves que colisionan, sinónimos.

Técnicas para resolverlas:

Técnica Descripción
Direccionamiento abierto con sondeo lineal Si la posición está ocupada, se prueba la siguiente (y así sucesivamente, de forma circular)
Sondeo cuadrático o doble hashing Se prueban posiciones a distancias crecientes o calculadas con una segunda función, para evitar que los sinónimos se agrupen
Encadenamiento Cada posición guarda una lista enlazada con todos los registros que caen en ella
Área de desbordamiento Los sinónimos se guardan en una zona aparte, enlazados desde su posición original
Cubos con varias celdas Cada dirección es un bloque con espacio para varios registros; solo hay desbordamiento cuando el cubo se llena

💻 Ejemplo: Un fichero con 7 posiciones (0 a 6) usa h(clave) = clave MOD 7 con sondeo lineal. Se insertan, en este orden, las claves 15, 22, 8, 31, 42 y 29.

Clave clave MOD 7 ¿Libre? Posición final Intentos
15 1 Sí 1 1
22 1 No (15) → prueba 2 2 2
8 1 No → 2 no → 3 3 3
31 3 No (8) → prueba 4 4 2
42 0 Sí 0 1
29 1 No → 2, 3, 4 no → 5 5 5

Estado final del fichero:

Posición 0 1 2 3 4 5 6
Clave 42 15 22 8 31 29 (libre)

Buscar la clave 29 requiere 5 accesos (posiciones 1, 2, 3, 4 y 5). Las claves 15, 22, 8 y 29 son sinónimos (todas dan 1). Este ejemplo muestra el problema del agrupamiento: los sinónimos ocupan posiciones que “pertenecen” a otras claves (como le pasó a 31) y se forman racimos que alargan las búsquedas.

Con encadenamiento, el mismo conjunto quedaría así:

Posición 0: 42
Posición 1: 15 -> 22 -> 8 -> 29
Posición 2: (vacía)
Posición 3: 31
Posición 4: (vacía)
Posición 5: (vacía)
Posición 6: (vacía)

Buscar 29 requiere ir a la posición 1 y recorrer su lista (4 elementos), pero la clave 31 ya no “invade” la posición de otra.

📘 Concepto: El factor de carga es la proporción de posiciones ocupadas: α = número de registros / número de posiciones. Con un factor de carga bajo (por ejemplo, 0,7 o menos) las colisiones son pocas y las búsquedas cuestan cerca de 1 acceso; cuando el fichero se acerca al 100 %, las colisiones se disparan. Por eso los ficheros directos se dimensionan con holgura.

Ventajas Inconvenientes
Acceso por clave rapidísimo (idealmente 1 acceso) No permite recorrer en orden de clave (los registros están dispersos)
Altas, bajas y modificaciones rápidas Hay que reservar espacio de antemano; desperdicia posiciones
  Las colisiones degradan el rendimiento si el fichero se llena
  No sirve para búsquedas por rangos (“claves entre 1000 y 2000”)

💡 Consejo: Oracle utiliza hashing en varias estructuras internas y ofrece, por ejemplo, particionamiento por hash y clústeres hash de tablas. La idea es exactamente la misma que acabas de ver.

8.5. Tabla comparativa de organizaciones

Característica Secuencial Secuencial indexada Directa (hashing)
Soporte necesario Cualquiera (incluida cinta) Acceso directo Acceso directo
Acceso a un registro por clave Lento (n/2 de media; log₂ n con búsqueda binaria) Rápido (pocos accesos) Muy rápido (≈ 1 acceso)
Procesamiento de todos los registros en orden Excelente Bueno Malo (requiere ordenar antes)
Búsquedas por rango Aceptable si está ordenado Buena No es posible directamente
Altas Al final o reescritura Área de desbordamiento Rápidas (salvo colisiones)
Aprovechamiento del espacio Máximo Bueno (índice + desbordamiento) Bajo (hay que dejar huecos)
Uso típico Nóminas, facturación por lotes, copias, logs Ficheros con consultas y listados Consultas puntuales por clave muy frecuentes

9. Métodos de acceso

📘 Concepto: El método de acceso es la forma en que un programa localiza y lee los registros de un fichero. Depende de la organización del fichero: una organización puede admitir uno o varios métodos.

Método de acceso Descripción Organizaciones que lo admiten
Secuencial Se leen los registros uno tras otro, en el orden físico o en el de la clave Secuencial, secuencial indexada (en orden de clave), directa (en orden físico, sin sentido lógico)
Directo por posición Se accede al registro que ocupa la posición n Ficheros de registros de longitud fija en soporte de acceso directo
Directo por clave Se accede al registro con un valor de clave concreto Directa (calculando la dirección), secuencial indexada (a través del índice)
Dinámico (mixto) Se combinan ambos: se accede directamente a un registro y desde él se continúa secuencialmente Secuencial indexada

💻 Ejemplo: En un fichero secuencial indexado de pedidos, para obtener “los pedidos del 5010 al 5020” se usa el acceso dinámico: se localiza el 5010 a través del índice (acceso directo) y luego se leen los siguientes en orden (acceso secuencial) hasta superar el 5020. Es exactamente lo que hace Oracle con un índice B-tree al resolver WHERE pedido_id BETWEEN 5010 AND 5020 (un index range scan).


10. Ejemplos numéricos de búsqueda

Comparemos el coste de buscar un registro en un fichero grande con las distintas organizaciones.

Datos del problema:

  • Fichero de 1.000.000 de clientes, registros de longitud fija de 80 bytes.
  • Bloques de 8192 bytes (8 KB).
  • Cada acceso a un bloque en un HDD cuesta 10 ms; en un SSD, 0,1 ms.

Paso 1: tamaño del fichero en bloques.

Factor de bloqueo = ⌊8192 / 80⌋ = 102 registros por bloque
Número de bloques = ⌈1.000.000 / 102⌉ = 9804 bloques

Paso 2: coste de cada organización (buscar un cliente por su código).

Organización Cálculo Accesos a bloque Tiempo en HDD Tiempo en SSD
Secuencial no ordenado (media, si existe) 9804 / 2 4902 49 s 0,49 s
Secuencial no ordenado (si no existe) 9804 9804 98 s 0,98 s
Secuencial ordenado con búsqueda binaria ⌈log₂ 9804⌉ 14 0,14 s 1,4 ms
Secuencial indexado (índice de 2 niveles + bloque de datos) 2 + 1 3 30 ms 0,3 ms
Directo con hashing (sin colisiones) 1 1 10 ms 0,1 ms

Paso 3: cálculo del índice. Un índice disperso tiene una entrada por bloque de datos: 9804 entradas. Si cada entrada (clave de 8 bytes + dirección de 8 bytes) ocupa 16 bytes, caben ⌊8192 / 16⌋ = 512 entradas por bloque de índice:

Nivel 1 del índice: ⌈9804 / 512⌉ = 20 bloques
Nivel 2 del índice: ⌈20 / 512⌉  = 1 bloque (la raíz)
Búsqueda: 1 (raíz) + 1 (nivel 1) + 1 (bloque de datos) = 3 accesos

⚠️ Importante: La diferencia entre la peor y la mejor organización es de casi 10.000 veces. En la práctica, además, la raíz y el primer nivel del índice estarían casi siempre en la caché de memoria del SGBD, así que la búsqueda indexada costaría un solo acceso a disco. Por eso los índices son la herramienta de optimización más importante de una base de datos.


11. Sistemas orientados al proceso y sistemas orientados a los datos

11.1. Sistemas orientados al proceso

Hasta los años setenta, las aplicaciones informáticas se desarrollaban departamento a departamento, a medida que surgían las necesidades. Cada aplicación tenía sus propios ficheros, diseñados para su proceso concreto. A este enfoque se le llama orientado al proceso (o a la aplicación).

flowchart TB
    subgraph SEC["Secretaría"]
        PA["Programa de<br/>matrícula"] --> FA[("ALUMNOS.DAT<br/>nia, nombre, dirección,<br/>teléfono, ciclo")]
    end
    subgraph BIB["Biblioteca"]
        PB["Programa de<br/>préstamos"] --> FB[("SOCIOS.DAT<br/>nia, nombre, dirección,<br/>libros prestados")]
    end
    subgraph COM["Comedor"]
        PC["Programa de<br/>comedor"] --> FC[("COMENSALES.CSV<br/>nombre, teléfono,<br/>alergias, cuota")]
    end

11.2. Sistemas orientados a los datos

En el enfoque orientado a los datos (el enfoque de bases de datos), los datos de toda la organización se diseñan una sola vez, de forma integrada, y se guardan en una base de datos común gestionada por un SGBD. Las aplicaciones no acceden directamente a los ficheros, sino que piden los datos al SGBD.

flowchart TB
    PA["Programa de<br/>matrícula"] --> SGBD
    PB["Programa de<br/>préstamos"] --> SGBD
    PC["Programa de<br/>comedor"] --> SGBD
    SGBD["SGBD"] --> BD[("Base de datos del centro<br/>ALUMNOS, PRESTAMOS,<br/>COMENSALES, ...")]
    SGBD --> DIC[("Diccionario<br/>de datos")]
Aspecto Orientado al proceso (ficheros) Orientado a los datos (BD)
Diseño Cada aplicación diseña sus ficheros Diseño global e integrado de los datos
Propiedad de los datos Cada departamento tiene “sus” datos Los datos son de la organización
Descripción de los datos Dentro del código de cada programa En el esquema, almacenado en el diccionario
Acceso Cada programa lee y escribe los ficheros directamente A través del SGBD
Redundancia Alta y descontrolada Mínima y controlada
Nuevas consultas Requieren programar Se resuelven con un lenguaje de consulta (SQL)

12. Problemas de los sistemas de ficheros tradicionales

12.1. Ejemplo detallado: el instituto de los tres ficheros

Volvamos al instituto del diagrama anterior. Secretaría, biblioteca y comedor tienen cada uno su programa y su fichero. Veamos lo que ocurre a lo largo de un curso.

Situación inicial. Lucía Romero (NIA 10234567) aparece en los tres ficheros:

ALUMNOS.DAT (Secretaría), registros de longitud fija:
10234567Lucía Romero Serrano          C/ Mayor 12, Valencia          600111222DAW

SOCIOS.DAT (Biblioteca):
10234567LUCIA ROMERO SERRANO          C/ Mayor 12, Valencia          3

COMENSALES.CSV (Comedor):
Romero Serrano, Lucía;600111222;gluten;45,00

Ya se aprecian varios problemas: el nombre se escribe de tres formas distintas, el comedor ni siquiera guarda el NIA y cada fichero tiene un formato diferente.

Problema 1: redundancia. El nombre, la dirección y el teléfono de Lucía están repetidos en tres sitios. Con 1200 alumnos, son miles de datos duplicados que ocupan espacio y, sobre todo, que hay que mantener tres veces.

Problema 2: inconsistencia. En enero, Lucía se muda a la C/ Colón 5. Lo comunica en Secretaría, que actualiza ALUMNOS.DAT. Pero nadie avisa a la biblioteca. En marzo, la biblioteca envía una carta de reclamación de un libro a la dirección antigua. Ahora el sistema tiene dos direcciones distintas para la misma persona: ¿cuál es la buena? La información ha perdido su consistencia y su exactitud.

Problema 3: dificultad de acceso a los datos. La dirección pregunta: “¿Cuántos alumnos de DAW con alergia al gluten tienen libros prestados?”. Los datos existen, pero repartidos en tres ficheros con formatos distintos y sin una clave común (el comedor no guarda el NIA). No hay ningún programa que responda a esa pregunta: hay que encargar uno nuevo, cruzar los ficheros a mano por el nombre (escrito de formas distintas) y esperar días. Con una base de datos, sería una consulta SQL de cinco líneas.

Problema 4: aislamiento de los datos. Los datos están dispersos en ficheros con formatos incompatibles (longitud fija, CSV, mayúsculas sin tildes…), escritos con lenguajes distintos. Integrarlos es costoso y propenso a errores.

Problema 5: dependencia física (de los programas respecto a los datos). Secretaría decide ampliar el campo del teléfono de 9 a 15 caracteres para admitir prefijos internacionales. Como el formato del registro está descrito dentro del código de cada programa (posición 69 a 77: teléfono), hay que modificar, recompilar y probar todos los programas que leen ALUMNOS.DAT, aunque no usen el teléfono, porque todos los campos que van detrás se han desplazado. Un cambio trivial en los datos obliga a cambiar el software.

Antes:  nia(8) nombre(30) direccion(30) telefono(9)  ciclo(4)   → ciclo en posición 78
Después: nia(8) nombre(30) direccion(30) telefono(15) ciclo(4)  → ciclo en posición 84
         ¡Todos los programas que leían el ciclo en la posición 78 dejan de funcionar!

Problema 6: problemas de integridad. Las reglas del negocio (“la cuota del comedor no puede ser negativa”, “un alumno no puede tener más de 3 libros prestados”, “el ciclo debe ser DAM, DAW o ASIR”) están programadas en cada aplicación, o no lo están. Si alguien edita COMENSALES.CSV con un editor de texto, puede escribir una cuota de −45 o un ciclo “DAX” sin que nada lo impida. Y si se añade una regla nueva, hay que programarla en todos los programas.

Problema 7: problemas de atomicidad. El programa de matrícula da de baja a un alumno: borra su registro de ALUMNOS.DAT y, a continuación, debería anular su cuota del comedor. Justo entre las dos operaciones se va la luz. Resultado: el alumno ya no existe en Secretaría, pero el comedor le sigue cobrando. No hay forma sencilla de garantizar que o se hacen las dos operaciones o ninguna.

Problema 8: anomalías por acceso concurrente. Quedan 2 plazas en el comedor (guardadas en un fichero PLAZAS.DAT). Dos administrativos dan de alta a dos alumnos a la vez desde dos ordenadores:

Instante Administrativo A Administrativo B Valor en PLAZAS.DAT
t1 Lee plazas libres: 2   2
t2   Lee plazas libres: 2 2
t3 Calcula 2 − 1 = 1 y lo graba   1
t4   Calcula 2 − 1 = 1 y lo graba 1

Se han dado de alta dos alumnos, pero el fichero dice que queda una plaza libre: se ha perdido una actualización (lost update). Si el proceso se repite, el comedor acabará con más alumnos que sillas. Los sistemas de ficheros no ofrecen mecanismos de control de concurrencia adecuados para este tipo de situaciones.

Problema 9: problemas de seguridad. El fichero COMENSALES.CSV contiene datos de salud (alergias), que el RGPD considera especialmente protegidos. Pero está en una carpeta compartida del servidor y cualquiera que tenga acceso a la carpeta puede leerlo entero, copiarlo en una memoria USB o modificarlo. No se puede dar permiso para ver el nombre pero no la alergia, ni registrar quién ha consultado qué.

12.2. Resumen de los problemas

Problema Descripción Consecuencia
Redundancia Los mismos datos se repiten en varios ficheros Desperdicio de espacio y de trabajo de mantenimiento
Inconsistencia Las copias redundantes dejan de coincidir Información contradictoria y poco fiable
Dificultad de acceso Cada consulta no prevista requiere un programa nuevo Lentitud y coste para obtener información
Aislamiento Datos dispersos en formatos incompatibles Integración costosa
Dependencia física La estructura de los datos está en el código de los programas Cualquier cambio en los datos obliga a cambiar los programas
Integridad Las reglas de validez están dispersas en los programas o no existen Datos incorrectos
Atomicidad No se garantiza que un grupo de operaciones se haga entero o no se haga Datos a medio actualizar tras un fallo
Concurrencia No se controla el acceso simultáneo de varios usuarios Actualizaciones perdidas, lecturas incoherentes
Seguridad Control de acceso pobre (todo o nada a nivel de fichero) Accesos no autorizados, incumplimiento legal

13. Ventajas del enfoque de bases de datos

13.1. Cómo resuelve una BD cada problema

Problema de los ficheros Solución en el enfoque de BD Dónde lo estudiarás
Redundancia Diseño integrado y normalizado: cada dato se guarda una vez Módulos 04-21 (especialmente 16)
Inconsistencia Al no haber copias, no hay contradicciones; restricciones de integridad Módulos 16, 24
Dificultad de acceso Lenguaje de consulta declarativo (SQL) para cualquier consulta, prevista o no Módulos 27-33
Aislamiento Un único modelo de datos y un único SGBD Módulo 03
Dependencia física Independencia de datos gracias a la arquitectura de tres niveles Módulo 03
Integridad Restricciones declaradas en el esquema (PRIMARY KEY, FOREIGN KEY, CHECK…), comprobadas siempre por el SGBD Módulo 24
Atomicidad Transacciones: COMMIT y ROLLBACK Módulos 03, 35
Concurrencia Control de concurrencia con bloqueos y versiones Módulo 35
Seguridad Usuarios, privilegios por objeto y columna, roles, vistas, auditoría Módulos 26, 37

💻 Ejemplo: Con una base de datos, el problema de las plazas del comedor se resuelve dejando que el SGBD haga la actualización en una sola operación atómica y controlada:

-- Ejemplo ilustrativo: el SGBD bloquea la fila mientras la modifica,
-- así que dos usuarios simultáneos no pueden perder una actualización
UPDATE plazas_comedor
SET    plazas_libres = plazas_libres - 1
WHERE  plazas_libres > 0;

Y la pregunta de la dirección (“alumnos de DAW con alergia al gluten que tienen libros prestados”) se respondería así, sin programar nada nuevo:

-- Ejemplo ilustrativo
SELECT COUNT(DISTINCT a.nia)
FROM   alumnos a
       JOIN comensales c ON c.nia = a.nia
       JOIN prestamos  p ON p.nia = a.nia
WHERE  a.ciclo = 'DAW'
AND    c.alergia = 'gluten';

13.2. Otras ventajas

  • Datos compartidos: varias aplicaciones y usuarios trabajan sobre los mismos datos a la vez.
  • Normalización de criterios: el DBA puede imponer estándares de nombres, formatos y documentación.
  • Mejor productividad: los programadores no tienen que escribir el código de acceso a ficheros; se centran en la lógica de la aplicación.
  • Mantenimiento más sencillo: gracias a la independencia de datos.
  • Copias y recuperación centralizadas: el SGBD ofrece herramientas de copia y recuperación ante fallos.
  • Más información con los mismos datos: al estar integrados, se pueden cruzar datos de distintas áreas.

13.3. Inconvenientes del enfoque de bases de datos

Ningún enfoque es perfecto. Una base de datos también tiene costes:

Inconveniente Descripción
Coste Licencias (en SGBD comerciales), hardware más potente, formación
Complejidad Un SGBD es un software complejo que requiere personal especializado (DBA)
Tiempo de implantación El diseño integrado exige un análisis previo cuidadoso
Vulnerabilidad centralizada Si la base de datos falla, se paran todas las aplicaciones (por eso se invierte en alta disponibilidad y copias)
Sobrecarga Para un problema muy sencillo y de un solo usuario, un fichero puede ser más rápido y suficiente

💡 Consejo: La decisión no es “ficheros o bases de datos” en abstracto. Un fichero de configuración, un log o una exportación CSV para enviar a un cliente son perfectamente válidos como ficheros. Pero en cuanto los datos sean compartidos, importantes y duraderos, la respuesta es una base de datos.


14. Ejercicios

Ejercicios resueltos

Ejercicio 1: Unidades de medida

a) Un fabricante vende un SSD de 2 TB. ¿Cuántos GiB mostrará el sistema operativo? b) Una línea de fibra de 600 Mb/s, ¿cuánto tarda como mínimo en descargar un fichero de 3 GB? c) ¿Cuántos bytes exactos son 4 KiB? ¿Y 4 kB?

Ver solución

a) 2 TB = 2 × 10¹² bytes. En GiB: 2 × 10¹² / 2³⁰ = 2 × 10¹² / 1.073.741.824 ≈ 1862,6 GiB (≈ 1,82 TiB).

b) 600 Mb/s = 600 / 8 = 75 MB/s. 3 GB = 3000 MB. Tiempo = 3000 / 75 = 40 segundos (en condiciones ideales; en la práctica, algo más por la sobrecarga de los protocolos).

c) 4 KiB = 4 × 1024 = 4096 bytes. 4 kB = 4 × 1000 = 4000 bytes.

Ejercicio 2: Tiempo de acceso a un disco duro

Un disco duro gira a 5400 rpm, tiene un tiempo medio de búsqueda de 12 ms y transfiere a 150 MB/s. Calcula el tiempo medio para leer un bloque de 8 KB situado en una posición aleatoria. ¿Cuántas lecturas aleatorias de bloque puede hacer por segundo?

Ver solución
Una vuelta:            60 s / 5400 = 11,11 ms
Latencia rotacional:   11,11 / 2   =  5,56 ms
Tiempo de búsqueda:                  12,00 ms
Transferencia de 8 KB: 8 KB / 150 MB/s = 0,008 MB / 150 MB/s ≈ 0,05 ms
------------------------------------------------
Tiempo medio de acceso ≈ 17,6 ms
Lecturas aleatorias por segundo ≈ 1000 / 17,6 ≈ 57

Observa que la transferencia es despreciable frente a la búsqueda y la latencia: en un HDD, lo que cuesta es llegar al dato, no leerlo. Un SSD, sin partes móviles, haría miles de lecturas aleatorias por segundo.

Ejercicio 3: Elección de RAID

Una empresa dispone de 8 discos de 6 TB y debe elegir configuración para tres usos. Para cada uno, propón un nivel de RAID, calcula la capacidad útil y justifica la elección:

a) Ficheros de datos y registros de transacciones de la base de datos de pedidos (muchas escrituras pequeñas, máxima disponibilidad). b) Archivo de documentos escaneados (se escribe una vez y se lee de vez en cuando; se quiere máxima capacidad con protección ante dos fallos). c) Área temporal para renderizar vídeo (los datos se pueden regenerar; se quiere velocidad máxima).

Ver solución

a) RAID 10: capacidad 8 × 6 / 2 = 24 TB. Ofrece el mejor rendimiento de escritura entre los niveles con redundancia (no hay cálculo de paridad) y reconstrucciones rápidas (basta copiar el espejo). Es la opción habitual para bases de datos OLTP.

b) RAID 6: capacidad (8 − 2) × 6 = 36 TB. Tolera dos fallos simultáneos, importante con discos grandes cuya reconstrucción tarda muchas horas. La penalización de escritura no importa porque se escribe poco.

c) RAID 0: capacidad 8 × 6 = 48 TB. Máximo rendimiento y capacidad; la falta de redundancia es aceptable porque los datos se pueden regenerar. Nunca debe usarse para datos que no se puedan reconstruir.

Ejercicio 4: Restauración de copias

Una empresa hace una copia completa los domingos a las 23:00 y copias diferenciales de lunes a sábado a las 23:00. El viernes a las 10:00 se avería el servidor.

a) ¿Qué copias hay que restaurar y en qué orden? b) ¿Qué datos se pierden si solo se usan las copias? c) ¿Qué cambiaría si las copias de lunes a sábado fueran incrementales? d) ¿Cómo podría reducirse la pérdida de datos?

Ver solución

a) La completa del domingo y, después, la diferencial del jueves (la última antes del fallo). Solo dos copias.

b) Se pierde todo lo hecho desde el jueves a las 23:00 hasta el viernes a las 10:00: 11 horas de trabajo.

c) Habría que restaurar la completa del domingo y las incrementales del lunes, martes, miércoles y jueves, en ese orden (cinco copias). La pérdida de datos sería la misma (11 horas), pero la restauración sería más larga y más frágil (si falla una incremental intermedia, no se puede llegar al jueves).

d) Haciendo copias más frecuentes y, sobre todo, conservando los registros de transacciones del SGBD (en Oracle, redo logs archivados) en un lugar seguro: permiten rehacer las operaciones hasta justo antes del fallo, reduciendo el RPO a minutos o segundos.

Ejercicio 5: Hashing con colisiones

Un fichero directo tiene 11 posiciones (0 a 10) y usa h(clave) = clave MOD 11 con sondeo lineal. Inserta, en este orden, las claves: 27, 18, 29, 28, 39, 13, 16, 38. Indica la posición final de cada clave y cuántos accesos hacen falta para encontrar la clave 38.

Ver solución
Clave clave MOD 11 Posiciones probadas Posición final
27 5 5 5
18 7 7 7
29 7 7 (ocupada), 8 8
28 6 6 6
39 6 6, 7, 8 (ocupadas), 9 9
13 2 2 2
16 5 5, 6, 7, 8, 9 (ocupadas), 10 10
38 5 5, 6, 7, 8, 9, 10 (ocupadas), 0 0

Estado final:

Posición 0 1 2 3 4 5 6 7 8 9 10
Clave 38   13     27 28 18 29 39 16

Encontrar la clave 38 requiere 7 accesos (posiciones 5, 6, 7, 8, 9, 10 y 0): el sondeo lineal es circular, y al llegar al final vuelve a la posición 0. Con un factor de carga de 8/11 ≈ 0,73 ya se forma un racimo enorme (posiciones 5 a 10). Una función de dispersión mejor, un fichero más grande o el encadenamiento reducirían el problema.

Ejercicio 6: Coste de búsqueda

Un fichero de 500.000 productos tiene registros de 200 bytes y bloques de 4096 bytes. Cada acceso a disco cuesta 8 ms. Calcula el número de accesos y el tiempo para buscar un producto por su código si el fichero:

a) Es secuencial no ordenado (caso medio, el producto existe). b) Es secuencial ordenado y se aplica búsqueda binaria sobre los bloques. c) Tiene un índice disperso multinivel con entradas de 16 bytes.

Ver solución
Factor de bloqueo = ⌊4096 / 200⌋ = 20 registros/bloque
Bloques de datos  = ⌈500.000 / 20⌉ = 25.000 bloques

a) Media: 25.000 / 2 = 12.500 accesos × 8 ms = 100 segundos.

b) ⌈log₂ 25.000⌉ = 15 accesos (2¹⁴ = 16.384 < 25.000 ≤ 32.768 = 2¹⁵) × 8 ms = 120 ms.

c) Entradas por bloque de índice = ⌊4096 / 16⌋ = 256.

Nivel 1: ⌈25.000 / 256⌉ = 98 bloques de índice
Nivel 2: ⌈98 / 256⌉     = 1 bloque (raíz)
Accesos = 1 (raíz) + 1 (nivel 1) + 1 (datos) = 3 accesos × 8 ms = 24 ms

El índice es unas 4000 veces más rápido que la búsqueda secuencial.

Ejercicio 7: Elección de organización

Indica qué organización de fichero (secuencial, secuencial indexada o directa) elegirías en cada caso y por qué:

a) El fichero de movimientos diarios de un banco, que se procesa entero cada noche. b) Un fichero de abonados de una compañía telefónica en el que, durante las llamadas al servicio de atención, se busca constantemente un abonado por su número de teléfono, y nunca se hacen listados ordenados. c) Un fichero de productos que se consulta por código y del que cada semana se imprime un listado ordenado por código. d) Las copias de seguridad en cinta.

Ver solución

a) Secuencial: se procesan todos los registros en orden; no se necesitan accesos individuales.

b) Directa (hashing sobre el número de teléfono): el acceso por clave es lo único que importa y debe ser lo más rápido posible; no se necesita orden.

c) Secuencial indexada: combina el acceso rápido por código (a través del índice) con la posibilidad de recorrer el fichero en orden para el listado.

d) Secuencial: es la única posible en cinta, y para una copia de seguridad se lee y escribe todo de principio a fin.

Ejercicio 8: Problemas de un sistema de ficheros

Una pequeña clínica dental guarda en una hoja de cálculo los pacientes (nombre, teléfono, dirección, alergias) y en otra las citas (fecha, hora, nombre del paciente, teléfono, tratamiento). Las dos recepcionistas abren las hojas desde una carpeta compartida. Identifica al menos cinco problemas de los estudiados y pon un ejemplo concreto de cada uno en esta clínica.

Ver solución
Problema Ejemplo en la clínica
Redundancia El nombre y el teléfono del paciente se repiten en cada una de sus citas
Inconsistencia Un paciente cambia de teléfono, se actualiza en la hoja de pacientes, pero las citas futuras siguen con el antiguo y el recordatorio no le llega
Integridad Se puede dar una cita a un paciente que no existe en la hoja de pacientes (escrito con otro nombre), o con una fecha imposible (31/02)
Concurrencia Las dos recepcionistas abren la hoja de citas a la vez y dan la misma hora del mismo dentista a dos pacientes; al guardar, una sobrescribe los cambios de la otra
Seguridad Las alergias son datos de salud; cualquiera con acceso a la carpeta compartida puede leer o copiar toda la hoja
Dificultad de acceso “¿Qué pacientes alérgicos a la penicilina tienen cita esta semana?” obliga a cruzar las dos hojas a mano por el nombre
Atomicidad Al anular una cita y crear otra, si el programa se cierra a mitad, puede quedar la cita anulada sin la nueva

Ejercicios propuestos

Ejercicio 9: Política de copias

Diseña la política de copias de seguridad de un instituto con una base de datos de gestión académica de 80 GB que cambia unos 2 GB al día, solo en horario lectivo. Indica tipo y frecuencia de las copias, soportes, ubicación, cumplimiento de la regla 3-2-1, periodo de conservación y cómo se probarán las restauraciones. Calcula el espacio necesario para un mes.

Ejercicio 10: Almacenamiento para una empresa

Una empresa de comercio electrónico necesita almacenar: su base de datos de pedidos (OLTP, 2 TB), 15 millones de fotos de producto, las carpetas compartidas de los empleados y las copias de seguridad de los últimos 7 años. Propón para cada necesidad un tipo de almacenamiento (DAS, NAS, SAN, objetos, bloques, ficheros en la nube, cinta) y un nivel de RAID cuando proceda. Justifica cada decisión.

Ejercicio 11: Índice secuencial indexado

Un fichero secuencial indexado tiene bloques de datos de 4 registros y contiene las claves: 3, 8, 12, 15, 21, 24, 30, 33, 37, 41, 45, 50. Dibuja el área primaria y el índice disperso (clave máxima de cada bloque). Después, indica cómo quedaría tras dar de alta las claves 14 y 35, usando un área de desbordamiento.

Ejercicio 12: Del fichero a la base de datos

Retoma el instituto de los tres ficheros del apartado 12.1. Propón qué tablas tendría una base de datos que integrase la información de Secretaría, Biblioteca y Comedor, qué columnas tendría cada una y cómo se relacionarían, de forma que cada dato se guarde una sola vez. (No hace falta usar ninguna notación formal: la aprenderás en el bloque 2).


Resumen

Concepto Idea clave
Jerarquía de memoria Registros → caché → RAM → SSD → HDD → cinta/óptico: más capacidad y menos coste hacia abajo, pero más latencia
Volátil / persistente La RAM pierde los datos sin alimentación; SSD, HDD y cinta los conservan
Tiempo de acceso HDD Búsqueda + latencia rotacional (media vuelta) + transferencia
Prefijos Decimales (kB, MB, GB = potencias de 10) frente a binarios (KiB, MiB, GiB = potencias de 2)
Rendimiento Latencia, IOPS y ancho de banda
DAS / NAS / SAN Disco local / ficheros por red (NFS, SMB) / bloques por red dedicada (FC, iSCSI)
Nube Objetos (S3 y similares), bloques (discos virtuales), ficheros (NFS/SMB gestionado)
RAID 0, 1, 5, 6, 10 Bandas; espejo; paridad (1 fallo); doble paridad (2 fallos); espejo + bandas (ideal para BD)
RAID no es copia Protege de fallos de disco, no de borrados, virus o desastres
Copias Completa, incremental (desde la última copia), diferencial (desde la última completa)
Regla 3-2-1 3 copias, 2 soportes, 1 fuera de las instalaciones
RPO / RTO Datos que se pueden perder / tiempo máximo de recuperación
Fichero, registro, campo Tabla, fila, columna en el modelo relacional
Factor de bloqueo Registros por bloque = ⌊tamaño bloque / tamaño registro⌋
Tipos de ficheros Maestro, movimientos, histórico, trabajo, constantes, informe, copia, log
Secuencial Registros uno tras otro; búsqueda n/2 o log₂ n si está ordenado
Secuencial indexada Área primaria + índice + desbordamiento; acceso directo y secuencial
Directa (hashing) Dirección = h(clave); ≈ 1 acceso; colisiones (sinónimos); sin orden
Métodos de acceso Secuencial, directo (posición o clave), dinámico
Orientado al proceso / a los datos Ficheros por aplicación / base de datos integrada gestionada por un SGBD
Problemas de los ficheros Redundancia, inconsistencia, dificultad de acceso, aislamiento, dependencia física, integridad, atomicidad, concurrencia, seguridad