📝 BASES-DE-DATOS
← Volver

Tema 10. Bases de datos no relacionales y especiales

Índice

  1. Limitaciones del modelo relacional y origen de NoSQL
  2. Teorema CAP y BASE vs ACID
  3. Clasificación de bases de datos NoSQL
  4. Bases de datos clave-valor
  5. Bases de datos documentales
  6. Bases de datos columnares (Wide Column)
  7. Bases de datos orientadas a grafos
  8. Otras tipologías especiales
  9. Data Warehouse y sistemas OLAP
  10. MDX: consultas a cubos OLAP
  11. Minería de datos y Big Data
  12. Comparativa general y elección de modelo
  13. Resumen esquemático y preguntas tipo test

1. Limitaciones del modelo relacional y origen de NoSQL

1.1 El modelo relacional y sus limitaciones

El modelo relacional, propuesto por Edgar F. Codd en 1970, ha sido el paradigma dominante en la gestión de datos durante décadas. Se basa en tablas con filas y columnas, relaciones mediante claves ajenas y el lenguaje SQL para consultas.

Sin embargo, a partir de los años 2000, con la explosión de Internet y las aplicaciones web a gran escala, surgieron necesidades que el modelo relacional no podía satisfacer eficientemente:

Limitación Descripción
Escalabilidad horizontal Las BBDD relacionales escalan mejor verticalmente (más potencia en un solo servidor) que horizontalmente (añadir más servidores). La distribución de datos relacionales entre nodos es compleja
Esquema rígido El esquema debe definirse antes de almacenar datos. Cambios estructurales son costosos (migraciones)
Datos no estructurados Las tablas no son el formato natural para datos como documentos JSON, grafos sociales, series temporales o datos geoespaciales
Rendimiento en escritura masiva Las garantías ACID y los bloqueos impactan el rendimiento en escrituras intensivas a gran escala
Volumen extremo Gestionar petabytes en sistemas relacionales tradicionales presenta problemas de rendimiento y coste

1.2 El movimiento NoSQL

El término NoSQL (Not Only SQL) fue popularizado en 2009, aunque los sistemas que describe existían desde antes. No significa "sin SQL", sino que engloba sistemas que no siguen el modelo relacional estricto.

Principales impulsores del desarrollo NoSQL:

1.3 Características generales de los sistemas NoSQL


2. Teorema CAP y BASE vs ACID

2.1 Propiedades ACID (bases de datos relacionales)

Las transacciones en bases de datos relacionales cumplen las propiedades ACID:

Propiedad Descripción
A — Atomicidad Una transacción se ejecuta completa o no se ejecuta. No hay estados intermedios visibles
C — Consistencia Una transacción lleva la base de datos de un estado válido a otro estado válido, respetando todas las restricciones de integridad
I — Aislamiento Las transacciones concurrentes se ejecutan como si fueran secuenciales. Una transacción no ve los efectos intermedios de otra
D — Durabilidad Los cambios confirmados (commit) persisten aunque el sistema falle

2.2 Teorema CAP (Brewer, 2000)

El teorema CAP, enunciado por Eric Brewer en 2000 y demostrado formalmente por Gilbert y Lynch en 2002, establece que un sistema distribuido solo puede garantizar dos de las tres propiedades siguientes de forma simultánea:

Propiedad Descripción
C — Consistencia (Consistency) Todos los nodos ven los mismos datos al mismo tiempo. Tras una escritura, cualquier lectura devuelve el valor más reciente
A — Disponibilidad (Availability) El sistema siempre responde a las peticiones (puede no ser el dato más reciente)
P — Tolerancia a particiones (Partition Tolerance) El sistema sigue funcionando aunque haya una partición de red (fallo en la comunicación entre nodos)
         Consistencia (C)
              /\
             /  \
            /    \
           /  CA  \
          /        \
         /----+-----\
        /  CP | AP   \
       /      |       \
      +--------+--------+
  Disponibilidad (A)   Tolerancia a
                       particiones (P)

Clasificación de sistemas según CAP:

Tipo Propiedades Ejemplos
CA Consistencia + Disponibilidad Sistemas relacionales tradicionales (MySQL, PostgreSQL en nodo único), pero en la práctica no son distribuidos
CP Consistencia + Tolerancia a particiones MongoDB (en ciertos modos), HBase, Zookeeper, Redis (con ciertas configuraciones)
AP Disponibilidad + Tolerancia a particiones Cassandra, CouchDB, DynamoDB, Riak

Nota: En la práctica, todo sistema distribuido debe tolerar particiones (P), por lo que la decisión real es entre CP (prioriza consistencia) y AP (prioriza disponibilidad).

2.3 Consistencia eventual

Muchos sistemas NoSQL ofrecen consistencia eventual (eventual consistency): el sistema garantiza que, si no se realizan nuevas escrituras, eventualmente todos los nodos convergerán al mismo valor. No garantiza cuándo ocurrirá esta convergencia.

2.4 Propiedades BASE (alternativa a ACID en NoSQL)

Frente a ACID, los sistemas NoSQL suelen seguir el modelo BASE:

Propiedad Descripción
BA — Básicamente disponible (Basically Available) El sistema garantiza disponibilidad, aunque algunas peticiones puedan fallar o devolver datos desactualizados
S — Estado blando (Soft state) El estado del sistema puede cambiar con el tiempo, incluso sin nuevas entradas (por la propagación de la consistencia eventual)
E — Consistencia eventual (Eventually consistent) El sistema convergerá a un estado consistente en algún momento futuro

