Best Practice zum Speichern hierarchischer Simulationsdaten

13

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?

tel
quelle

Antworten:

12

Erwägen Sie die Verwendung des HDF5- Dateiformats. HDF5 ist ein hierarchisches Datenspeicherformat mit mehreren nützlichen Funktionen:

  • Plattformunabhängiger Speicher: Die Bibliothek kümmert sich für Sie um kleine und große Probleme
  • hierarchisches Layout von Datensätzen: wie ein Dateisystem innerhalb einer Datei
  • großer, anbaubarer n-dimensionaler Array-Speicher
  • gemischte Dataset-Typen können in einer Datei vorhanden sein (dh Ganzzahlen, Gleitkommazahlen usw.)
  • automatische Komprimierung ist verfügbar
  • Binärspeicher
  • Parallele I / O

Es gibt C- und Fortran-Schnittstellen sowie Python- Wrapper ( h5py und pytables ). MATLAB kann auch HDF5 lesen. HDF5 ist ziemlich flexibel, fast fehlerfrei, dh es ist nicht "selbstbeschreibend", daher die Erstellung von XDMF .

Ich bin mir nicht ganz sicher, was Sie unter "für die Simulation verwendeten Bedingungen" verstehen, aber wenn es sich nur um kleine Sammlungen von Parametern handelt, können Sie diese als Attribute speichern .

Matthew Emmett
quelle
3
Zwei-Wege-Verbindungen in HDF5 sind ein wenig schwierig zu warten. Da HDF5-Formate ohnehin auf halbem Weg zu Ihren eigenen Formaten gehören, können Sie auch Metadaten in einer relationalen Datenbank verwalten und die schwereren Daten in separaten Dateien aufbewahren (HDF5, wenn Sie möchten).
Jed Brown
0

Die Verwendung einer Datenbank erleichtert das Organisieren und Auffinden von Simulationsdaten (Suche nach Protein, Suche nach Simulationsparametern). Die Datenbank sollte Ihnen dann mitteilen, wo sich die relevanten Informationen auf der Festplatte befinden. Ich nehme an, dass sie am besten pro Simulationslauf in einem Dateityp gespeichert werden, der für die Analyse am bequemsten zu laden ist (unabhängig davon, ob er benutzerdefiniert ist oder aus welcher Simulationssuite Sie stammen) benutze).

Auf diese Weise können Sie schnell die gewünschten Simulationen finden und haben die Freiheit / Leistung, spärliche Matrizen oder alle Tools zu verwenden, die Sie für eine effiziente Analyse benötigen.

Richmond Newman
quelle
-8

Prüfen Sie, ob TextMaster Data Editor PRO für Sie hilfreich sein könnte. http://exnp.com/TM/

Nina
quelle
2
Nina, willkommen bei SciComp! Können Sie erläutern, warum diese Software hilfreich sein könnte? Bitte geben Sie auch Ihre Zugehörigkeit bekannt. Die Community neigt dazu, Werbung zu missbilligen, ohne umfassendere Beiträge zur Website zu leisten. Einzelheiten finden Sie in diesem Teil der FAQ .
Geoff Oxberry