Rosgan Meili Sync
Worker Python que mantiene el índice de Meilisearch sincronizado con MySQL en tiempo casi real, sin polling agresivo y sin dependencias externas más allá de la propia base de datos.
El problema que resuelve
Rosgan necesita búsqueda full-text de lotes (certificados) con filtros por categoría, provincia, consignatario, raza, peso, precio, y ordenamiento flexible. MySQL no escala bien para eso. Meilisearch sí, pero hay que mantenerlo actualizado cuando cambia cualquier dato relevante de un lote — y un lote está compuesto por datos de ocho tablas distintas.
La solución
flowchart LR
A[MySQL\nTriggers] -->|INSERT IGNORE| B[(meilisearch_sync_queue)]
B -->|cada 10s| C[sync_worker.py]
C -->|upsert / delete| D[Meilisearch]
E[ATRIBUTOS\nupdated_at] -->|chequeo cada ciclo| C
C -->|PUT settings| D
Los triggers en MySQL detectan cualquier cambio en las tablas involucradas y escriben el certificado_id en una cola. El worker drena esa cola en cada ciclo, corre la query completa de lotes y hace upsert en Meilisearch. La tabla de cola es simple: un registro por certificado (PRIMARY KEY), así que si se editan 20 atributos del mismo lote en un segundo, solo se indexa una vez.
Características
- Sin polling de tablas de negocio — los triggers hacen el trabajo sucio
- Deduplicación automática —
INSERT IGNORE+ PK garantizan una sola indexación por lote - Soporte upsert y delete — columna
is_deletedistingue ambos casos - Sync de atributos dinámicos — detecta cambios en
ATRIBUTOS.updated_aty actualiza los settings del índice automáticamente - Dos modos de ejecución — daemon (loop infinito) o cron (una sola pasada)
- Configuración por
.env— cero hardcodeo