3. Clasificación de bases de datos NoSQL

Las bases de datos NoSQL se clasifican principalmente según su modelo de datos:

                    BASES DE DATOS NoSQL
                           |
          +----------------+----------------+
          |                |                |
    CLAVE-VALOR      DOCUMENTALES      COLUMNARES
    (Key-Value)      (Document)       (Wide-Column)
    Redis, Dynamo    MongoDB,          Cassandra,
    Memcached,       CouchDB,          HBase,
    Riak             Elasticsearch     BigTable

          +----------------+----------------+
          |                |                |
      GRAFOS          SERIES          BÚSQUEDA
     (Graph)         TEMPORALES       (Search)
     Neo4j,          InfluxDB,        Elasticsearch,
     ArangoDB,       TimescaleDB,     Solr
     Amazon Neptune  Prometheus

4. Bases de datos clave-valor

4.1 Concepto

Las bases de datos clave-valor (key-value stores) son el tipo más simple de NoSQL. Almacenan datos como pares clave → valor, donde:

El acceso se realiza siempre por clave. No existe lenguaje de consulta para buscar por el contenido del valor (salvo extensiones específicas de cada producto).

4.2 Redis

Redis (Remote Dictionary Server) es el sistema clave-valor más popular. Fue creado por Salvatore Sanfilippo en 2009.

Características principales

Estructura Descripción Ejemplo de uso
String Texto, números, datos binarios Contadores, tokens de sesión
List Lista enlazada de strings Colas de mensajes, historial
Set Conjunto sin duplicados Etiquetas, relaciones únicas
Sorted Set (ZSet) Conjunto ordenado por puntuación Rankings, leaderboards
Hash Mapa de campo-valor Objetos con atributos
Bitmap Operaciones bit a bit Estadísticas de presencia
HyperLogLog Estimación de cardinalidad Conteo aproximado de elementos únicos
Stream Log de eventos ordenados Mensajería, eventos IoT

Casos de uso típicos de Redis

Limitaciones de Redis

4.3 Amazon DynamoDB

DynamoDB es el servicio de base de datos clave-valor (y documental) gestionado de Amazon Web Services. Se basa en los principios del paper de Amazon Dynamo (2007).

4.4 Memcached

Memcached es un sistema de caché en memoria distribuida, más simple que Redis:

4.5 Riak

Riak es una base de datos clave-valor distribuida de tipo AP (disponibilidad + tolerancia a particiones):


5. Bases de datos documentales

5.1 Concepto

Las bases de datos documentales almacenan datos como documentos, generalmente en formato JSON (JavaScript Object Notation) o BSON (Binary JSON). Cada documento es una unidad autónoma que puede contener estructuras anidadas, arrays y campos de distintos tipos.

A diferencia de las tablas relacionales, los documentos de una misma colección no necesitan tener el mismo esquema.

5.2 Modelo de datos

{
  "_id": "5f3a2b1c4d5e6f7a8b9c0d1e",
  "nombre": "María García",
  "edad": 34,
  "direccion": {
    "calle": "Calle Mayor, 15",
    "ciudad": "Madrid",
    "cp": "28013"
  },
  "telefonos": ["612345678", "913456789"],
  "activo": true,
  "fechaAlta": "2023-01-15T10:30:00Z"
}

Características del modelo documental:
- Documentos anidados: evitan JOINs almacenando datos relacionados juntos.
- Arrays: permiten almacenar listas de valores o subdocumentos.
- Esquema dinámico: cada documento puede tener campos diferentes.
- Identificador único: cada documento tiene un _id que actúa como clave primaria.

5.3 MongoDB

MongoDB es la base de datos documental más utilizada del mundo. Fue creada por 10gen (ahora MongoDB Inc.) en 2009.

Conceptos equivalentes MongoDB vs SQL

SQL MongoDB Descripción
Base de datos Base de datos Contenedor de colecciones
Tabla Colección (Collection) Agrupación de documentos
Fila / Registro Documento (Document) Unidad básica de datos
Columna Campo (Field) Atributo del documento
JOIN $lookup / documentos embebidos Relación entre documentos
PRIMARY KEY _id Identificador único del documento
Índice Índice Estructura para acelerar consultas
Vista Vista Consulta almacenada

Características de MongoDB

Consultas básicas en MongoDB

// Insertar un documento
db.usuarios.insertOne({ nombre: "Ana", edad: 28, ciudad: "Madrid" })

// Buscar documentos
db.usuarios.find({ ciudad: "Madrid", edad: { $gt: 25 } })

// Actualizar
db.usuarios.updateOne({ nombre: "Ana" }, { $set: { edad: 29 } })

// Eliminar
db.usuarios.deleteOne({ nombre: "Ana" })

// Aggregation Pipeline
db.pedidos.aggregate([
  { $match: { estado: "completado" } },
  { $group: { _id: "$clienteId", total: { $sum: "$importe" } } },
  { $sort: { total: -1 } }
])

Casos de uso de MongoDB

Limitaciones de MongoDB

5.4 CouchDB

Apache CouchDB es otra base de datos documental relevante:

5.5 Elasticsearch

Elasticsearch es una base de datos documental especializada en búsqueda y análisis de texto (aunque también se usa para análisis de logs y métricas):


6. Bases de datos columnares (Wide Column)

6.1 Concepto

