TL, DR
Was ist die anerkannte Best Practice in wissenschaftlichen Rechenkreisen zum Speichern großer Mengen hierarchisch strukturierter Daten? Beispielsweise funktioniert SQL mit großen, spärlichen Matrizen nicht gut. Gibt es ein gutes Tool zum Strukturieren, Lagern und Analysieren dieser Art von Daten? Was machen die Jungs am LHC?
Use-Case-Details
Ich möchte Daten aus Proteinsimulationen nach folgender Hierarchie speichern:
protein
|__simulation conditions
|____|__residues
|____|____|__conformers
|____|____|____|__atoms
Jedes Protein sollte sich seiner Reste bewusst sein, jedes Atom sollte die Bedingungen für seine Simulation usw. kennen und umgekehrt.
Ursprünglich dachte ich, dass eine relationale Datenbank für diese Anwendung perfekt wäre, und schrieb daher ein Programm mit Python und SQLalchemey, das die Daten in einer SQL-Datenbank speichert. In der Praxis funktioniert dieses Programm jedoch nicht so gut.
Das größte Problem betrifft die Tatsache, dass es auf der Ebene der Konformerdaten eine N x N-Matrix gibt, die die potenzielle Energie aufgrund der paarweisen Wechselwirkungen zwischen jedem möglichen Paar von Konformern speichert. Die meisten Einträge in der Matrix sind Nullen, daher speichere ich die Matrix in einer separaten Tabelle in der Datenbank in einem spärlichen Format, eine Zeile pro Eintrag. Leider hat die paarweise Tabelle bei einer Simulation mit mehreren tausend Konformern immer noch mehrere hunderttausend Zeilen und:
a) Erstellt und fragt sehr langsam ab (Stunden)
b) nimmt um eine Größenordnung mehr Platz auf meiner Festplatte ein als eine entsprechende Klartextdarstellung der Daten als nicht-sparsame Matrix
c) nimmt mehr als zehn Gigabyte Speicher in Anspruch, wenn Die Tabelle wird in den Speicher eingelesen
Mein letztendliches Ziel ist es, Zehntausende von Läufen (abgeleitet von Tausenden von Proteinen unter mehreren Dutzend Simulationsbedingungen) in der Datenbank zu speichern, damit sie alle zusammen analysiert werden können. Dies würde bedeuten, dass die Tabelle, die die paarweisen Matrizen darstellt, wahrscheinlich auf ungefähr eine Milliarde Zeilen anwachsen würde. Momentan scheint es so, als würde ich einen Cray oder ein anderes Shared-Memory-Monster brauchen, um überhaupt eine einzelne Abfrage für diese Datenbank durchzuführen.
Habe ich hier bessere Möglichkeiten? Was machen die Jungs am LHC?