Las mentiras que su base de datos podría estar diciéndole

Infoworld

Recientemente, el CTO de Lightbend, Jonas Boner, ha estado dando una presentación en la que ataca el modelo general utilizado por la mayoría de los sistemas de base de datos.

Él apunta a CRUD o el modelo ACID utilizado para lograr CRUD. Estas críticas son poco inusuales, sin embargo, el argumento de Boner fue extraordinariamente brillante.

Empezó con la contabilidad de doble entrada, que nació en el siglo VII y todavía impregna cada negocio importante en el mundo.

Alternativas más simples rara vez se consideran, debido a que las desventajas son demasiado grandes. La premisa básica de la contabilidad de doble entrada es que no se puede cambiar el pasado, sólo corregir el presente.

Los desarrolladores de bases de datos, sin embargo, pensaban que lo conocían más, por eso crearon el software equivalente a una máquina del tiempo: La instrucción de actualización y su horrible primo la instrucción de borrado. Para ser justos, cuando se inventaron esas declaraciones, un disco duro de 5MB tuvo que ser cargado con una forklift, por lo que las demás estructuras no eran necesariamente factibles.

Le recomendamos: ¿Cómo Grupo GTD logró su certificación Tier III?

Los desarrolladores de bases de datos que tenían aquellas grandes nociones deben haberse perdido algunos de los mejores peores episodios de “Star Trek”, donde se enteran de que el viaje en el tiempo es una mala idea. Con las actualizaciones, se obtiene el control de concurrencia, transacciones mutex y otras construcciones que tratan de mitigar los efectos negativos de intentar modificar el mismo estado mientras se trata con más de una cosa al mismo tiempo.

Ahora, hay una alternativa: “sólo inserte” estructuras. El problema con ellos es que nunca tendrá una “visión consistente” de los datos. Boner afirma que esto está bien, porque la vista consistente no es nada más que una ficción conveniente que usted ha creado inconvenientemente a expensas de la adición de más latencia para su sistema operativo.

De acuerdo con Boner, no sólo el tiempo es una ilusión, el presente también lo es. Parece absurdo, ¿verdad? Ahora es el presente.

Sin embargo, en el momento en que llegamos al final de esa frase para verificar lo que se lee, ya deja de ser tan cierto.

Si trata de mantenerse mentalmente en el presente en más de un sentido general, puede encontrar que no es posible porque el presente no es más que un puntero que está siempre en movimiento.

Cuando llegamos al nivel de grandes conjuntos de datos, la determinación de los totales “en este momento” es por lo menos laboriosa en una estructura de sólo inserción.

El “presente local” es un conjunto de “hechos derivados de pasados múltiples simultáneos”. Es decir, si nos fijamos en todos los estados que “fueron” generados en el sistema hasta “ahora”, se puede llegar a una conclusión en cuanto al estado o el valor de ahora.

Mientras tanto, cuando intenta descubrir este estado “del presente”, es posible que usted no tenga toda la información. De hecho, usted encontrará que Donald Rumsfeld podría tener una visión para usted.

No sólo ha conocido incógnitas, pero hay incógnitas desconocidas. ¿Por qué? La información tiene latencia. Hay hechos que todavía no tiene. Incluso cuando tratamos y forzamos una visión coherente del mundo, hacemos las cosas más latentes en otro lugar y nuestro sistema operativo es menos concurrente y de menor escala.

Le podría interesar: La pesadilla de TI nace cuando los servidores se desconectan

¿Cómo podemos hacerle frente a la inconsistencia de información e incluso a la pérdida de información en el “mundo real?” Deducimos de contexto y nosotros tratamos de confirmar, esperar y repetir las operaciones de los nuevos datos vinientes. Al igual que con la contabilidad de doble entrada, tratamos de tomar una “acción de compensación” para tener en cuenta los tiempos que están equivocados.

De acuerdo con Boner, el camino a seguir es tratar el tiempo como un primer mundo en lugar de construir un elemento implícito no modelado.

Para hacer eso, no se puede ir dando vueltas para “cambiar las cosas”, sólo se puede insertar o acabar con CRUD a favor de sólo el CR. En otras palabras, hacemos registros o “hechos” inmutables. Esto, obviamente, va todo desde el extremo frontal del sistema hasta el almacenamiento.

Una explicación popular de transacciones es la que utiliza la cuenta bancaria. Suponiendo que tengo una cuenta bancaria y usted tiene una cuenta bancaria y quiero transferirle dinero a usted, abrimos una buena transacción (que bloquea ambas cuentas) y sustraemos dinero de mi cuenta y lo agregamos a la suya. Si no tengo suficiente dinero la transacción se deshace.

Si su cuenta no puede recibir el dinero, se deshace la transacción. Esto nos permite saber exactamente la cantidad de dinero que tenemos en nuestras cuentas bancarias en cualquier momento dado.

El único problema con esta analogía es que ningún sistema bancario ha trabajado de esta manera. ¿Qué utilizan los bancos? Utilizan créditos, débitos y transacciones de compensación. Hay intercambios financieros “en vuelo”, que se encuentran en diversos estados de finalización. Si algo malo sucede, el banco toma la acción de compensación. Incluso con un banco, la respuesta a la pregunta “¿Cuánto dinero tengo en mi cuenta en este momento?”. Es un tipo de ficción dicha para que los clientes se sientan mejor.

La idea de Boners es definir los “límites de consistencia” que describen el tiempo, lugar y circunstancias en las que la respuesta que damos es correcta. Fuera de esos límites es el caos. Esto empieza a parecerse mucho más a la física que a la computación, pero eso es un enfoque más honesto.

Dicho esto, tenemos un largo camino por recorrer antes de que el negocio y los desarrolladores lleguen a un acuerdo con la cantidad de mentiras que hacen para lograr una falsa sensación de simplicidad.

La idea de una “consistencia fuerte” es arraigada en la mente de muchos. Es decir, hace poco tuve un cliente diseñando un registro de auditoría que requiere actualizaciones.

Leave a comment

Send a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *