2012-01-25 16 views
8

Estoy desarrollando un paquete de software de simulación Monte Carlo que involucra múltiples físicos y simuladores. Necesito hacer análisis en línea, rastrear la dependencia de datos derivados en datos brutos y realizar consultas como "darme las formas de onda para temperatura> 400 y posición cerca (x0, y0)". Entonces, el modelo de datos en memoria es bastante complicado.Persistencia de datos de datos de simulación científica, Mongodb + HDF5?

La aplicación está escrita en Python, con cada resultado de simulación modelado como un objeto de Python. En cada hora produce ~ 100 resultados (objetos). La mayoría de los objetos tienen datos pesados ​​(varios MB de matriz numérica binaria), así como algunos datos de luz (temperatura, posición, etc.). La tasa de generación de datos totales es de varios GB por hora.

Necesito alguna solución de persistencia de datos, y una API de consulta fácil de usar. Ya he decidido almacenar los datos pesados ​​(matriz numérica) en almacenamiento (s) HDF5. Estoy considerando usar MongoDB en cuanto a la persistencia de objetos (solo datos ligeros) y para indexar los datos pesados ​​en HDF5. La persistencia de objetos con MongoDB es sencilla, y la interfaz de consulta parece suficientemente poderosa.

Conozco la opción sqlalchemy + sqlite. Sin embargo, la transmisión de datos pesados ​​a HDF5 no parece ser compatible de forma natural en SqlAlchemy, y un esquema fijo es engorroso.

Conozco esta publicación ( Searching a HDF5 dataset), pero la "tabla de índice" en sí necesita algunos índices en la memoria para consultas rápidas.

Me pregunto si hay alguna solución alternativa que deba tener en cuenta antes de saltar. ¿O hay algún problema que he pasado por alto en mi plan?

TIA.

Respuesta

0

¿Has mirado Vistrails?

+0

Muchas gracias por el puntero. Revisé el documento de Vistrails. La impresión que tengo es que VisTrail es perfecto para el post-procesamiento y la creación de gráficos. Supongo que mi aplicación es más específica para un problema y necesita –

+0

para ocultar muchos detalles de análisis del usuario. Estoy leyendo su código fuente y veo cómo se almacenan los datos en VisTrail, espero poder aprender algo de ellos. VisTrail es una impresionante pieza de software, desearía tenerla como estudiante graduado. Gracias. –

3

Algunas cosas que debe saber acerca de Mongo que podrían ser relevantes para la situación que describes y por qué podría ser un buen ajuste:

tengo que hacer el análisis en línea, seguimiento de la dependencia de los datos derivados de crudo datos, y realizar consultas como "darme las formas de onda para temperatura> 400 y posición cerca (x0, y0)".

Mongo tiene un lenguaje de consulta flexible que hace que sea muy fácil hacer consultas como esta. Los índices geoespaciales (2D) también son compatibles. Además, si necesita realizar consultas sobre la posición y la temperatura con mucha frecuencia, puede crear un índice compuesto (temperatura, posición) y esto garantizará que la consulta siempre tenga un buen rendimiento.

La mayoría de los objetos tienen datos pesados ​​(varios MB de matriz numérica binaria), así como algunos datos de luz (temperatura, posición, etc.).

Cada documento en MongoDB puede almacenar hasta 16 MB de datos, y también se apoya un tipo de campo binario - por lo que sería relativamente fácil de incrustar unos pocos megas de binario en un campo, y recuperarlo mediante la consulta de otra campos en los datos. Si espera necesitar más de 16 MB, también puede usar la API GridFS de mongodb, que le permite almacenar arbitrariamente grandes cantidades de datos binarios en el disco y recuperarlos rápidamente.

La tasa de generación de datos totales es de varios GB por hora.

Para un rápido crecimiento de grandes cantidades de datos, ajuste de este tipo, se puede crear una configuración fragmentada que le permitirá agregar servidores para acomodar el tamaño no importa lo grande que puede conseguir.

+0

Necesitamos HDF5 por sus bonitas funciones de almacenamiento de matrices numéricas, p. fragmentación, IO parcial, compatibilidad con MPI, compresión con pérdida y sin pérdida, etc. Pretendemos utilizar HDF5 como el almacenamiento permanente, que es un esquema relativamente fijo, mientras usamos Mongodb como índice cuando se ejecuta la aplicación. El algoritmo estadístico en la aplicación puede cambiar a menudo, por lo que reconstruiremos el índice Mongodb del almacenamiento HDF5 cada vez que el esquema tenga un cambio significativo. –

Cuestiones relacionadas