Deja de construir bases de datos
(sqlsync.dev)La complejidad de la gestión de datos
- Los ingenieros de frontend terminan dándose cuenta de que necesitan cachear los datos de la API.
- Al principio empiezan con un almacenamiento de datos simple, pero a medida que aumentan las solicitudes de funciones, terminan implementando caché de datos, índices manuales, mutaciones optimistas (
optimistic mutations) e invalidación recursiva de caché. - Estas funciones se parecen al funcionamiento interno de una base de datos y, en aplicaciones frontend complejas, al final se termina construyendo una base de datos especializada para el dominio.
Lo básico del caché
- Todo empieza guardando los resultados de las solicitudes a la API en variables locales.
- En aplicaciones web que usan frameworks declarativos, los datos se guardan en variables para evitar solicitudes innecesarias a la API.
- El siguiente paso es mover el caché a una capa más alta o fuera del árbol de la UI.
Mejorar la velocidad con índices
- Organizar los datos de cierta manera puede reducir el trabajo de la aplicación y mejorar la experiencia del usuario.
- Se descubre que la optimización de datos en frontend se parece al funcionamiento interno del almacenamiento de una base de datos.
- Se mejora la estructura de datos guardándolos por ID y creando índices para consultar rápidamente elementos por fecha.
Mutaciones optimistas
- Consisten en simular localmente el efecto de una acción específica sin esperar la respuesta del servidor.
- Hacen que la interfaz parezca reaccionar de inmediato, pero si el servidor devuelve un resultado distinto, la UI debe revertir los cambios.
- Hay desafíos como duplicar la lógica entre cliente y servidor, manejar errores asíncronos y reconciliar cambios después de reiniciar la aplicación.
Invalidación recursiva de caché
- Los datos aparecen en varias partes del caché, y después de una actualización es necesario invalidarlo correctamente para que coincida con el servidor.
- La UI necesita saber qué partes del caché están relacionadas con cada mutación, y esto puede volverse frágil a medida que crece la escala.
- Cuando se combina con mutaciones optimistas, se vuelve todavía más difícil duplicar la lógica del servidor para predecir los cambios del lado del cliente.
¿Construyendo una base de datos?
- En aplicaciones frontend con suficiente complejidad, al final se terminan construyendo muchas funciones de gestión de datos, lo que quita tiempo de hacer felices a los usuarios y resolver problemas de negocio.
- Se presenta una alternativa: un stack de base de datos optimizado para frontend.
Presentando SQLSync
- Se desarrolló SQLSync, un stack de base de datos optimizado para frontend basado en SQLite.
- SQLSync está diseñado para resolver los problemas de gestión de datos y permitir que los desarrolladores se concentren en las capacidades únicas de su aplicación.
- SQLSync ofrece caché duradero, toda la funcionalidad de SQLite, mutaciones optimistas, invalidación inteligente de caché y consultas reactivas.
La opinión de GN⁺
Lo más importante de este texto es el fenómeno de que, a medida que aumenta la complejidad de las aplicaciones frontend, los desarrolladores terminan implementando por su cuenta funciones similares a las de una base de datos. Este trabajo consume tiempo y los aleja del desarrollo de funciones que realmente aportan valor a los usuarios. Un stack de base de datos optimizado para frontend como SQLSync propone un enfoque innovador para resolver este problema. Lo interesante de este artículo es que señala un problema de fondo en las formas tradicionales de gestionar datos y busca una nueva solución para que los desarrolladores trabajen de manera más eficiente.
1 comentarios
Opiniones de Hacker News
Entender al amigo creador del proyecto
Experiencia con software de gestión de proyectos en una empresa anterior
Problemas que desaparecen al dejar de usar SPA
Opinión del creador de SQLSync
No darles a los usuarios un modelo mental distinto de la realidad
El principio de que lo medible es lo que se gestiona y la falacia del costo hundido
El problema de sincronizar estado entre cliente y servidor
Comparación con librerías ORM
Diferencia entre bases de datos frontend y backend
Intento similar con SignalDB