Las bases de datos columnares o de columna ancha (Wide Column Stores) almacenan datos por columnas en lugar de por filas. Existen dos variantes:

a) Almacenamiento por columnas (Column-oriented):
Los datos de cada columna se almacenan juntos en disco. Esto mejora el rendimiento en consultas analíticas que acceden solo a determinadas columnas de muchas filas.

b) Familia de columnas (Column-family / Wide Column):
Inspiradas en Google Bigtable, organizan los datos en familias de columnas. Cada fila puede tener un conjunto diferente de columnas dentro de cada familia.

6.2 Diferencia entre almacenamiento por filas y por columnas

Almacenamiento por filas (row-oriented) — típico en OLTP:

Fila 1: [1, "Ana", 28, "Madrid"]
Fila 2: [2, "Luis", 35, "Barcelona"]
Fila 3: [3, "Eva", 42, "Sevilla"]

Óptimo para recuperar registros completos (INSERT, UPDATE, SELECT *).

Almacenamiento por columnas (column-oriented) — típico en OLAP:

ID:     [1, 2, 3]
Nombre: ["Ana", "Luis", "Eva"]
Edad:   [28, 35, 42]
Ciudad: ["Madrid", "Barcelona", "Sevilla"]

Óptimo para agregaciones sobre pocas columnas y muchas filas (SUM, AVG, COUNT sobre millones de registros).

6.3 Apache Cassandra

Apache Cassandra fue desarrollada originalmente por Facebook para gestionar la bandeja de entrada de mensajes. Fue liberada como open source en 2008 y donada a la Apache Software Foundation.

Características de Cassandra

Modelo de datos de Cassandra

-- Ejemplo de tabla en CQL
CREATE TABLE mensajes (
  usuario_id UUID,
  fecha TIMESTAMP,
  mensaje TEXT,
  PRIMARY KEY (usuario_id, fecha)
) WITH CLUSTERING ORDER BY (fecha DESC);

Casos de uso de Cassandra

6.4 Apache HBase

Apache HBase es una base de datos columnar distribuida basada en el modelo de Google Bigtable, construida sobre Apache Hadoop HDFS.

6.5 Google Bigtable

Google Bigtable (2004, paper publicado en 2006) es el origen conceptual de los sistemas de familia de columnas. Es un sistema de almacenamiento distribuido para datos estructurados a escala masiva.

6.6 Bases de datos columnar analíticas (OLAP)

Para análisis de datos (OLAP), existen sistemas columnar específicos:

Sistema Descripción
Amazon Redshift Data warehouse columnar en AWS
Google BigQuery Data warehouse serverless de Google Cloud
Snowflake Data warehouse cloud multi-cloud
Apache Parquet Formato de almacenamiento columnar (no es BBDD)
ClickHouse OLAP columnar open source, muy alto rendimiento
Vertica Base de datos columnar analítica comercial
DuckDB OLAP analítica embebida, orientada a análisis local

7. Bases de datos orientadas a grafos

7.1 Concepto y teoría de grafos

Una base de datos orientada a grafos almacena datos como un grafo: una estructura matemática compuesta por:

El modelo de grafo es especialmente eficiente para datos con relaciones complejas y profundas, donde las consultas de tipo "traversal" (recorrido del grafo) serían prohibitivamente lentas en una base de datos relacional.

7.2 Comparativa: consulta relacional vs grafo

Escenario: encontrar los amigos de los amigos de un usuario (2 saltos).

En SQL (modelo relacional):

SELECT DISTINCT f2.amigo_id
FROM amistades f1
JOIN amistades f2 ON f1.amigo_id = f2.usuario_id
WHERE f1.usuario_id = 1
AND f2.amigo_id != 1;

A medida que aumentan los saltos (3, 4, 5...), los JOINs se multiplican y el rendimiento cae exponencialmente.

En Neo4j (Cypher):

MATCH (u:Usuario {id: 1})-[:AMIGO*2]->(amigo)
RETURN DISTINCT amigo

El rendimiento no depende del tamaño total del grafo, sino del subgrafo recorrido.

7.3 Neo4j

Neo4j es la base de datos orientada a grafos más utilizada del mundo. Fue desarrollada por Neo Technology (ahora Neo4j Inc.) y lanzada en 2007.

Modelo de datos de Neo4j: Property Graph Model

(persona:Persona {nombre: "Ana", edad: 28})
    -[:TRABAJA_EN {desde: 2020}]->
(empresa:Empresa {nombre: "Ayuntamiento de Madrid"})

Lenguaje Cypher

Cypher es el lenguaje de consulta declarativo de Neo4j, diseñado para ser intuitivo mediante patrones ASCII:

-- Crear un nodo
CREATE (p:Persona {nombre: "Ana", edad: 28})

-- Crear una relación
MATCH (a:Persona {nombre: "Ana"}), (b:Persona {nombre: "Luis"})
CREATE (a)-[:CONOCE {desde: 2020}]->(b)

-- Consultar amigos de amigos
MATCH (yo:Persona {nombre: "Ana"})-[:CONOCE*2]->(posibleAmigo)
WHERE NOT (yo)-[:CONOCE]->(posibleAmigo)
RETURN posibleAmigo.nombre

-- Encontrar el camino más corto
MATCH path = shortestPath(
  (a:Persona {nombre: "Ana"})-[:CONOCE*]-(b:Persona {nombre: "Eva"})
)
RETURN path

Algoritmos de grafos en Neo4j

