Saltar al contenido
← Volver al perfil

Go · tiempo real

Un backend de restaurante sin ORM

Salón y cocina sobre el mismo estado de comanda, con SQL escrito a mano y sin sondeo.

Periodo
2025 —
Rol
Diseño e implementación
Stack
Go · Gin · sqlx · PostgreSQL · PL/pgSQL · WebSockets · React 19 · Vite
Prueba
mozaicopro.djasoft.net.pe ↗

01 Contexto

Mozaico lleva el salón, la cocina y la caja de un restaurante. Una comanda cambia de estado muchas veces en pocos minutos —tomada, lanzada, lista, servida, cobrada— y cada uno de esos cambios tiene que aparecer en una pantalla distinta, en otra sala, sin que nadie recargue nada.

02 Problema

El patrón por defecto —un ORM más sondeo— falla por las dos puntas. El ORM esconde el coste de la consulta justo donde el coste importa, y sondear cada pocos segundos multiplica la carga sin mejorar la rapidez con la que la cocina se entera.

03 Restricciones

  • El estado de una comanda no puede quedar a medias. Entra entero o no entra.
  • Las pantallas de cocina son dispositivos modestos, y a menudo sobre wifi compartido.
  • Salón y cocina no pueden divergir ni un segundo: eso es un plato equivocado.

04 Decisiones

01

sqlx sobre SQL escrito a mano

El SQL vive junto a la consulta que sirve, así que lo que se lee es lo que se ejecuta. En los caminos calientes esa es la diferencia entre afinar una consulta y adivinar qué generó el ORM.

DescartadoUn ORM completo. Regala velocidad en la primera pantalla CRUD y la cobra en cada consulta que importa después.

02

PL/pgSQL para lo que no se puede partir

Las operaciones que tienen que ser atómicas viven como funciones en PostgreSQL, junto a los datos, en vez de como una transacción cosida en el código de la aplicación.

03

WebSockets en vez de sondeo

El estado viaja a las pantallas de salón y cocina por gorilla/websocket, así que un plato marcado como listo aparece donde hace falta sin recargar y sin sondear.

DescartadoSondear cada pocos segundos: más carga, más batería en las tabletas, y aun así un retraso que la cocina nota.

Cómo funciona
  1. Cambia la comandatableta de salón
  2. Go · sqlxSQL escrito a mano
  3. PL/pgSQLatómico, junto al dato
  4. WebSocketcocina lo ve, sin sondeo

05 Resultado

  • Es el repositorio con más commits que he escrito.
  • Un plato marcado como listo aparece donde hace falta sin recargar y sin sondear.
  • Aquí no hay cifras de latencia a propósito: el sistema está en producción pero no instrumentado para medirla, y una cifra que no puedo explicar cómo medí es peor que ninguna cifra.

06 Prueba

Todo lo anterior se puede ver aquí: mozaicopro.djasoft.net.pe ↗

← Volver al perfil