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?
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.
fuente
Vea si TextMaster Data Editor PRO podría serle de alguna ayuda. http://exnp.com/TM/
fuente