TL, DR
Qual è la migliore pratica accettata nei circoli di informatica scientifica per l'archiviazione di grandi quantità di dati strutturati gerarchicamente? Ad esempio, SQL non funziona bene con matrici sparse di grandi dimensioni. Esiste un buon strumento per strutturare, archiviare e analizzare questo tipo di dati? Cosa usano i ragazzi dell'LHC?
Usa i dettagli del caso
Voglio archiviare i dati dalle simulazioni proteiche secondo la seguente gerarchia:
protein
|__simulation conditions
|____|__residues
|____|____|__conformers
|____|____|____|__atoms
Ogni proteina dovrebbe essere a conoscenza di ciascuno dei suoi residui, ogni atomo dovrebbe conoscere le condizioni utilizzate per la sua simulazione, ecc. E viceversa.
Inizialmente ho pensato che un database relazionale sarebbe stato perfetto per questa applicazione, e quindi ho scritto un programma usando python e sqlalchemey che memorizza i dati in un database SQL. In pratica, tuttavia, questo programma non funziona così bene.
Il problema maggiore riguarda il fatto che esiste una matrice N x N a livello di dati conforme che immagazzina l'energia potenziale a causa delle interazioni a coppie tra ogni possibile coppia di conformatori. La maggior parte delle voci nella matrice sono zeri, quindi sto memorizzando la matrice in una tabella separata nel database in una sorta di formato sparse, una riga per voce. Sfortunatamente, per una simulazione che coinvolge diverse migliaia di conformatori la tabella a coppie finisce ancora con diverse centinaia di migliaia di righe e:
a) crea e interroga molto lentamente (ore)
b) occupa un ordine di grandezza più spazio sul mio disco rigido rispetto a una rappresentazione in testo normale equivalente dei dati poiché una matrice non sparsa
c) occupa più di dieci gigabyte di memoria quando la tabella viene letta in memoria
Il mio obiettivo finale è archiviare decine di migliaia di esecuzioni (derivate da migliaia di proteine in diverse dozzine di condizioni di simulazione) nel database in modo che possano essere analizzate tutte insieme. Ciò significherebbe che la tabella che rappresenta le matrici a coppie probabilmente crescerebbe fino a circa un miliardo di righe. Attualmente sembra che avrò bisogno di un Cray o di qualche altro mostro a memoria condivisa per eseguire anche una singola query su questo database.
Ho delle opzioni migliori qui? Cosa usano i ragazzi dell'LHC?