Hola, soy Tom, y quiero hablar sobre la representación de datos que no coinciden. Así que digamos que estás representando una página web. Y tal vez estés usando componentes del servidor, tal vez sea un componente del cliente que está haciendo SSR, tal vez estés de vuelta en el mundo de PHP o Python o Perl o Ruby, y necesitas obtener algunos datos.
Probablemente los obtendrás de una base de datos. Y entonces lanzas tu primera consulta SQL, que es un select para obtener todos los usuarios que están en un canal de chat dado, y luego lanzas otra consulta SQL para obtener todos los mensajes en ese canal. Y ahora tienes los datos que necesitas. Puedes simplemente representar esta cosa.
Esto es discourse o mi favorito, Zulip. Y en el centro, tenemos un montón de mensajes en un canal de chat y a la derecha, tenemos los usuarios que están en ese canal de chat. Pero con suerte, con esa primera descripción del problema, tu mente fue a, ah, pero ¿están esas dos consultas SQL en la misma transacción? ¿Son como aquí? ¿Estas son dos consultas que se ejecutan en transacciones separadas o están en la misma transacción? Esa es información importante para nosotros porque nos dice qué podemos hacer con esos datos.
¿Qué pasa si primero lees tus usuarios y luego se agrega un nuevo usuario al canal y ellos también publican un mensaje y luego lees tus mensajes? Estos agregar un usuario y agregar un mensaje podrían ser una acción atómica que podría suceder juntos. Podría ser un mensaje de unión o algo así. Y si los leemos así, leemos usuarios y luego leemos mensajes, y asumimos que cada mensaje tiene un usuario correspondiente, vamos a estar decepcionados. Este es uno de esos casos donde, bueno, veamos. ¿Qué podría pasar? Tal vez sea solo una inconsistencia visual. Tal vez todo lo que sucede es que ves esta página y dices, oh, eso es curioso. Hay una persona aquí, pero no hay nadie correspondiente en esa cosa de usuarios. A menudo no importa. Y a menudo lo que haces, lo que nuestros usuarios están entrenados para hacer es actualizar la página.
Para bien o para mal, así es como siempre ha funcionado la web. Como, uh-oh. Tal vez es eventualmente consistente. Actualizas y todo está mejor. Pero tal vez esa inconsistencia visual es un gran problema. Tal vez esa es la diferencia entre pensar que tengo mis boletos de Taylor-Tomlinson y no tengo mis boletos de Taylor-Tomlinson. Tal vez veo algo, es una compra, y algo me confunde allí y realmente me preocupo como usuario. Pero tal vez no son dos interfaces de usuario separadas. Tal vez es una interfaz de usuario y tengo código que espera ambas piezas de datos. Estoy asumiendo que cada mensaje tiene un usuario correspondiente, y de lo que trata esta charla es que es tu trabajo saber si esos datos podrían ser inconsistentes.
Comments