Hat da draußen jemand genug Erfahrung mit NetCDF und HDF5, um einige Vor- und Nachteile zu nennen, um wissenschaftliche Daten zu speichern?
Ich habe HDF5 verwendet und möchte über Java lesen / schreiben, aber die Benutzeroberfläche ist im Wesentlichen ein Wrapper um die C-Bibliotheken, was ich verwirrend fand. NetCDF scheint faszinierend, aber ich weiß fast nichts darüber.
Bearbeiten: Meine Anwendung ist "nur" für die Datenerfassung vorgesehen, sodass ich eine Datei mit einem selbstbeschreibenden Format erhalte. Wichtige Funktionen für mich sind das Hinzufügen beliebiger Metadaten, der schnelle Schreibzugriff zum Anhängen an Byte-Arrays und die gleichzeitige Verwendung von Einzelschreibern und Mehrfachlesern (stark bevorzugt, aber kein Muss. NetCDF-Dokumente geben an, dass sie über SWMR verfügen, aber nicht Sagen Sie nicht, ob sie einen Mechanismus unterstützen, mit dem sichergestellt wird, dass zwei Autoren nicht dieselbe Datei gleichzeitig öffnen können, was katastrophale Folgen hat. Ich mag die hierarchische Aspekt HDF5 (insbesondere ich liebe die gerichtete azyklische Graph Hierarchie, viel flexibler als ein „normalen“ Dateisystem-ähnliche Hierarchie), bin die NetCDF docs jetzt lesen ... wenn es ein Datensatz erlaubt nur per Datei dann wird es wahrscheinlich nicht für mich funktionieren. :(
update - sieht aus wie NetCDF-Java liest aus netCDF-4-Dateien, schreibt aber nur aus netCDF-3-Dateien, die keine hierarchischen Gruppen unterstützen. verflixt.
Update 2009-Jul-14 : Ich fange an, mich wirklich über HDF5 in Java aufzuregen. Die verfügbare Bibliothek ist nicht so toll und es gibt einige große Stolpersteine, die mit Javas Abstraktionsschichten (zusammengesetzten Datentypen) zu tun haben. Ein großartiges Dateiformat für C, aber es sieht so aus, als hätte ich gerade verloren. > :(
Antworten:
Ich empfehle Ihnen dringend HDF5 anstelle von NetCDF. NetCDF ist flach und wird nach einer Weile sehr schmutzig, wenn Sie nicht in der Lage sind, Dinge zu klassifizieren. Natürlich ist die Klassifizierung auch umstritten, aber zumindest haben Sie diese Flexibilität.
Wir haben eine genaue Bewertung von HDF5 im Vergleich zu NetCDF durchgeführt, als ich Q5Cost schrieb, und das Endergebnis war zweifellos für HDF5.
quelle
Ich muss zugeben, dass die Verwendung von HDF5 auf lange Sicht sehr viel einfacher ist. Es ist nicht schwer, einfache Datenstrukturen in das NetCDF-Format zu bringen, aber sie später zu manipulieren, ist eine Art Schmerz.
Das "H" in HDF5 steht für "heirarchisch", was (für mich jedenfalls) zu einer WIRKLICH einfachen Möglichkeit zur Datenmanipulation führte, indem nur Knoten verschoben und Knoten von anderen Stellen aus referenziert wurden.
Kann ich fragen, was für ein Projekt das ist? Ich verwende beide für viele wissenschaftliche HPC-Modellierungsaufgaben. Kann ich davon ausgehen, dass Sie dasselbe tun? Wenn ja, ist der Trend, den ich sehe, dass Leute zu HDF5 wechseln, aber das könnte in Ihrer speziellen Domäne anders sein.
Wie auch immer Sie gehen, viel Glück!
quelle
NetCDF kann ab Version 4.0 (2008) die meisten HDF5-Dateien lesen und schreiben und bietet über das erweiterte Datenmodell Zugriff auf die hierarchischen Funktionen von HDF5.
HDF5 ist äußerst funktionsreich und bietet einige großartige Leistungsmerkmale.
NetCDF verfügt über eine einfachere API und eine viel breitere Toolbasis. Es gibt viele Tools, die mit netCDF-Daten umgehen.
quelle
Ich weiß, dass dies ein älterer Beitrag ist, und das Originalposter hat angegeben, dass sie weitergezogen sind, aber für alle, die hier landen ... Die netCDF-Java-Bibliothek (ab 4.3.13) bietet NetCDF-4-Schreibunterstützung über das netCDF C Bibliothek. Es ist noch in der Beta, aber es funktioniert und Feedback wird auf jeden Fall geschätzt!
Weitere Informationen finden Sie in den netCDF-Java- Referenzdokumenten .
quelle
Versuchen Sie, jeweils eine kleine Beispielanwendung zu schreiben, und vergleichen Sie die Erfahrungen. Wenn Ihnen die zukünftige Skalierbarkeit Ihres Codes für die parallele Ausführung (über MPI oder ähnliches) wichtig ist, weiß ich, dass HDF eine parallele Implementierung hat, an deren Verbesserung ständig gearbeitet wird. Ich bin mir bei NetCDF nicht sicher.
Späte Bearbeitung: Für NetCDF gibt es jetzt Parallel NetCDF von Argonne. Es funktioniert ganz gut und das Entwicklungsteam ist sehr aktiv darin, es weiter zu verbessern.
quelle
1) Die Netcdf-4 C-Bibliothek ist eine Schicht über der HDF-5 C-Bibliothek. Die API wird als einfacher als die HDF5-Bibliothek angesehen, aber am Ende haben Sie fast die gleiche Funktionalität. Netcdf unterstützt keine Grafiken, HDF5 jedoch. In der Tat verhindert HDF nicht Zyklen in Ihrem Diagramm, denke ich.
2) Die HDF-Gruppe verfügt über eine Java-API über der HDF-5 C-Bibliothek.
3) Unidata verfügt über eine Netcdf-Java-Bibliothek, die reines Java ist, jedoch nur HDF-5 lesen kann.
quelle
NetCDF, das HDF5 in ein eigenes Datenmodell übersetzt, sieht gut aus und funktioniert hervorragend ... bis Sie feststellen, dass NetCDF keine vorzeichenlosen Werte unterstützt ! Siehe auch meine Frage zum Erkennen von nicht signierten Werten in vorhandenen HDF5-Dateien mithilfe von NetCDF.
Update: Es stellt sich heraus, dass NetCDF-3 zwar keine signierten Werte unterstützt, NetCDF-4 jedoch signierte Werte unterstützt, obwohl die NetCDF-API in Java zur Ermittlung der Signatur etwas kompliziert ist .
quelle