Módulo 2: Cómo funcionan Vector Databases (Conceptual)

Cápsula 03: Indexing Algorithms - Overview

🎯 Objetivo de la cápsula

Entender POR QUÉ indexing algorithms (HNSW, IVF, PQ) logran búsqueda O(log n) vs brute force O(n), y CUÁNDO usar cada algoritmo según trade-offs.

Al finalizar esta cápsula:

  • ✅ Explicarás diferencia entre brute force O(n) y indexing O(log n)
  • ✅ Compararás HNSW, IVF, PQ (accuracy, speed, memory)
  • ✅ Decidirás cuál algoritmo usar según requisitos de tu RAG system

Tiempo estimado: 8-10 minutos


🧮 Problema: Brute Force O(n) no escala

¿Qué es brute force search?

Definición: Calcular similitud entre query y TODOS los vectores en database, luego ordenar y devolver top-k.

Código conceptual:

def brute_force_search(query, database, k=10):
    similarities = []
    for vector in database:  # ❌ Itera TODOS los vectores
        sim = cosine_similarity(query, vector)
        similarities.append((sim, vector))
    
    # Ordenar y devolver top-k
    similarities.sort(reverse=True)
    return similarities[:k]

Complejidad: O(n) donde n = número de vectores en database.

¿Por qué es problema en RAG?

Escenario típico de RAG production:

  • Database: 1,000,000 vectores (documentación de producto)
  • Vector dimension: 1536 (OpenAI text-embedding-3-small)
  • Requisito: Latencia < 500ms para chatbot

Benchmark brute force con numpy:

VectoresLatency (numpy)¿Cumple requisito?
10K15 ms✅ Si
100K150 ms✅ Si
500K750 ms❌ No (>500ms)
1M1500 ms❌ No (3x límite)
10M15000 ms❌ No (30x límite)

Conclusión: Brute force falla en >100K vectores con requisito <500ms.

¿Solución? Indexing algorithms que evitan comparar con TODOS los vectores.


🎯 Solución: Indexing Algorithms

¿Qué es indexing?

Definición: Construir estructura de datos especializada que organiza vectores de forma que búsqueda sea O(log n) o mejor.

Analogía:

Sin índice (brute force):

  • Como buscar nombre en lista telefónica desordenada
  • Debes leer TODAS las páginas (O(n))

Con índice (HNSW, IVF):

  • Como buscar en lista telefónica ordenada alfabéticamente
  • Saltas a sección correcta directamente (O(log n))

Principales algoritmos de indexing

AlgoritmoTipoComplejidadUsado por
HNSWGrafo navegable jerárquicoO(log n)ChromaDB, Weaviate, Qdrant
IVFClustering (k-means)O(sqrt(n))Faiss, Milvus
PQCompresión de vectoresO(n) compressedFaiss, Milvus (addon)
ScaNNLearned quantizationO(log n)Google Research
NSWGrafo navegable (no jerárquico)O(n^(1/2))Predecessor de HNSW

En esta guía nos enfocamos en: HNSW, IVF, PQ (los más usados en production).


🔍 Algoritmo 1: HNSW (Hierarchical Navigable Small World)

¿Qué es?

Definición: Grafo navegable organizado en capas jerárquicas, donde navegas desde capa superior (saltos largos) a capa inferior (saltos cortos).

Cómo funciona (conceptual)

Analogía: Sistema de autopistas

  • Capa superior (autopistas): Pocos nodos, saltos largos (100 km)
  • Capa media (carreteras): Más nodos, saltos medianos (10 km)
  • Capa inferior (calles): Todos los nodos, saltos cortos (1 km)

Navegación:

  1. Empiezas en capa superior (autopista)
  2. Bajas a capa media cuando estás cerca
  3. Bajas a capa inferior para precisión final

Ventaja: No visitas todos los nodos (O(log n) en lugar de O(n)).

Trade-offs

Ventajas:

  • Alta accuracy: 95-99% (casi perfecto)
  • Latencia baja: 10-20ms para 1M vectores
  • Incremental updates: Puedes agregar vectores uno a uno

Desventajas:

  • Memoria alta: 4-8 GB para 1M vectores (1536-dim)
  • Build time lento: 5-10 min para 1M vectores

Usado por

  • ChromaDB (default)
  • Weaviate
  • Qdrant
  • Milvus (opción)

Cuándo usar HNSW

Usa HNSW cuando:

  • ✅ Accuracy es crítica (>95% requerido)
  • ✅ Tienes RAM suficiente (4-8 GB por 1M vectores)
  • ✅ Latencia debe ser <50ms
  • ✅ Dataset crece incrementalmente (no batch)

