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?