Bases de datos vectoriales
Compara Supabase pgvector, Pinecone, Weaviate, Qdrant y Chroma. Aprende a almacenar, indexar y consultar vectores para RAG en producción.
Contenido de Curso Premium
Esta lección es parte de un curso premium. Mejora a Pro para desbloquear todos los cursos premium y su contenido.
- Acceso a todos los cursos premium
- Más de 1000 plantillas de skills de IA incluidas
- Contenido nuevo cada semana
🔄 En la lección anterior generaste vectores a partir de tus fragmentos de texto. Ahora necesitas un lugar donde guardarlos y buscar en ellos — rápido, a escala, con filtros.
Hay demasiadas opciones. Vamos a cortar el ruido.
Lo que aprenderás
Al terminar esta lección sabrás qué base de datos vectorial usar para tu caso, cómo indexar vectores de forma eficiente y cómo ejecutar consultas que combinan semántica con filtros.
La tabla que necesitas
| Base | Tipo | Búsqueda híbrida | Mejor para | Costo |
|---|---|---|---|---|
| Supabase pgvector | Extensión Postgres | Sí (FTS + vector en 1 query) | Startups, full-stack, hasta 50M vectores | $25+/mes fijo |
| Pinecone | Managed serverless | Vía metadata | Escala masiva, cero ops | Pay per read/write |
| Weaviate | OSS, self-hosted | Nativa | Búsqueda híbrida, flexibilidad | Self-hosted o cloud |
| Qdrant | OSS, Rust | Sí | Filtros complejos, alto rendimiento | Self-hosted o cloud |
| Chroma | OSS, ligero | Básica | Prototipos, aprendizaje | Gratis |
Supabase pgvector: La opción práctica
Para la mayoría de proyectos — especialmente en LATAM donde el costo importa — Supabase con pgvector es el punto de partida correcto.
¿Por qué?
- Un solo servicio: Base de datos + vectores + autenticación + API REST. No necesitas integrar 4 servicios diferentes.
- Precio predecible: $25/mes (plan Pro) incluye consultas ilimitadas. Pinecone cobra por lectura/escritura — los costos suben con el uso.
- Búsqueda híbrida nativa: Combina Full-Text Search (keywords) + búsqueda vectorial en una sola consulta SQL. En Pinecone necesitas workarounds.
- Row-Level Security (RLS): Cada usuario ve solo sus datos. Para aplicaciones multi-tenant (SaaS), esto es oro.
Ejemplo: Insertar y buscar vectores en Supabase
-- Crear tabla con columna vectorial
create table documents (
id bigserial primary key,
content text,
metadata jsonb,
embedding vector(1536) -- dimensiones del modelo
);
-- Crear índice HNSW para búsqueda rápida
create index on documents
using hnsw (embedding vector_cosine_ops);
-- Insertar un fragmento con su vector
insert into documents (content, metadata, embedding)
values (
'La política permite devoluciones en 30 días...',
'{"source": "politicas.pdf", "page": 4}'::jsonb,
'[0.23, -0.15, 0.87, ...]'::vector
);
-- Buscar los 5 fragmentos más similares
select content, metadata,
1 - (embedding <=> query_vector) as similarity
from documents
order by embedding <=> query_vector
limit 5;
El operador <=> calcula distancia coseno. Ordenar por esa distancia te da los fragmentos más similares.
✅ Quick Check: ¿Qué ventaja tiene la búsqueda híbrida (keyword + semántica) sobre la búsqueda puramente semántica? (La búsqueda semántica encuentra conceptos similares, pero puede fallar con términos técnicos exactos — un número de póliza, un código de producto, un nombre propio. La búsqueda por keywords los encuentra exactamente. Combinando ambas, capturas tanto la intención semántica como los términos específicos.)
Indexación: Por qué HNSW importa
Sin índice, buscar el vector más similar en 1 millón de vectores requiere calcular 1 millón de distancias. Eso toma segundos — inaceptable para una aplicación en tiempo real.
HNSW (Hierarchical Navigable Small World) organiza los vectores en capas de grafos:
Capa 3 (pocos nodos): A ——— B
/ \
Capa 2: C — A — D — B
/ \ / \ / \ / \
Capa 1: E-C-F-A-G-D-H-B-I
...muchos nodos...
Capa 0 (todos): todos los vectores
La búsqueda empieza arriba (pocos nodos, saltos grandes) y baja (más nodos, saltos finos). Resultado: O(log n) en vez de O(n).
En la práctica:
- 1M vectores sin índice: ~2-5 segundos por consulta
- 1M vectores con HNSW: ~5-50 milisegundos por consulta
Configuración del índice en Supabase:
-- HNSW con distancia coseno (la más común para RAG)
create index on documents
using hnsw (embedding vector_cosine_ops)
with (m = 16, ef_construction = 200);
m = 16: Conexiones por nodo (más = más preciso pero más memoria)ef_construction = 200: Calidad de construcción (más = mejor índice pero más tiempo de build)
Búsqueda híbrida: Keywords + Semántica
La búsqueda puramente semántica tiene un punto ciego: términos específicos.
- “Póliza 45892-B” → La semántica no ayuda, necesitas match exacto
- “¿Cómo funciona la cobertura dental?” → La semántica es perfecta aquí
- “Cobertura dental póliza 45892-B” → Necesitas las dos
En Supabase, las combinas en una sola query:
-- Búsqueda híbrida: FTS + vectorial
select content, metadata,
ts_rank(to_tsvector('spanish', content), query) as keyword_score,
1 - (embedding <=> query_embedding) as semantic_score
from documents,
to_tsquery('spanish', 'cobertura & dental') as query
where to_tsvector('spanish', content) @@ query
or (embedding <=> query_embedding) < 0.5
order by (keyword_score * 0.3 + semantic_score * 0.7) desc
limit 5;
El peso 0.3/0.7 entre keywords y semántica es un punto de partida. Ajústalo según tus datos.
Cuándo migrar a una base dedicada
| Señal | Acción |
|---|---|
| < 1M vectores | Supabase pgvector o Chroma |
| 1-50M vectores | Supabase pgvector con pgvectorscale |
| > 50M vectores | Pinecone, Qdrant, o Weaviate |
| Latencia < 10ms requerida bajo alta concurrencia | Pinecone o Qdrant |
| Multi-modelo (texto + imágenes + audio) | Weaviate o Qdrant |
La mayoría de los proyectos nunca pasan de 1 millón de vectores. No te sobre-arquitectes.
Puntos clave
- Supabase pgvector combina datos + vectores + auth en un servicio — ideal para startups y equipos que quieren simplicidad
- Pinecone es más rápido en latencia pura, pero la diferencia es imperceptible para el usuario final en la mayoría de casos
- HNSW reduce tiempos de búsqueda de segundos a milisegundos organizando vectores en grafos jerárquicos
- Búsqueda híbrida (keyword + semántica) captura tanto la intención como los términos específicos — úsala siempre
- No migres a una base dedicada hasta que la evidencia lo exija (>50M vectores, requisitos de latencia extremos)
Siguiente lección
Tienes vectores almacenados e indexados. Ahora la pregunta es: ¿cómo encontrar los fragmentos correctos para cada consulta? En la siguiente lección: estrategias de recuperación avanzadas — reranking, HyDE y reescritura de consultas.
Comprobación de Conocimientos
Primero completa el quiz de arriba
¡Lección completada!