Neo4j Graph Data Science (GDS) incluye algoritmos de:

Casos de uso de Neo4j y bases de datos de grafos

Caso de uso Descripción
Redes sociales Relaciones de amistad, seguidores, interacciones
Detección de fraude Identificar patrones sospechosos en redes de transacciones
Motores de recomendación "Los usuarios que compraron X también compraron Y"
Grafos de conocimiento Knowledge graphs, ontologías semánticas
Gestión de redes Topología de redes de telecomunicaciones, infraestructuras
Ciberseguridad Análisis de rutas de ataque, dependencias de sistemas
Master Data Management Gestión de datos maestros con relaciones complejas
Rutas y logística Optimización de rutas, gestión de dependencias

7.4 Otros sistemas de bases de datos de grafos

Sistema Descripción
Amazon Neptune Servicio de grafo gestionado en AWS; soporta Property Graph (Gremlin) y RDF/SPARQL
ArangoDB Multi-modelo: grafos + documentos + clave-valor en un mismo sistema
JanusGraph Grafo distribuido, construido sobre Cassandra o HBase
TigerGraph Base de datos de grafo nativa para analítica en tiempo real
Dgraph Base de datos de grafo distribuida con GraphQL nativo
Azure Cosmos DB Multi-modelo de Microsoft; soporta grafos con API Gremlin

7.5 RDF y grafos semánticos

Además del Property Graph Model, existe el modelo RDF (Resource Description Framework):


8. Otras tipologías especiales

8.1 Bases de datos de series temporales (Time Series)

Las bases de datos de series temporales están optimizadas para almacenar y consultar datos indexados por tiempo (timestamp).

Características:
- Ingesta masiva de datos con marca temporal.
- Consultas eficientes sobre rangos temporales.
- Funciones de agregación temporal (downsampling, rollup).
- Políticas de retención y expiración automática de datos.
- Compresión eficiente de datos temporales (los datos cambian poco entre muestras consecutivas).

Sistema Descripción
InfluxDB La más popular para métricas e IoT; lenguaje Flux
TimescaleDB Extensión de PostgreSQL para series temporales; compatible con SQL
Prometheus Enfocada en métricas de monitorización; usada con Grafana
OpenTSDB Construida sobre HBase
QuestDB Alto rendimiento para ingesta y consultas de series temporales

Casos de uso:
- Métricas de infraestructura y aplicaciones (CPU, memoria, red).
- Datos de sensores IoT.
- Datos financieros (precios de acciones, transacciones).
- Monitorización de sistemas industriales (SCADA).

8.2 Bases de datos de búsqueda (Search Engines)

Sistema Descripción
Elasticsearch Búsqueda de texto completo + análisis (ya mencionado)
Apache Solr Basado en Lucene, similar a Elasticsearch
Meilisearch Motor de búsqueda open source, ligero y rápido
Typesense Alternativa a Meilisearch, tolerante a errores tipográficos

8.3 Bases de datos en memoria (In-Memory)

Sistema Descripción
Redis Ya descrito en clave-valor
Memcached Caché pura en memoria
VoltDB BBDD relacional completamente en memoria, ACID, alta velocidad
SAP HANA BBDD columnar en memoria para analítica y OLTP

8.4 Bases de datos geoespaciales

Optimizadas para almacenar y consultar datos con componente geográfica.

Operaciones típicas: buscar puntos dentro de un radio, calcular distancias, intersección de polígonos, operaciones topológicas.

8.5 Bases de datos multi-modelo

Algunos sistemas modernos soportan múltiples modelos en un único motor:

Sistema Modelos soportados
ArangoDB Documentos + Grafos + Clave-valor
Azure Cosmos DB Documentos (API MongoDB), Grafos (Gremlin), Clave-valor (Table), Columnar (Cassandra), SQL
FaunaDB Documentos + Relacional + Grafos
OrientDB Documentos + Grafos + Objetos

8.6 Bases de datos orientadas a objetos

Almacenan objetos directamente, tal como se representan en un lenguaje orientado a objetos, sin necesidad de mapeo objeto-relacional (ORM).

8.7 NewSQL: lo mejor de ambos mundos

Las bases de datos NewSQL son sistemas relacionales diseñados para escalar horizontalmente como NoSQL, manteniendo las garantías ACID.

Sistema Descripción
Google Spanner BBDD relacional globalmente distribuida de Google; primer sistema que ofrece consistencia externa global
CockroachDB Compatible con PostgreSQL, distribuida y ACID
TiDB Compatible con MySQL, distribuida y ACID
YugabyteDB Compatible con PostgreSQL y Cassandra
Vitess Sistema de sharding para MySQL (usado por YouTube, Slack)

9. Data Warehouse y sistemas OLAP

9.1 Concepto de Data Warehouse

Un Data Warehouse (almacén de datos) es un repositorio centralizado de datos integrados, históricos y organizados para el análisis y la toma de decisiones. Fue definido por Bill Inmon en 1992.

Definición de Bill Inmon: "Un Data Warehouse es una colección de datos orientada a temas, integrada, variable en el tiempo y no volátil, que se usa para el apoyo al proceso de toma de decisiones."

9.2 Las cuatro características de Inmon (OIVN)

