Las bases de datos vectoriales son el componente de almacenamiento en cualquier sistema RAG. La elección afecta la latencia de búsqueda, el coste operativo, la complejidad de infraestructura y las capacidades de filtrado.
Las opciones principales
Pinecone: la opción gestionada sin fricción
Pinecone es un servicio completamente gestionado. No hay infraestructura que gestionar: creas un índice, insertas vectores, buscas. Es la opción más rápida para llegar a producción.
Pros: setup de 5 minutos, alta disponibilidad garantizada, escalado automático, buena documentación.
Contras: coste elevado a escala (el plan gratuito es muy limitado), sin control sobre la infraestructura, vendor lock-in significativo.
Mejor para: startups que priorizan velocidad de desarrollo sobre coste, equipos sin experiencia en infraestructura de bases de datos.
Qdrant: la opción open-source más madura
Qdrant es open-source, tiene cliente en Rust (lo que lo hace muy rápido), y tiene un excelente soporte para filtrado combinado con búsqueda vectorial.
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams
client = QdrantClient(url="http://localhost:6333")
client.create_collection(
collection_name="documentos",
vectors_config=VectorParams(size=1536, distance=Distance.COSINE),
)
client.upsert(
collection_name="documentos",
points=[
{"id": 1, "vector": embedding, "payload": {"texto": "...", "categoria": "legal"}}
]
)
resultados = client.search(
collection_name="documentos",
query_vector=query_embedding,
query_filter={"must": [{"key": "categoria", "match": {"value": "legal"}}]},
limit=5
)
Pros: open-source, muy rápido, excelente filtrado, SaaS gestionado disponible, buena documentación.
Contras: requiere gestionar el deployment si es self-hosted.
Mejor para: equipos que quieren control sobre la infraestructura y buen rendimiento.
pgvector: cuando ya tienes PostgreSQL
pgvector es una extensión de PostgreSQL que añade tipos de datos y operadores vectoriales. Si tu aplicación ya usa PostgreSQL, puedes tener búsqueda vectorial en la misma base de datos sin infraestructura adicional.
-- Instalar extensión
CREATE EXTENSION vector;
-- Crear tabla con columna vectorial
CREATE TABLE documentos (
id SERIAL PRIMARY KEY,
contenido TEXT,
embedding vector(1536)
);
-- Buscar los 5 documentos más similares
SELECT id, contenido, 1 - (embedding <=> '[0.1, 0.2, ...]') AS similaridad
FROM documentos
ORDER BY embedding <=> '[0.1, 0.2, ...]'
LIMIT 5;
Pros: sin infraestructura adicional, transacciones ACID, datos y vectores en el mismo sistema, sin coste extra.
Contras: rendimiento vectorial inferior a bases de datos especializadas para colecciones muy grandes (>10M vectores), menos funciones de búsqueda avanzada.
Mejor para: proyectos con colecciones pequeñas-medianas (<1M vectores) que ya usan PostgreSQL.
Weaviate: para RAG con schema semántico
Weaviate tiene un enfoque distinto: define clases de objetos con propiedades, y la búsqueda vectorial se combina con queries sobre esas propiedades de forma nativa.
Mejor para: proyectos donde el modelo de datos es complejo y necesitas combinar búsqueda vectorial con queries estructuradas complejas.
La decisión rápida
| Situación | Recomendación |
|---|---|
| Prototipo rápido, sin gestionar infra | Pinecone o Weaviate Cloud |
| Ya uso PostgreSQL, colección <1M docs | pgvector |
| Producción con control total y buen rendimiento | Qdrant self-hosted |
| Búsqueda híbrida (semántica + keyword) | Weaviate |
Fuentes: Benchmarks publicados por los propios proyectos, ANN Benchmarks, experiencia de equipos en producción documentada en posts técnicos.