La mejor práctica para almacenar datos de simulación jerárquica

13

TL, DR

¿Cuál es la mejor práctica aceptada en los círculos informáticos científicos para almacenar grandes cantidades de datos estructurados jerárquicamente? Por ejemplo, SQL no funciona bien con grandes matrices dispersas. ¿Existe una buena herramienta para estructurar, almacenar y analizar este tipo de datos? ¿Qué usan los chicos del LHC?

Detalles del caso de uso

Quiero almacenar datos de simulaciones de proteínas de acuerdo con la siguiente jerarquía:

protein
  |__simulation conditions
  |____|__residues
  |____|____|__conformers
  |____|____|____|__atoms

Cada proteína debe ser consciente de cada uno de sus residuos, cada átomo debe conocer las condiciones utilizadas para su simulación, etc. y viceversa.

Originalmente pensé que una base de datos relacional sería perfecta para esta aplicación, así que escribí un programa usando python y sqlalchemey que almacena los datos en una base de datos SQL. En la práctica, sin embargo, este programa no funciona tan bien.

El mayor problema se relaciona con el hecho de que hay una matriz N x N en el nivel de datos de conformador que almacena la energía potencial debido a las interacciones por pares entre cada par posible de conformadores. La mayoría de las entradas en la matriz son ceros, por lo que estoy almacenando la matriz en una tabla separada en la base de datos en un tipo de formato disperso, una fila por entrada. Desafortunadamente, para una simulación que involucra varios miles de conformadores, la tabla por pares todavía termina con varios cientos de miles de filas y:

a) construye y consulta muy lentamente (horas)
b) ocupa un orden de magnitud más espacio en mi disco duro que una representación de texto plano equivalente de los datos como una matriz no dispersa
c) ocupa más de diez gigabytes de memoria cuando la tabla se lee en la memoria

Mi objetivo final es almacenar decenas de miles de corridas (derivadas de miles de proteínas en varias docenas de condiciones de simulación) en la base de datos para que todas puedan analizarse juntas. Esto significaría que la tabla que representa las matrices por pares probablemente crecería a alrededor de mil millones de filas. Actualmente parece que voy a necesitar un Cray o algún otro monstruo de memoria compartida para ejecutar incluso una sola consulta en esta base de datos.

¿Tengo mejores opciones aquí? ¿Qué usan los chicos del LHC?

tel
fuente

Respuestas:

12

Considere usar el formato de archivo HDF5 . HDF5 es un formato de almacenamiento de datos jerárquico con varias características interesantes:

  • almacenamiento independiente de la plataforma: la biblioteca se encarga de la poca / gran capacidad para usted
  • diseño jerárquico de conjuntos de datos: como un sistema de archivos dentro de un archivo
  • almacenamiento de matriz n-dimensional grande y ampliable
  • tipos de conjuntos de datos mixtos pueden existir dentro de un archivo (es decir, enteros, flotantes, etc.)
  • la compresión automática está disponible
  • almacenamiento binario
  • E / S paralelas

Hay interfaces C y Fortran, así como envoltorios Python ( h5py y pytables ). MATLAB también puede leer HDF5. HDF5 es bastante flexible, casi como un error, es decir, no se "describe a sí mismo", de ahí la creación de XDMF .

No estoy exactamente seguro de lo que quiere decir con "condiciones utilizadas para su simulación", pero si se trata de pequeñas colecciones de parámetros, podría almacenarlos como atributos .

Matthew Emmett
fuente
3
Los enlaces bidireccionales en HDF5 son un poco difíciles de mantener. Dado que los formatos HDF5 están a mitad de camino para rodar los suyos de todos modos, también podría considerar mantener los metadatos en una base de datos relacional y mantener los datos más pesados ​​en archivos separados (HDF5 si lo desea).
Jed Brown
0

El uso de una base de datos es excelente para ayudarlo a organizar / encontrar datos de simulación (Búsqueda por proteína, búsqueda por parámetros de simulación). La base de datos debería decirle dónde encontrar la información relevante en el disco, donde imagino que es mejor almacenarla por ejecución de simulación en el tipo de archivo que sea más conveniente para cargar para el análisis (ya sea personalizado o desde cualquier suite de simulación que desee). estás usando).

Esto le permitirá encontrar rápidamente las simulaciones que desee y le dará la libertad / rendimiento de usar matrices dispersas o cualquier herramienta que necesite para realizar un análisis eficiente.

Richmond Newman
fuente