[Python-es] Almacenado de datos

Inigo Aldazabal Mensa inigo_aldazabal en ehu.es
Lun Mar 5 12:00:26 CET 2012


El Jueves, 1 de Marzo de 2012 a las 22:12,  Daπid escribió:
> He estado analizando las respuestas y repensando algunas cuestiones de
> base. En primer lugar, reespecificando el problema:
>
> -Por cada evento tengo que registrar unas tres o cuatro variables
> independientes (depende del tipo que sea), los parámetros que yo fijo
> al hacer la simulación: n, p, z.
>
> -En cada caso, guardaré cinco medidas de cada evento, los resultados
> de mi simulación: C, L, S, M, Mbarra.
>
> El total es la ristra (n, p, z, C, L, S, M, Mb)
>
> Mi objetivo es recuperar de la forma más sencilla posible, todos los
> valores de M para cada n fijado z (por ejemplo).
>
> Hacer esto en Numpy se me va a volver molesto porque el número de
> parámetros es más elevado.

¿Eso no se puede hacer fácil con máscaras? Aunque no se mucho de eso la 
verdad:

In [42]: a
Out[42]:
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [ 4,  1,  1,  1]])

In [43]: a[a[:,0]==4.,:]
Out[43]:
array([[4, 5, 6, 7],
       [4, 1, 1, 1]])


>
>
> Además, he conseguido acceso a un grid de ordenadores en la
> universidad, lo que supone dos cambios:
>
> - El número de datos que voy a manejar va a ser mucho mayor. Quizá los
> ficheros de texto se vayan quedando fuera.

Sigo pensando que no tendrás mucho problemas con ficheros por ejemplo de 
decenas de megas.

> - Dado que mi problema es embarazosamente paralelizable, voy a tener
> cuatro programas corriendo en el mismo ordenador, y una decena de
> ordenadores en total. Una de dos, o mi base de datos admite varios
> accesos de escritura a la vez (pyTables dice que no muy bien). La
> pregunta ahora es: ¿pueden ser fusionadas varias bases de datos
> fácilmente? Esto es algo que no he sabido encontrar en la
> documentación de ninguna de las opciones.

Si lo vas a lanzar a un cluster o grid con ascii lo tienes chupado, al 
menos tal como cuentas: cada proceso escribe su fichero (con su nombre 
concreto distinto al resto, claro) y al terminar los trabajos recopilas 
todos los ficheros que puedes pegar directamente. Si soy pesado con esto 
es porque me parece que es la forma mas sencilla de hacerlo, a no ser que 
sepas con seguridad que vas a tener limitaciones. Puedes hacer pruebas 
generando archivos fictícios antes de decidir.

Si vas a lanzar los programas con cada core/proceso corriendo el monte 
carlo con distintos parámetros, te puede ser útil el módulo Parallel 
Python http://www.parallelpython.com/. Yo lo he usado precisamente para 
cálculos así. Si haces que a tu programa de cálculo le puedas pasar los 
parámetros por línea de comandos simplemente haces un bucle sobre los 
parámetros que te interesen y Parallel Python los va lanzando a medida que 
acaban, tipo sistema de colas. El programa que ejecuta parallel pyhton 
llamando a tu propio programa lo puedes mandar a colas sin problemas, y en 
este caso también es fácil recoger los resultados si lo diriges 
directamente a stdout. Es mucho mas fácil que tener que implementar tu 
todo con MPI por ejemplo.

En su web hay ejemplos, y si te interesa te puedo pasar algo de lo que 
hice.

Iñigo

>
>
> Nótese que del tema soy un absoluto desconocedor, así que no sé si lo
> que estoy pidiendo es demasiado o lo mínimo para una BD. Tampoco sé
> cómo se llaman las cosas que quiero hacer, así que me es difícil
> encontrar las palabras clave por las que buscar.
>
>
> Muchas gracias a todos.
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/




Más información sobre la lista de distribución Python-es