Módulo 4: Búsqueda por Proximidad
6. Trade-offs y Decisiones: Elegir el Índice Correcto
Descripción
Aquí consolidas todo lo visto en el módulo: cómo decidir entre búsqueda exacta vs aproximada, cuándo usar HNSW vs IVF, qué parámetros ajustar según tu caso de uso. Esta es la cápsula más práctica del módulo.
Matriz de decisión
| Caso de uso | Tamaño dataset | Latencia requerida | Precisión requerida | Índice recomendado |
|---|---|---|---|---|
| Prototipo/desarrollo | < 10K | No crítica | 100% | Brute force |
| App pequeña | 10K-100K | < 500ms | ~99% | HNSW |
| Producción estándar | 100K-10M | < 100ms | ~99% | HNSW |
| Escala masiva | > 10M | < 100ms | ~95% | IVF o IVF-PQ |
| Uso académico/investigación | Variable | No crítica | 100% | Brute force |
Flujo de decisión
┌─ ¿Dataset < 100K vectores?
│ └─ SÍ → Brute force (simple, rápido para este tamaño)
│ └─ NO → Siguiente pregunta
│
├─ ¿Precisión 100% crítica?
│ └─ SÍ → Brute force (no hay alternativa)
│ └─ NO → Siguiente pregunta
│
├─ ¿Memoria abundante?
│ └─ SÍ → HNSW (mejor precisión, más memoria)
│ └─ NO → IVF o IVF-PQ (menos memoria)
│
└─ ¿Dataset > 100M vectores?
└─ SÍ → IVF-PQ (compresión necesaria)
└─ NO → HNSW (sweet spot para mayoría de casos)
Comparación completa
| Métrica | Brute force | HNSW | IVF | IVF-PQ |
|---|---|---|---|---|
| Precisión | 100% | ~99% | ~95% | ~90% |
| Velocidad (1M) | 1s | 10ms | 20ms | 5ms |
| Memoria | 1x | 2-3x | 1.2x | 0.1x |
| Build time | Ninguno | Horas | Minutos | Minutos |
| Max dataset | ~100K | 10M | 100M | 1B+ |
| Inserciones | Trivial | Costoso | Medio | Medio |
Casos de uso reales
Caso 1: Startup con 50K documentos
Requisitos:
- 50,000 vectores (OpenAI 1536D)
- Latencia < 200ms
- Presupuesto ajustado
Decisión: Brute force o HNSW básico
- Con 50K vectores, brute force es ~50ms → Aceptable
- Si crece a 500K → Migrar a HNSW
Caso 2: Empresa con 5M documentos
Requisitos:
- 5 millones de vectores
- Latencia < 50ms
- Precisión alta (~99%)
Decisión: HNSW
- Configuración: ef_construction=200, M=32, ef_search=100
- Esperado: ~15ms latencia, ~99% precisión
Caso 3: BigCo con 100M documentos
Requisitos:
- 100 millones de vectores
- Latencia < 100ms
- Budget de memoria limitado
Decisión: IVF-PQ
- Configuración: nlist=10000, nprobe=20, PQ compression=8x
- Esperado: ~30ms latencia, ~93% precisión, memoria 8x comprimida
Parámetros por caso de uso
Alta precisión (99%+):
HNSW:
ef_construction = 400
M = 64
ef_search = 200
IVF:
nprobe = 100 (de 1000 clusters)
Balance (95-98% precisión, rápido):
HNSW:
ef_construction = 200
M = 32
ef_search = 100
IVF:
nprobe = 10 (de 1000 clusters)
Máxima velocidad (90-95% precisión):
HNSW:
ef_construction = 100
M = 16
ef_search = 50
IVF:
nprobe = 1 (de 1000 clusters)
Consideraciones adicionales
1. Inserciones frecuentes:
Si agregas vectores constantemente:
- IVF: Más fácil (reasignar a cluster)
- HNSW: Más costoso (rebuild periódico recomendado)
2. Budget de memoria:
Si memoria es limitada:
- IVF-PQ: Compresión 8-16x
- HNSW: Requiere 2-3x memoria base
3. Latencia p99:
Si necesitas latencia consistente (no solo promedio):
- HNSW: Más consistente
- IVF: Puede tener outliers (si query cae en cluster grande)
4. Multi-tenancy:
Si múltiples usuarios comparten índice:
- HNSW: Mejor aislamiento
- IVF: Puede tener contención en clusters populares
Errores comunes
Error 1: Usar brute force con > 100K vectores
Síntoma: Queries lentas (> 500ms)
Solución: Migrar a HNSW o IVF
Error 2: Configurar HNSW demasiado agresivo
Síntoma: Build time de días, memoria excesiva
Solución: Reducir ef_construction y M (balance es mejor)
Error 3: nprobe=1 en IVF con > 1M vectores
Síntoma: Precisión muy baja (~85%)
Solución: Aumentar nprobe a 10-20
Error 4: No rebuild periódico
Síntoma: Precisión degrada con el tiempo (muchas inserciones)
Solución: Rebuild índice cada N inserciones (ej: cada 100K)
Herramientas de benchmarking
ann-benchmarks.com:
- Comparación de múltiples índices
- Datasets públicos
- Gráficos precisión vs velocidad
FAISS benchmarks:
- Tests con diferentes configuraciones IVF
- Datos de Facebook
Vector database benchmarks:
- Pinecone vs Weaviate vs Qdrant
- Latencia p50, p95, p99
Resumen
Puntos clave:
- < 100K: Brute force (simple)
- 100K-10M: HNSW (sweet spot)
- > 10M: IVF o IVF-PQ (escalabilidad)
- Ajustar parámetros: Según precisión vs velocidad requerida
- Monitorear: Latencia, precisión, memoria en producción
Próxima cápsula: 07-capstone-exercise-4.md — Diseñar estrategia de búsqueda para casos de uso.