Hace unas semanas me pasó un marrón considerable. Fui a sacar dinero al cajero y úna vez puestos mis 400 euros, el cajero me dió un error y suspendió la transacción. Así que como yo quería mi dinero volví a repetirlo todo y esta vez si obtuve m dinero.
Cual es mi sorpresa cuando miro en la APP que había sacado dinero dos veces.
Seguido de un sudor frio y un ahora qué
Empecé a imaginarme tener que llamar a mi banco, al cajero, a mi cuenta de Reino Unido, a ver como explico yo que estaba diciendo la verdad y nada más que la verdad. Joder 400 euros, es una pasta eh. Y no tengo testigo. A ver si le da mi dinero al segundo que llegue... overthinking
Y al llegar a casa y llamar al banco, me dicen que todo esta bien y que ese dinero esta en mi cuenta.
Pero, sennorita, que yo lo he visto con mis ojos. Y ella, pues vuelve a mirar. Tachán ahí estaba.
Acaso he entrado en un agujero del tiempo del camino del banco. Nota mental - Dark y Rick y Morty me están afectando seriamente.
Pues no, tiene pinta que ha sido tema MVCC. Y aquí ya hay que ponerse un poco nerd.
Qué es el MVCC
El control de concurrencia mediante versiones múltiples (Multiversion concurrency control o MVCC) es un método para control de acceso generalmente usado por SGBDs para proporcionar acceso concurrente a los datos, y en lenguajes de programación para implementar concurrencia.
Para que sirve el Multiversion concurrency control
Pues para que no pasen errores como el mio. Yo pedí sacar un dinero y seguramente hubo un timeout en medio de la query. Al usar el banco de otra sucursal en mi app salió como que ya había cogido ese dinero. Entonces miré en la app, y mi dinero había desaparecido. Más tarde el cajero del banco mandaría un código de error como que no se había completado la transacción. Así que la base de datos de mi banco volvió al estado anterior, es decir no completó esa transacción.
Mmmmmm todo tiene sentido ahora. Y oye, esto es bastante importe porque estas cosas pueden pasar varias veces al día.
Cómo funciona el control de concurrencia mediante versiones múltiples
La verdad, es que el tema es un poco complicado de explicar con palabras, así que lo mejor es tirar de diagramas. Dejo aquí un artículo que lo explica muy bien.
En que bases de datos se puede dar el MVCC