Característica Descripción Diferencia con BBDD operacional
Orientado a temas (Subject-oriented) Los datos se organizan por áreas de negocio (ventas, clientes, productos), no por aplicaciones Una BBDD operacional organiza los datos por procesos (pedidos, facturación)
Integrado (Integrated) Los datos provienen de múltiples fuentes heterogéneas y se unifican con formatos y códigos consistentes Cada sistema operacional tiene su propio formato
Variable en el tiempo (Time-variant) Almacena datos históricos; cada registro incluye una dimensión temporal Las BBDD operacionales suelen tener solo el estado actual
No volátil (Non-volatile) Los datos no se modifican ni se borran una vez cargados; solo se añaden nuevos datos Las BBDD operacionales tienen operaciones INSERT, UPDATE, DELETE frecuentes

9.3 OLTP vs OLAP

Característica OLTP (Operacional) OLAP (Analítico / DW)
Propósito Gestión de operaciones diarias Análisis y toma de decisiones
Usuarios Personal operativo Directivos, analistas
Operaciones INSERT, UPDATE, DELETE frecuentes SELECT con agregaciones complejas
Volumen de datos GB TB - PB
Tiempo de respuesta Milisegundos Segundos - minutos
Diseño Normalizado (3FN) Desnormalizado (estrella, copo de nieve)
Transacciones Muchas, cortas, concurrentes Pocas, largas, de solo lectura
Horizonte temporal Datos actuales Datos históricos (años)
Ejemplos ERP, CRM, e-commerce Data Warehouse, Data Mart

9.4 Arquitectura de un Data Warehouse

FUENTES DE DATOS          ETL / ELT              DW / DL           CONSUMO
+---------------+    +---------------+    +---------------+    +----------+
| Sistemas ERP  | →  |   Extract     | →  | Data Warehouse| →  | Informes |
| CRM           |    |   Transform   |    | (Star/Snowfl) |    | Dashboards|
| Ficheros CSV  |    |   Load        |    +-------+-------+    | OLAP     |
| APIs externas |    +---------------+            |            | ML / IA  |
| BBDD legadas  |                          +------+------+     +----------+
+---------------+                          | Data Marts  |
                                           +-------------+

9.5 Proceso ETL

El proceso ETL (Extract, Transform, Load) es el responsable de mover datos desde los sistemas fuente al Data Warehouse:

Fase Descripción
Extract (Extracción) Obtención de datos de los sistemas fuente (BBDD, APIs, ficheros)
Transform (Transformación) Limpieza, validación, integración, conversión de formatos, cálculo de métricas derivadas
Load (Carga) Inserción de los datos transformados en el DW, típicamente en cargas nocturnas (batch)

ELT (Extract, Load, Transform) es una variante moderna donde los datos se cargan primero en el DW (o Data Lake) y la transformación se realiza dentro del propio sistema, aprovechando su potencia de cómputo (Big Data, cloud DW).

9.6 Modelado dimensional: esquema estrella y copo de nieve

El modelado dimensional fue desarrollado por Ralph Kimball como alternativa al enfoque de Inmon.

Esquema estrella (Star Schema)

                    +---------------+
                    | DIM_TIEMPO    |
                    | id_tiempo     |
                    | año, mes, día |
                    +-------+-------+
                            |
+------------+    +---------+--------+    +---------------+
| DIM_CLIENTE|    |                  |    | DIM_PRODUCTO  |
| id_cliente | →  | TABLA DE HECHOS  | ←  | id_producto   |
| nombre     |    | VENTAS           |    | nombre        |
| ciudad     |    |                  |    | categoria     |
+------------+    | id_cliente (FK)  |    +---------------+
                  | id_producto (FK) |
                  | id_tiempo (FK)   |    +---------------+
                  | id_tienda (FK)   | ←  | DIM_TIENDA    |
                  | importe          |    | id_tienda     |
                  | unidades         |    | ciudad, pais  |
                  +------------------+    +---------------+

Esquema copo de nieve (Snowflake Schema)

Es una extensión del esquema estrella donde las tablas de dimensión están normalizadas, creando subdimensiones:

DIM_TIENDA → DIM_CIUDAD → DIM_PAIS
DIM_PRODUCTO → DIM_SUBCATEGORIA → DIM_CATEGORIA

9.7 Tabla de hechos: tipos de métricas

Tipo de métrica Descripción Ejemplo
Aditiva Se puede sumar en todas las dimensiones Importe de ventas
Semi-aditiva Se puede sumar en algunas dimensiones, no en todas Saldo de cuenta (no tiene sentido sumarlo en el tiempo)
No aditiva No se puede sumar en ninguna dimensión Ratio, porcentaje, precio unitario

9.8 Data Mart

Un Data Mart es un subconjunto del Data Warehouse orientado a un departamento o área de negocio específica (ventas, finanzas, RRHH).

9.9 Data Lake

Un Data Lake es un repositorio que almacena datos en su formato nativo (sin transformar), incluyendo datos estructurados, semiestructurados y no estructurados.

Característica Data Warehouse Data Lake
Datos Estructurados, procesados Todos los formatos (raw)
Esquema Schema-on-write Schema-on-read
Calidad Alta (limpiados) Variable (puede tener "data swamp")
Usuarios Analistas de negocio Data scientists, ingenieros de datos
Coste Alto (almacenamiento estructurado) Bajo (almacenamiento en objeto: S3, ADLS)
Tecnologías Redshift, Snowflake, BigQuery Hadoop HDFS, AWS S3, Azure Data Lake

Data Lakehouse: arquitectura híbrida que combina la flexibilidad del Data Lake con las capacidades analíticas del Data Warehouse (Delta Lake, Apache Iceberg, Apache Hudi).

