Módulo 1: Por qué Vector Databases para AI Engineers
Trade-offs: Simplicidad vs Performance vs Costo
Descripción de la cápsula
Toda decisión técnica involucra trade-offs. No existe "la mejor opción" absoluta. Existe "la mejor opción PARA tu contexto".
Esta cápsula te da comparaciones cuantitativas (no solo cualitativas) de numpy vs SQL+pgvector vs Vector DB dedicada. Latency real, memoria real, costo real, tiempo de setup real.
Al final, podrás hacer tu propia matriz de trade-offs y defender tu decisión con datos.
Las 3 dimensiones de trade-off
1. Simplicidad (tiempo de setup + learning curve)
numpy:
pip install numpy
# Listo. 10 segundos.
SQL + pgvector:
# 1. Instalar Postgres (si no lo tienes)
brew install postgresql # Mac: 5-10 min
# O apt-get en Linux, installer en Windows
# 2. Iniciar Postgres
brew services start postgresql
# 3. Instalar pgvector
git clone https://github.com/pgvector/pgvector.git
cd pgvector
make
make install # 5-10 min
# 4. Habilitar extensión
psql -U postgres -c "CREATE EXTENSION vector;"
# Total: 30-45 minutos primera vez
ChromaDB:
pip install chromadb
# Listo. 30 segundos.
Pinecone:
pip install pinecone-client
# Además:
# 1. Crear cuenta en pinecone.io
# 2. Obtener API key
# 3. Crear index (via UI o API)
# 4. Configurar environment
# Total: 15-20 minutos primera vez
2. Performance (latency + throughput)
Benchmark real (1M vectores, 1536D, M1 Pro 16GB):
| Métrica | numpy | pgvector+HNSW | ChromaDB | Pinecone |
|---|---|---|---|---|
| Latency (p50) | 1,500ms | 60ms | 15ms | 8ms |
| Latency (p95) | 1,650ms | 95ms | 25ms | 15ms |
| Throughput | 0.6 QPS | 15 QPS | 50 QPS | 100+ QPS |
| Concurrent users | 1 | 5-10 | 20-50 | 100+ |
Conclusiones:
- numpy: 188x más lento que ChromaDB
- pgvector: 4x más lento que ChromaDB
- ChromaDB: Competitivo con Pinecone para <5M vectores
- Pinecone: Mejor performance para >5M vectores + alta concurrencia
3. Costo ($ por mes)
Benchmark (1M vectores, 100 usuarios, 1000 queries/día):
| Opción | Setup | Monthly | Notas |
|---|---|---|---|
| numpy | $0 | $0 | Requiere server con RAM suficiente |
| pgvector | $0 | $0-50 | Servidor Postgres existente o nuevo |
| ChromaDB self | $0 | $20-100 | Server (DigitalOcean $20/mes, AWS t3.medium $30/mes) |
| Pinecone | $0 | $70-200 | Starter $70, Standard $150, Enterprise $200+ |
Costo oculto: Tiempo de developer:
- numpy: Simple pero requiere optimización manual (1-2 semanas)
- pgvector: Setup moderado + optimización (1 semana)
- ChromaDB: Setup rápido, optimización menor (2-3 días)
- Pinecone: Plug & play, sin optimización (1 día)
ROI calculation:
# Developer cost: $50/hr (junior) a $150/hr (senior)
# numpy optimization: 80 horas × $100/hr = $8,000
# pgvector setup + opt: 40 horas × $100/hr = $4,000
# ChromaDB setup: 16 horas × $100/hr = $1,600
# Pinecone setup: 8 horas × $100/hr = $800
# Pinecone monthly: $150/mes
# ChromaDB monthly: $50/mes (server)
# Break-even Pinecone vs ChromaDB:
# ($8,000 - $1,600) / ($150 - $50) = 64 meses
# Pero... performance Pinecone > ChromaDB para >5M vectores
# Y managed (sin mantenimiento) vale $$
Comparación detallada por dimensión
Latency (ms) según escala
Vectores | numpy | pgvector | ChromaDB | Pinecone
----------|----------|----------|----------|----------
1K | 2ms ✅ | 5ms | 3ms | 4ms
10K | 15ms ✅ | 12ms | 5ms | 5ms
50K | 75ms | 30ms | 8ms ✅ | 7ms ✅
100K | 150ms | 55ms | 12ms ✅ | 9ms ✅
500K | 750ms | 180ms | 20ms ✅ | 12ms ✅
1M | 1,500ms | 350ms | 30ms | 15ms ✅
5M | 7,500ms | 1,800ms | 120ms | 40ms ✅
10M | OOM | 3,600ms | 250ms | 80ms ✅
✅ = Mejor en su categoría
Insight clave:
- numpy: Solo competitivo con <10K vectores
- pgvector: Competitivo con <100K vectores
- ChromaDB: Óptimo para 100K-5M vectores
- Pinecone: Óptimo para >1M vectores (especialmente >5M)
Memoria (GB RAM requerida)
Vectores | numpy | pgvector | ChromaDB | Pinecone
----------|-------|----------|----------|----------
1K | 0.01 | 0.02 | 0.05 | N/A (managed)
10K | 0.06 | 0.12 | 0.15 | N/A
100K | 0.6 | 1.2 | 0.8 | N/A
1M | 6 | 12 | 3 | N/A
5M | 30 | 60 | 12 | N/A
10M | 60 | 120 | 25 | N/A
Nota: pgvector usa más memoria porque mantiene índice + datos originales
ChromaDB comprime con HNSW (menos memoria que brute force)
Insight clave:
- numpy: ~6GB por millón de vectores (todo en RAM)
- pgvector: ~12GB por millón (overhead SQL)
- ChromaDB: ~3GB por millón (HNSW comprimido + disk)
- Pinecone: No relevante (managed, escala automáticamente)
Throughput (queries por segundo, 10 concurrent users)
Vectores | numpy | pgvector | ChromaDB | Pinecone
----------|-------|----------|----------|----------
100K | 6 QPS | 18 QPS | 80 QPS | 100+ QPS
1M | 0.6 | 3 QPS | 30 QPS | 100+ QPS
5M | 0.1 | 0.5 QPS | 8 QPS | 100+ QPS
Nota: numpy colapsa con concurrencia (no thread-safe para writes)
Insight clave:
- numpy: No diseñado para concurrencia (single-threaded effectively)
- pgvector: Moderado (Postgres maneja concurrencia pero con overhead)
- ChromaDB: Bueno (maneja 20-50 usuarios concurrentes)
- Pinecone: Excelente (maneja 100+ usuarios, auto-scaling)
Setup time (primera vez)
Opción | Install | Config | Learn API | Total
---------------|---------|--------|-----------|-------
numpy | 10s | 0 | 1h | ~1h
pgvector | 30min | 15min | 2h | ~3h
ChromaDB | 30s | 5min | 2h | ~2.5h
Pinecone | 1min | 10min | 2h | ~2h
Nota: "Learn API" = tiempo para primer query funcional (no dominio)
Ongoing maintenance (horas/mes)
Opción | Monitoring | Updates | Scaling | Backups | Total
---------------|------------|---------|---------|---------|-------
numpy | 0 | 0 | Manual | Manual | 4-8h
pgvector | 2h | 1h | Manual | Auto | 6-10h
ChromaDB self | 3h | 1h | Manual | Manual | 8-12h
Pinecone | 0 | 0 | Auto | Auto | 0h
Nota: Mantenimiento asumiendo 1M vectores, 100 usuarios
Insight clave:
- numpy: Low maintenance (pero requiere intervención manual para scale)
- pgvector: Moderate (Postgres maintenance)
- ChromaDB self-hosted: Moderate-High (server maintenance + DB)
- Pinecone managed: Zero maintenance ($$$ compra tiempo)
Matriz de decisión final
Scorecard (1-10, 10 = mejor)
| Dimensión | numpy | pgvector | ChromaDB | Pinecone |
|---|---|---|---|---|
| Simplicidad setup | 10 | 4 | 9 | 7 |
| Simplicidad API | 10 | 6 | 8 | 8 |
| Performance (<100K) | 8 | 7 | 9 | 9 |
| Performance (>1M) | 1 | 3 | 7 | 10 |
| Costo (self-hosted) | 10 | 9 | 8 | 0 |
| Costo (managed) | 10 | 8 | 0 | 6 |
| Concurrencia | 2 | 6 | 8 | 10 |
| Features (filter, etc) | 1 | 5 | 9 | 10 |
| Maintenance | 8 | 5 | 5 | 10 |
| Learning curve | 10 | 6 | 7 | 7 |
| TOTAL | 70 | 59 | 70 | 77 |
Interpretación:
- numpy: Excelente para <10K vectores, prototipo, desarrollo (simplicidad gana)
- pgvector: Moderado en todo (compromiso razonable si ya usas Postgres)
- ChromaDB: Excelente balance para 100K-5M vectores, self-hosted
- Pinecone: Mejor performance + zero maintenance (vale $$$ en producción >1M vectores)
Recomendaciones por escenario
Escenario 1: Startup pre-seed (budget $0)
Requisitos: 50K docs, 20 usuarios, <500ms latency
Opción A (más simple): numpy
- Pros: $0 setup, $0 monthly, 75ms latency (aceptable)
- Cons: No escala a >100K, manejo manual
Opción B (más escalable): ChromaDB self-hosted
- Pros: $20/mes (DigitalOcean), 10ms latency, escala a 1M+
- Cons: Requiere server management
Recomendación: ChromaDB (inversión $20/mes vale la pena vs limitaciones numpy)
Escenario 2: Empresa con 1M docs
Requisitos: 1M docs, 500 usuarios, <100ms latency, uptime 99.9%
Opción A: ChromaDB self-hosted
- Pros: $100/mes, 30ms latency, control total
- Cons: Requiere DevOps (1-2 días/mes)
Opción B: Pinecone managed
- Pros: $150/mes, 15ms latency, zero maintenance, auto-scaling
- Cons: +$50/mes vs ChromaDB
Recomendación: Pinecone (diferencia $50/mes << valor de 1-2 días DevOps/mes = $1,600)
Escenario 3: SaaS multi-tenant (10M vectores aggregados)
Requisitos: 100 clientes, 10M vectors total, <50ms latency, 99.99% uptime
Opción A: ChromaDB self-hosted
- Pros: $300-500/mes (cluster), control total
- Cons: High maintenance (4-8 días/mes), 250ms latency con 10M
Opción B: Pinecone enterprise
- Pros: $500-1000/mes, 80ms latency, auto-scaling, SLA
- Cons: Vendor lock-in
Recomendación: Pinecone Enterprise (performance + SLA + zero maintenance críticos para SaaS)
Resumen
Trade-offs clave:
- ✅ Simplicidad: numpy (10s) > ChromaDB (2.5h) > Pinecone (2h) > pgvector (3h)
- ✅ Performance: Pinecone (15ms) > ChromaDB (30ms) > pgvector (350ms) > numpy (1500ms) @ 1M vectores
- ✅ Costo self: numpy ($0) = pgvector ($0) > ChromaDB ($50) >> Pinecone (N/A)
- ✅ Costo managed: ChromaDB (N/A) < Pinecone ($150) << pgvector cloud ($200+)
- ✅ Maintenance: Pinecone (0h) > numpy (4h) > pgvector (8h) = ChromaDB (8h) / mes
Decision framework:
- <10K vectores: numpy (simplicidad)
- 10K-100K: ChromaDB self (balance)
- 100K-1M: ChromaDB self o Pinecone (evaluar budget vs maintenance)
- >1M: Pinecone managed (performance + zero maintenance)
Por qué importa:
- No existe "mejor" absoluto, existe "mejor para TU contexto"
- Trade-offs son cuantitativos (latency, cost, time), no solo cualitativos
- Decisión informada con datos > intuición
Siguiente cápsula: Resumen del módulo completo + transición a Módulo 2 (cómo funcionan vector DBs internamente).
Recursos adicionales
- Vector Database Benchmarks - Performance comparisons
- ChromaDB vs Pinecone - Detailed comparison
- Cost Optimization for AI - Budget considerations
- pgvector Performance Tuning - Optimization guide
- When to Use Managed vs Self-hosted - Decision framework
- ROI Calculator for Vector DBs - Pinecone calculator
Tiempo de lectura: 6-8 minutos
Siguiente: 08-resumen-y-transicion.md