Ejemplo RAG: Customer support chatbot (accuracy crítica, <100K vectores, latencia <500ms).


🗂️ Algoritmo 2: IVF (Inverted File Index)

¿Qué es?

Definición: Divide vectores en clusters usando k-means, luego busca solo en clusters más cercanos al query.

Cómo funciona (conceptual)

Analogía: Biblioteca organizada por categorías

  • Step 1: Agrupa libros en categorías (ciencia, historia, ficción) → Clustering
  • Step 2: Cuando buscas libro de ciencia, solo buscas en estante de ciencia (no todos) → Query en subset

Búsqueda:

  1. Encuentra cluster más cercano al query (usando centroids)
  2. Busca solo dentro de ese cluster
  3. Devuelve top-k resultados

Ventaja: Buscas en 1-10 clusters (no en 1M vectores).

Trade-offs

Ventajas:

  • Memoria menor: 1-2 GB para 1M vectores (vs 4-8 GB HNSW)
  • Build time rápido: 2-3 min para 1M vectores
  • Bueno para batch updates: Rebuild clusters periódicamente

Desventajas:

  • Accuracy menor: 90-95% (vs 98% HNSW)
  • Latencia mayor con pocos clusters: 30-50ms
  • Requiere tuning: Número de clusters (nlist) afecta mucho

Usado por

  • Faiss (Facebook AI Research)
  • Milvus (opción)

Cuándo usar IVF

Usa IVF cuando:

  • ✅ Tienes >1M vectores (IVF escala mejor que HNSW)
  • ✅ Accuracy 90-95% es aceptable
  • ✅ Memoria es limitada (< 4 GB disponible)
  • ✅ Batch updates (rebuild clusters cada día)

Ejemplo RAG: E-commerce search (1M+ productos, accuracy 90% OK, batch updates nocturnos).


📦 Algoritmo 3: PQ (Product Quantization)

¿Qué es?

Definición: Comprime vectores dividiendo en sub-vectores y reemplazando con códigos (codebook), reduciendo memoria 4-8x.

Cómo funciona (conceptual)

Analogía: Compresión de imágenes (JPEG)

  • Original: Imagen sin comprimir (10 MB)
  • Comprimida: Imagen JPEG (1 MB)
  • Trade-off: Calidad ligeramente menor

Para vectores:

  • Original: Vector de 1536 dims (6 KB)
  • Comprimido: Vector de 384 dims (1.5 KB)
  • Trade-off: Accuracy 85-90% (vs 100% original)

Proceso:

  1. Divide vector en sub-vectores (1536 dims → 8 sub-vectores de 192 dims)
  2. Encuentra centroid más cercano para cada sub-vector (codebook)
  3. Reemplaza sub-vector con código (8 bits en lugar de 768 bytes)

Trade-offs

Ventajas:

  • Memoria 4-8x menor: 500 MB para 1M vectores (vs 4 GB HNSW)
  • Latencia aceptable: 20-40ms
  • Económico: Puedes tener 10M+ vectores en RAM

Desventajas:

  • Accuracy menor: 85-90% (vs 98% HNSW)
  • Build time lento: Calcular codebook tarda tiempo
  • Requiere tuning: Número de sub-vectores afecta accuracy

Usado por

  • Faiss (IVF + PQ combinado)
  • Milvus (PQ addon)

Cuándo usar PQ

Usa PQ cuando:

  • ✅ Tienes >5M vectores y RAM limitado
  • ✅ Accuracy 85-90% es suficiente
  • ✅ Costo de memoria es crítico
  • ✅ Puedes tolerar latencia 30-50ms

Ejemplo RAG: Knowledge base interno (10M documentos, accuracy 85% OK, RAM limitado).


📊 Comparación: HNSW vs IVF vs PQ

Tabla comparativa

DimensiónHNSWIVFPQ
ComplejidadO(log n)O(sqrt(n))O(n) compressed
Accuracy95-99%90-95%85-90%
Latencia (1M vecs)15-20 ms30-50 ms20-40 ms
Memoria (1M vecs)4-8 GB1-2 GB0.5-1 GB
Build time (1M vecs)5-10 min2-3 min10-15 min
Incremental updates✅ Sí❌ No (rebuild)❌ No (rebuild)
Usado porChromaDB, WeaviateFaiss, MilvusFaiss, Milvus

Visualización de trade-offs

Accuracy vs Memory

