Notas de estudio · Sistemas de bases de datos

Tópicos avanzados de bases de datos

Un repaso condensado a los temas que sostienen a los motores de datos modernos: transacciones, índices, concurrencia y arquitecturas distribuidas.

-- autor SELECT nombre, rol FROM autores WHERE nombre = 'Dixon Góngora'; nombre | rol -------------------+------------------------ Dixon Góngora | Software Dev & QA
Autor: Dixon Góngora Tema: Bases de datos avanzadas Formato: Referencia rápida
01 — Núcleo transaccional
Lo que garantiza que los datos no se corrompan bajo carga concurrente
PK · fundamento

ACID

Las cuatro propiedades que debe cumplir una transacción: Atomicidad, Consistencia, Aislamiento y Durabilidad.

BEGIN; UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1; UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2; COMMIT;
PK · concurrencia

MVCC

Control de concurrencia multiversión: cada transacción ve una "fotografía" consistente de los datos sin bloquear lecturas.

-- Postgres usa xmin/xmax -- para versionar cada fila SELECT * FROM pedidos WHERE xmin::text::int > 1000;
PK · niveles

Aislamiento

READ COMMITTED, REPEATABLE READ y SERIALIZABLE definen qué anomalías (dirty read, phantom read) se permiten.

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
PK · bloqueo

Locking

Bloqueos a nivel de fila o tabla (row-level, table-level) para evitar condiciones de carrera en escrituras.

SELECT * FROM inventario WHERE id = 5 FOR UPDATE;
02 — Motor de consultas
Cómo el motor decide el camino más barato hacia tus datos
PK · índices

Estructuras de índice

B-Tree para rangos y orden, Hash para igualdad exacta, GIN/GiST para full-text y datos geoespaciales.

CREATE INDEX idx_pedidos_fecha ON pedidos USING BTREE (fecha);
PK · planificación

Query Planner

EXPLAIN ANALYZE revela si el optimizador eligió un index scan, seq scan o un join anidado, hash o merge.

EXPLAIN ANALYZE SELECT * FROM pedidos WHERE cliente_id = 42;
PK · diseño

Normalización

1FN a 3FN reducen redundancia; la desnormalización deliberada (agregados, columnas calculadas) acelera lecturas críticas.

-- desnormalizado a propósito ALTER TABLE pedidos ADD COLUMN total_cache NUMERIC;
PK · particionado

Particionamiento

Range, list o hash partitioning dividen tablas gigantes para que cada consulta toque solo el fragmento necesario.

CREATE TABLE ventas_2026 PARTITION OF ventas FOR VALUES FROM ('2026-01-01') TO ('2027-01-01');
03 — Escala y distribución
Qué se sacrifica cuando los datos ya no caben en un solo nodo

El teorema CAP dice que un sistema distribuido solo puede garantizar dos de estas tres propiedades a la vez cuando ocurre una partición de red.

C

Consistencia

Toda lectura recibe la escritura más reciente, sin importar el nodo consultado.

A

Disponibilidad

Cada solicitud recibe respuesta, aunque algún nodo esté caído.

P

Tolerancia a particiones

El sistema sigue operando aunque se pierdan mensajes entre nodos.

PK · réplicas

Replicación

Maestro-esclavo para lecturas escaladas, o multi-maestro con resolución de conflictos para escrituras distribuidas.

-- Postgres streaming replication primary_conninfo = 'host=primary port=5432 user=replicator'
PK · sharding

Sharding

Divide una tabla lógica en fragmentos físicos por clave (hash, rango) repartidos entre varios servidores.

-- clave de sharding shard_id = hash(cliente_id) % N;
PK · modelo

SQL vs NoSQL

Documentales (Mongo), clave-valor (Redis), columnares (Cassandra) y de grafos (Neo4j) relajan esquema o consistencia a cambio de escala.

db.pedidos.find({ cliente_id: 42 });