Tema 8 · Vector DBs

8. Bases de Datos Vectoriales en la Web: PostgreSQL con pgvector y MariaDB

Instala y utiliza pgvector en PostgreSQL para almacenar y buscar vectores con índices HNSW y operadores de distancia coseno a escala web.

¿Necesitas una Base de Datos Vectorial Dedicada?

Cuando surge la necesidad de buscar por similitud semántica, muchos desarrolladores cometen el error de precipitarse a contratar servicios externos especializados (Pinecone, Weaviate, Qdrant). Esto agrega complejidad operativa, facturas adicionales y problemas de sincronización con tu base de datos principal de usuarios y productos.

Para el 95% de las aplicaciones web, la solución más sólida y madura es utilizar PostgreSQL con la extensión pgvector (o las nuevas capacidades vectoriales nativas de MariaDB 11.4+ y MySQL 8.4+). Permite almacenar tus tablas relacionales de clientes, pedidos y artículos junto con sus vectores de embeddings en una única base de datos transaccional con soporte ACID.

Operadores de Distancia y el Poder de los Índices HNSW

En pgvector, las búsquedas se realizan calculando la distancia entre el vector almacenado y el vector de la consulta del usuario mediante operadores nativos:

Operador Métrica de Distancia Caso de Uso Recomendado
<=> Distancia del Coseno (1 - Cosine Similarity) Embeddings de texto (OpenAI, Gemini, Cohere) donde la magnitud no altera el significado.
<-> Distancia Euclidiana (L2) Vectores espaciales o modelos donde la magnitud absoluta del vector es relevante.
<#> Producto Interno Negativo (Dot Product) Embeddings normalizados donde el producto punto es matemáticamente equivalente al coseno pero más rápido.
⚡ Rendimiento con Índice HNSW: Sin índices, la base de datos realiza un Sequential Scan (compara la consulta contra cada fila). Con un índice HNSW (Hierarchical Navigable Small World), las consultas semánticas sobre millones de registros se resuelven en menos de 15 milisegundos.

⚡ Esquema SQL con pgvector, Índice HNSW y Consulta de Similitud Coseno

Creación de tabla de artículos de conocimiento con vector de 1536 dimensiones e índice HNSW optimizado.

pgvector-setup-and-query.sql
Solo lectura
-- 1. Habilitar la extensión vectorial en PostgreSQL
CREATE EXTENSION IF NOT EXISTS vector;

-- 2. Crear tabla de base de conocimiento para la aplicación web
CREATE TABLE base_conocimiento (
    id SERIAL PRIMARY KEY,
    titulo VARCHAR(255) NOT NULL,
    contenido TEXT NOT NULL,
    categoria VARCHAR(80) NOT NULL,
    -- Vector de 1536 dimensiones (compatible con text-embedding-3-small de OpenAI)
    embedding vector(1536) NOT NULL,
    creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 3. Crear índice HNSW para búsqueda rápida por Distancia del Coseno (<=>)
-- m = 16 (conexiones por nodo), ef_construction = 64 (precisión al indexar)
CREATE INDEX IF NOT EXISTS idx_conocimiento_hnsw_coseno 
ON base_conocimiento 
USING hnsw (embedding vector_cosine_ops)
WITH (m = 16, ef_construction = 64);

-- 4. Consulta en tiempo real: Encontrar los 3 artículos más cercanos a la duda del usuario
-- Parámetro $1: el vector de 1536 números generado por el backend a partir de la pregunta
SELECT 
    id, 
    titulo, 
    contenido, 
    categoria,
    -- Convertimos la distancia del coseno en porcentaje de similitud (1 - distancia)
    ROUND((1 - (embedding <=> '[0.012, -0.043, 0.089, ...]'::vector))::numeric, 4) AS similitud_score
FROM base_conocimiento
WHERE categoria = 'facturacion'
ORDER BY embedding <=> '[0.012, -0.043, 0.089, ...]'::vector ASC
LIMIT 3;
🧠
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección
1 Pregunta
Pregunta 1
En PostgreSQL con pgvector, ¿qué operador se utiliza para ordenar registros por Distancia del Coseno?
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar IA Aplicada a Desarrollo Web: APIs, RAG & Agentes y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.