High Accuracy (98%) ┤  HNSW
                    │    │
                    │    │
Medium Accuracy     │      IVF
(93%)               │        │
                    │        │
Low Accuracy (88%)  │          PQ
                    │
                    └──────────────────
                      Low ← Memory → High
                      0.5GB  2GB  8GB

¿Cuál elegir?

Decision tree:

¿Accuracy > 95% requerida?
│
├─ Sí → HNSW
│       (ChromaDB, Weaviate)
│
└─ No → ¿Memoria limitada?
        │
        ├─ Sí → PQ
        │       (Faiss IVF+PQ)
        │
        └─ No → ¿>1M vectores?
                │
                ├─ Sí → IVF
                │       (Faiss, Milvus)
                │
                └─ No → HNSW
                        (ChromaDB)

🏭 Algoritmo 4: ScaNN (Bonus)

¿Qué es?

ScaNN (Scalable Nearest Neighbors) es algoritmo de Google Research que usa learned quantization + anisotropic vector quantization.

Trade-offs

Ventajas:

  • ✅ Accuracy similar a HNSW (97-99%)
  • ✅ Latencia 2-3x mejor que HNSW con >5M vectores
  • ✅ Memoria comparable a HNSW

Desventajas:

  • ❌ Complejidad de implementación alta
  • ❌ Requiere TensorFlow (no standalone)
  • ❌ Build time muy lento (research-grade)

Usado por

  • Google Vertex AI Matching Engine
  • Research projects (no mainstream en OSS)

Recomendación: Para AI Engineer, enfócate en HNSW/IVF/PQ. ScaNN es para casos edge.


✅ Checklist de comprensión

Verifica que entendiste esta cápsula:

  • ¿Por qué brute force O(n) no escala?

    • Respuesta: Con 1M vectores tarda 1500ms. Requisito típico es <500ms. No cumple.
  • ¿Qué es indexing?

    • Respuesta: Construir estructura de datos (grafo, clusters, codebook) para búsqueda O(log n) vs O(n).
  • ¿Cuál es trade-off de HNSW vs IVF?

    • Respuesta: HNSW = mayor accuracy (98%) + más memoria (8 GB). IVF = menor accuracy (93%) + menos memoria (2 GB).
  • ¿Cuándo usar PQ?

    • Respuesta: Cuando tienes >5M vectores, RAM limitado, y accuracy 85-90% es suficiente.
  • ¿Cuál algoritmo usa ChromaDB?

    • Respuesta: HNSW (default). Alta accuracy, buena latencia, setup simple.

Si respondiste 4-5/5 correctamente → ✅ Listo para Cápsula 04 (HNSW profundo)


🔗 Conexión con RAG

¿Cómo esto ayuda en RAG?

Elegir vector database según algoritmo

Escenario A: MVP de RAG (10K documentos)

  • Algoritmo: HNSW (ChromaDB)
  • Razón: Alta accuracy, setup simple, suficiente memoria
  • Latencia: <20ms

Escenario B: Production RAG (1M documentos)

  • Algoritmo: HNSW (Pinecone, Weaviate)
  • Razón: Accuracy crítica, managed service escala automáticamente
  • Latencia: <50ms

Escenario C: Massive RAG (10M documentos, budget limitado)

  • Algoritmo: IVF + PQ (Faiss self-hosted)
  • Razón: Memoria limitada, accuracy 90% OK
  • Latencia: <100ms (aceptable para batch)

Debuggear accuracy issues

Problema: "Mi RAG devuelve resultados irrelevantes."

Diagnóstico con conocimiento de algoritmos:

  1. Verificar accuracy del índice:
    • HNSW → 98% accuracy esperado
    • IVF → 93% accuracy esperado
    • PQ → 88% accuracy esperado
  2. Si accuracy es lower than expected → Problema de embeddings (no indexing)
  3. Si accuracy es expected → Problema de prompt/chunking

🚀 Siguiente paso

En cápsula 03 viste overview de algoritmos. Ahora profundizaremos en HNSW (el más usado).

Próxima cápsula: 04 - HNSW (Hierarchical Navigable Small World)

Aprenderás:

  • Cómo funciona grafo navegable jerárquico (conceptual)
  • Por qué es O(log n) (navegación vs visita completa)
  • Parámetros clave (efConstruction, M)
  • Por qué ChromaDB usa HNSW

Clave: Entenderás arquitectura de HNSW suficientemente para configurar y debuggear (sin implementar desde cero).


Tiempo de lectura: 8-10 minutos
Siguiente: 04-hnsw-profundo.md