9.10 Slowly Changing Dimensions (SCD)

Las Dimensiones de Cambio Lento gestionan cómo se actualiza una tabla de dimensión cuando sus atributos cambian con el tiempo. Existen varios tipos:

Tipo Descripción Ejemplo
SCD Tipo 0 No se actualiza nunca Fecha de nacimiento
SCD Tipo 1 Sobrescribe el valor anterior (no hay histórico) Corrección de errores tipográficos
SCD Tipo 2 Añade una nueva fila con el nuevo valor (mantiene histórico) Cambio de dirección del cliente
SCD Tipo 3 Añade una nueva columna para el valor anterior Cambio de nombre de producto

10. MDX: consultas a cubos OLAP

10.1 Concepto de cubo OLAP

Un cubo OLAP (Online Analytical Processing) es una estructura de datos multidimensional que organiza la información en:

Operaciones OLAP fundamentales

Operación Descripción Ejemplo
Roll-up (drill-up) Subir en la jerarquía, agregar datos De ventas por mes → ventas por trimestre
Drill-down Bajar en la jerarquía, desagregar De ventas por año → ventas por mes
Slice Seleccionar una "rebanada" del cubo fijando una dimensión Ventas solo del año 2023
Dice Seleccionar un subcubo fijando múltiples dimensiones Ventas de 2023 en Madrid para Producto A
Pivot (rotate) Rotar el cubo, cambiar la perspectiva Ver ventas por producto en filas y por tiempo en columnas

Tipos de sistemas OLAP

Tipo Descripción Almacenamiento
MOLAP (Multidimensional OLAP) El cubo se precalcula y almacena en formato multidimensional Cubo multidimensional propietario
ROLAP (Relational OLAP) El cubo se calcula dinámicamente sobre una BBDD relacional Tablas relacionales (estrella/copo de nieve)
HOLAP (Hybrid OLAP) Combinación de MOLAP y ROLAP Híbrido

10.2 MDX: MultiDimensional eXpressions

MDX (MultiDimensional eXpressions) es el lenguaje estándar de consulta para bases de datos multidimensionales (cubos OLAP). Fue desarrollado originalmente por Microsoft para SQL Server Analysis Services (SSAS) y adoptado como estándar de facto.

Estructura básica de una consulta MDX

SELECT
  <eje_columnas> ON COLUMNS,
  <eje_filas> ON ROWS
FROM <cubo>
[WHERE <slicer>]

Elementos de MDX

Elemento Descripción Ejemplo
Dimensión Eje de análisis [Tiempo], [Producto], [Geografia]
Jerarquía Niveles de una dimensión [Tiempo].[Calendario]
Miembro Valor concreto en una jerarquía [Tiempo].[2023], [Producto].[Laptop]
Medida Valor numérico [Measures].[Ventas], [Measures].[Unidades]
Conjunto (Set) Colección de miembros {[Producto].[Laptop], [Producto].[Tablet]}
Tupla Combinación de miembros de distintas dimensiones ([2023], [Laptop], [Madrid])

Ejemplos de consultas MDX

-- Ejemplo 1: Ventas por año en columnas, por producto en filas
SELECT
  {[Tiempo].[2022], [Tiempo].[2023]} ON COLUMNS,
  {[Producto].[Laptop], [Producto].[Tablet], [Producto].[Móvil]} ON ROWS
FROM [Ventas]
WHERE ([Measures].[Importe_Ventas])

-- Ejemplo 2: Total de ventas del año actual vs año anterior
SELECT
  { [Measures].[Ventas], 
    [Measures].[Ventas] } ON COLUMNS,
  [Tiempo].[Año].Members ON ROWS
FROM [Ventas]

-- Ejemplo 3: Top 10 productos por ventas
SELECT
  [Measures].[Importe_Ventas] ON COLUMNS,
  TopCount(
    [Producto].[Producto].Members,
    10,
    [Measures].[Importe_Ventas]
  ) ON ROWS
FROM [Ventas]

Funciones MDX importantes

Función Descripción
Members Todos los miembros de un nivel
Children Hijos de un miembro en la jerarquía
Parent Padre de un miembro
Descendants Todos los descendientes
TopCount(set, n, medida) Los N miembros con mayor valor
BottomCount(set, n, medida) Los N miembros con menor valor
Filter(set, condición) Filtra miembros según condición
Sum(set, medida) Suma de una medida sobre un conjunto
Avg(set, medida) Media de una medida
ParallelPeriod Miembro del período paralelo (mismo mes del año anterior)
YTD Year To Date (acumulado del año)
MTD Month To Date (acumulado del mes)

10.3 Herramientas OLAP que usan MDX

Herramienta Tipo Descripción
Microsoft SQL Server Analysis Services (SSAS) MOLAP/ROLAP Servidor OLAP de Microsoft
Microsoft Power BI ROLAP Usa MDX y DAX internamente
SAP BW MOLAP Business Warehouse de SAP
Oracle OLAP MOLAP Módulo OLAP de Oracle DB
IBM Cognos Herramienta BI Usa MDX para consultas a cubos
Apache Mondrian ROLAP open source Motor OLAP sobre BBDD relacional
Pentaho BI open source Suite BI que usa Mondrian

11. Minería de datos y Big Data

11.1 Minería de datos

La minería de datos (data mining) es el proceso de descubrir patrones, correlaciones y conocimiento útil en grandes conjuntos de datos mediante técnicas estadísticas y de machine learning.

