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 usoTamaño datasetLatencia requeridaPrecisión requeridaÍndice recomendado
Prototipo/desarrollo< 10KNo crítica100%Brute force
App pequeña10K-100K< 500ms~99%HNSW
Producción estándar100K-10M< 100ms~99%HNSW
Escala masiva> 10M< 100ms~95%IVF o IVF-PQ
Uso académico/investigaciónVariableNo crítica100%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étricaBrute forceHNSWIVFIVF-PQ
Precisión100%~99%~95%~90%
Velocidad (1M)1s10ms20ms5ms
Memoria1x2-3x1.2x0.1x
Build timeNingunoHorasMinutosMinutos
Max dataset~100K10M100M1B+
InsercionesTrivialCostosoMedioMedio

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.