[Py-MAD] Presentación "Persistencia en Python"

lasizoillo lasizoillo at gmail.com
Thu Feb 26 21:49:24 CET 2015


El día 26 de febrero de 2015, 13:29, Jesus Cea <jcea at jcea.es> escribió:
> On 26/02/15 13:17, piranna at gmail.com wrote:
>> Lo de la clase base y lo de las instancias ghost parecen lo mas
>> eficiente, pero tienes que heredar de ella. ¿No se puede hacer que sea
>> de forma transparente para _todos_ los objetos de forma que si se va
>> la luz puedas continuar por donde estabas sin inmutarte? ¿Algo que
>> permita (al menos virtualmente) separar la linea de separacion entre
>> datos en RAM y datos en disco como propone el modelo de memoria del
>> proyecto The Machine de HP? Todos los objetos en Python tienen un id
>> unico que se podria usar de identificador, y tuneandolo incluso entre
>> maquinas distintas haciendo una especie de memoria distribuida...
>
> En cualquier paso tendrías que modificar tu programa para que trabaje
> con transacciones.
>
> Si no lo haces así tienes el problema bastante más complejo de que el
> programa "arranque" exactamente en la misma posición ensamblador en la
> que se fue la luz. Esto no es trivial, aunque en su momento había
> proyectos interesantes basados en proteger la memoria para hacer una
> especie de "copy on write". Yo he usado tecnología de esta hace muchos
> años, en C. Persistía TODO: la memoria y el estado del proceso. Bastante
> espectacular. Había problemas con los descritores de ficheros y los
> sockets. En general es problemático mantener el estado de todo lo que
> está en la frontera del proceso en sí. Supón, por ejemplo, que quieres
> persistir dos procesos que están conectados con una PIPE.
>
> He usado estas tecnología para cosas como "checkpointing" de grandes
> trabajos de cálculo, pero no es la bala de plata para todo.
>
> Si tu programa usa transacciones no necesitas recuperar el estado
> completo del proceso. Solo su memoria. Infinitamente más sencillo.
>
> Además, manejar transacciones te facilita la recuperación ante errores
> en medio de una operación. Si te salta una excepción en medio de una
> transacción, simplemente haces un "rollback" de los cambio y todo queda
> estable y bonito.

DISCLAIMER: No he ido a la charla y allí igual si que se ha tratado.

Siempre queda un problema que te he visto comentar en otras charlas
sobre el mismo tema: El tiempo. Y no me refiero a que llueva, sino a
recuperar un dato que era válido cuando se persistió, pero no es
valido en la recuperación del sistema.

Metiendo lógica temporal[1] todo esto de la persistencia se complica.
De todas formas sigue teniendo validez para muchas aplicaciones.

[1] http://es.wikipedia.org/wiki/L%C3%B3gica_temporal

Un abrazo,

Javi


More information about the Madrid mailing list