Metodología CRISP-DM (6 fases)

CRISP-DM (Cross-Industry Standard Process for Data Mining) es la metodología estándar para proyectos de minería de datos:

1. Comprensión del negocio (Business Understanding)
        ↓
2. Comprensión de los datos (Data Understanding)
        ↓
3. Preparación de los datos (Data Preparation)  ←──┐
        ↓                                           |
4. Modelado (Modeling)  ───────────────────────────┘
        ↓
5. Evaluación (Evaluation)
        ↓
6. Despliegue (Deployment)
Fase Actividades principales
Comprensión del negocio Definir objetivos, criterios de éxito, plan de proyecto
Comprensión de los datos Recopilar datos, exploración inicial, calidad de datos
Preparación de los datos Selección, limpieza, construcción de variables, integración, formateo
Modelado Selección de técnicas, diseño de pruebas, construcción y evaluación del modelo
Evaluación Revisar si el modelo cumple los objetivos de negocio
Despliegue Planificación, monitorización y mantenimiento del modelo en producción

11.2 Técnicas de minería de datos

Aprendizaje supervisado (datos etiquetados)

Técnica Descripción Uso típico
Regresión lineal Predicción de valores continuos Predicción de precios
Regresión logística Clasificación binaria Detección de spam, fraude
Árboles de decisión Clasificación y regresión con reglas Diagnóstico médico, crédito
Random Forest Ensemble de árboles de decisión Clasificación robusta
SVM (Support Vector Machine) Clasificación con hiperplanos Reconocimiento de imágenes
Redes neuronales / Deep Learning Modelos complejos de múltiples capas Imagen, NLP, voz

Aprendizaje no supervisado (sin etiquetas)

Técnica Descripción Uso típico
K-Means Agrupamiento (clustering) por centroides Segmentación de clientes
DBSCAN Clustering basado en densidad Detección de anomalías
PCA (Principal Component Analysis) Reducción de dimensionalidad Visualización, preprocesamiento
Reglas de asociación (Apriori) Patrones de co-ocurrencia Market basket analysis
Análisis de componentes independientes (ICA) Separación de señales Procesamiento de señales

Aprendizaje por refuerzo

El agente aprende por interacción con el entorno, maximizando una recompensa. Usado en robótica, juegos (AlphaGo), sistemas de recomendación.

11.3 PCA (Análisis de Componentes Principales)

El PCA (Principal Component Analysis) es una técnica de reducción de dimensionalidad:

Ejemplo del examen: dado un conjunto de 100.000 observaciones con 100 dimensiones, PCA se usa para obtener las mismas 100.000 observaciones pero con un número de dimensiones inferior a 100 (no reduce el número de observaciones, sino las dimensiones/características).

11.4 Big Data: las 5 Vs

El concepto Big Data se caracteriza por las 5 Vs:

V Descripción
Volumen Cantidad masiva de datos (petabytes, exabytes)
Velocidad Alta velocidad de generación e ingesta (streaming, tiempo real)
Variedad Múltiples formatos: estructurado, semiestructurado, no estructurado
Veracidad Calidad e incertidumbre de los datos
Valor El objetivo final: extraer valor de negocio

11.5 Ecosistema Hadoop

Apache Hadoop es el framework open source de referencia para procesamiento de Big Data:

Componente Función
HDFS Sistema de ficheros distribuido (Hadoop Distributed File System)
YARN Gestión de recursos del clúster
MapReduce Modelo de programación para procesamiento paralelo
Hive SQL sobre Hadoop (HiveQL)
HBase Base de datos columnar sobre HDFS
Pig Lenguaje de scripts para flujos de datos
Sqoop Importación/exportación entre Hadoop y BBDD relacionales
Flume Ingesta de logs y datos de streaming
Oozie Planificación de flujos de trabajo Hadoop
Zookeeper Coordinación distribuida

11.6 Apache Spark

Apache Spark es el sustituto moderno de MapReduce para procesamiento de datos distribuido:


12. Comparativa general y elección de modelo

12.1 Tabla comparativa de todos los modelos

Tipo Modelo de datos Escalabilidad Consistencia Ejemplos Mejor para
Relacional Tablas, filas, columnas Vertical (principalmente) ACID fuerte MySQL, PostgreSQL, Oracle Transacciones, datos estructurados con relaciones
Clave-valor Par clave → valor Horizontal excelente BASE (configurable) Redis, DynamoDB, Memcached Caché, sesiones, contadores
Documental Documentos JSON/BSON Horizontal buena Variable (ACID en MongoDB 4+) MongoDB, CouchDB, Elasticsearch Catálogos, CMS, perfiles de usuario
Columnar Familias de columnas Horizontal excelente AP o CP según producto Cassandra, HBase, BigTable Escrituras masivas, series temporales, IoT
Grafos Nodos y aristas Moderada (difícil de particionar) ACID (Neo4j) Neo4j, Neptune, ArangoDB Redes sociales, recomendaciones, fraude
Series temporales Datos indexados por tiempo Horizontal Variable InfluxDB, TimescaleDB, Prometheus Métricas, IoT, monitorización
Búsqueda Documentos indexados Horizontal Eventual Elasticsearch, Solr Full-text search, análisis de logs
Data Warehouse Dimensional (estrella/copo) Horizontal (cloud) Alta Redshift, BigQuery, Snowflake Análisis histórico, reporting, BI

12.2 Criterios para elegir el tipo de base de datos

¿Datos muy relacionados y consultas complejas en grafos?
  → Base de datos de GRAFOS (Neo4j)

¿Necesito máxima velocidad de lectura/escritura, datos simples?
  → CLAVE-VALOR (Redis, DynamoDB)

¿Documentos JSON con esquema flexible?
  → DOCUMENTAL (MongoDB)

¿Escrituras masivas distribuidas, IoT, series temporales?
  → COLUMNAR (Cassandra) o SERIES TEMPORALES (InfluxDB)

¿Análisis histórico, reporting, BI?
  → DATA WAREHOUSE (Redshift, BigQuery, Snowflake)

¿Búsqueda de texto completo, análisis de logs?
  → BÚSQUEDA (Elasticsearch)

¿Transacciones complejas, integridad referencial, SQL estándar?
  → RELACIONAL (PostgreSQL, MySQL, Oracle)

13. Resumen esquemático y preguntas tipo test

Resumen para repaso rápido

Concepto Dato clave
NoSQL significa "Not Only SQL" (no solo SQL)
Teorema CAP Solo se pueden garantizar 2 de 3: Consistencia, Disponibilidad, Tolerancia a particiones
ACID Atomicidad, Consistencia, Aislamiento, Durabilidad (BBDD relacionales)
BASE Básicamente disponible, Estado blando, Consistencia eventual (NoSQL)
Redis Clave-valor, in-memory, estructuras de datos ricas, caché, sesiones
MongoDB Documental, documentos JSON/BSON, esquema flexible, Aggregation Pipeline
Cassandra Columnar, sin maestro (masterless), AP, escrituras masivas, CQL
HBase Columnar, sobre Hadoop HDFS, CP, inspirado en Google Bigtable
Neo4j Grafos, Property Graph Model, lenguaje Cypher
Elasticsearch Documental + búsqueda de texto completo, basado en Lucene
InfluxDB Series temporales, métricas, IoT
Data Warehouse (Inmon) Orientado a temas, integrado, variable en el tiempo, no volátil
OLTP vs OLAP OLTP = operacional, normalizado; OLAP = analítico, desnormalizado
Esquema estrella Tabla de hechos + tablas de dimensión (desnormalizado)
Esquema copo de nieve Dimensiones normalizadas (más JOINs)
MDX Lenguaje de consulta para cubos OLAP multidimensionales
CRISP-DM Metodología de minería de datos: 6 fases
PCA Reducción de dimensionalidad (mantiene observaciones, reduce dimensiones)
K-Means Clustering, aprendizaje no supervisado, descubrir grupos ocultos
Aprendizaje supervisado Datos etiquetados (clasificación y regresión)
ETL Extract, Transform, Load (proceso de carga al DW)
Data Lake Datos en formato nativo (raw), schema-on-read
Big Data 5 Vs Volumen, Velocidad, Variedad, Veracidad, Valor

Preguntas tipo test de los exámenes

P: Neo4j, ¿qué tipo de base de datos es?
b) Base de datos orientada a grafos (no relacional, no columnar)

P: ¿Cuál de las siguientes opciones no es un sistema de gestión de bases de datos?
b) SQL (SQL es un lenguaje, no un SGBD; MySQL y Microsoft SQL Server sí son SGBD)

P: Indica qué base de datos es del tipo Clave-valor:
c) Redis (MongoDB es documental; Neo4j es de grafos)

P: ¿Qué lenguaje debo utilizar para realizar una consulta a una base de datos multidimensional (cubo OLAP)?
a) MDX (MultiDimensional eXpressions) (MQL y SMQL no existen como estándares)

P: ¿Cuál de las siguientes características se corresponde con una de las características de los datawarehouse?
c) La información se organiza por temas o áreas de negocio (sí distingue datos actuales de históricos; no es volátil)

P: Un almacén de datos se diferencia de una base de datos en:
c) Ambos son sistemas de almacenamiento, pero se utilizan para propósitos distintos (el DW para análisis histórico, la BBDD operacional para transacciones diarias)

P: En minería de datos se analizan hechos sobre la realidad basándose en los datos disponibles. Estos datos se organizan en dimensiones que son:
a) Las diferentes perspectivas a través de las que se pueden analizar los datos disponibles (no son datos numéricos ni tablas físicas)

P: Dado un conjunto de datos con 100.000 observaciones, donde cada observación es un vector real de 100 dimensiones, normalmente usaremos PCA para:
b) Obtener 100.000 observaciones, pero con un número de dimensiones inferior a 100 (PCA reduce dimensiones, no observaciones)

P: ¿Qué técnica de aprendizaje automático es más adecuada para descubrir grupos ocultos en un conjunto de datos?
c) K-Means clustering (regresión lineal es supervisada; árboles de decisión son para clasificación/regresión supervisada)

P: De acuerdo con la metodología CRISP-DM, ¿cuántas fases presenta el proceso de minería de datos?
c) 6 (no 7, no 8)

P: Respecto a JSON, ¿pueden las bases de datos almacenar y utilizar datos en este formato?
a) Sí, existen algunas bases que permiten trabajar con JSON de manera nativa (MongoDB, PostgreSQL con jsonb, MySQL, etc.)

P: ¿Cuál es la función principal de un Sistema de Información Geográfica (SIG)?
a) Capturar, almacenar, analizar y visualizar datos geográficos para comprender patrones y relaciones espaciales