Capítulo 5 — Base de Datos Vectorial (BDV)
El cierre del capítulo 3 ya anticipó la decisión: los embeddings dejarán de generarse a partir del esquema de la base de datos y pasarán a generarse a partir de las descripciones de los recursos. El capítulo 4, por su parte, ha establecido el lenguaje arquitectónico necesario para implementarlo — bounded contexts, eventos de dominio, proyecciones event-driven. Este capítulo es donde ambas piezas se juntan.
El objetivo concreto es construir dwall-module-embeddings: un nuevo bounded context dentro del backend Java que escucha los eventos de los recursos de DWall, genera el vector correspondiente vía Gemini y lo persiste en PostgreSQL con pgvector. El módulo sustituye al sistema FAISS + Python del prototipo, pero el cambio relevante no es de infraestructura sino de enfoque: la búsqueda semántica deja de operar sobre la estructura técnica de la base de datos y pasa a operar sobre el significado de negocio de cada recurso.
Como en cualquier diseño no trivial, el camino no fue lineal. Algunas decisiones se mantuvieron desde el inicio — el uso de pgvector frente a una base de datos vectorial dedicada, o la integración como un módulo Maven más del backend. Otras evolucionaron a medida que el módulo crecía: el reparto en ocho tablas por tipo de entidad en lugar de una tabla central, la disyuntiva entre escuchar eventos nativos del recurso o eventos de descripción, la deduplicación de llamadas a Gemini, o la unificación —y posterior reversión— de un único EmbeddingService genérico. Esas tensiones se irán explicando en su sitio.
Estructura del capítulo
| Sección | Contenido |
|---|---|
| 01 -- Qué son los embeddings | Concepto: vector, espacio semántico, búsqueda por significado |
| 02 -- Análisis del sistema actual | El prototipo FAISS y por qué no escala |
| 03 -- Diseño del esquema en pgvector | Tablas por entidad, vistas de contexto, ACL en SQL |
| 04 -- Embeddings - Integridad y asincroniedad | Triggers, generators, deduplicación, doble llamada |
| 05 -- Embeddings - Capa de aplicación | Listener, generator, text builder, router descripciones |
| 06 -- Búsqueda semántica | Endpoint, Criteria, taskType, filtro semántico |
| 07 -- Testing y evaluación de rendimiento | Trade-offs reales del diseño |
| 08-- Cierre del capítulo | Balance y puente hacia SPR |