Hierarchisches Datenformat. Was sind die Vorteile gegenüber alternativen Formaten?

28

Was sind die Hauptvorteile beim Speichern von Daten in HDF? Und was sind die wichtigsten datenwissenschaftlichen Aufgaben, bei denen HDF wirklich geeignet und nützlich ist?

IharS
quelle

Antworten:

25

Vielleicht ist eine gute Möglichkeit, die Frage zu paraphrasieren, welche Vorteile es gegenüber alternativen Formaten gibt.

Die Hauptalternativen sind, denke ich, eine Datenbank, Textdateien oder ein anderes gepacktes / binäres Format.

Bei den zu berücksichtigenden Datenbankoptionen handelt es sich wahrscheinlich um einen Spaltenspeicher oder NoSQL oder um kleine, in sich geschlossene SQLite-Datasets. Der Hauptvorteil der Datenbank ist die Fähigkeit, mit Daten zu arbeiten, die viel größer als der Arbeitsspeicher sind, zufälligen oder indizierten Zugriff zu haben und Daten schnell hinzuzufügen / anzufügen / zu ändern. Der größte * Nachteil * ist, dass es viel langsamer als HDF ist, wenn Probleme auftreten, bei denen der gesamte Datensatz eingelesen und verarbeitet werden muss. Ein weiterer Nachteil besteht darin, dass eine Datenbank mit Ausnahme eingebetteter Datenbanken wie SQLite ein System ist (das Verwaltung, Einrichtung, Wartung usw. erfordert) und keinen einfachen, eigenständigen Datenspeicher.

Die Optionen für das Textdateiformat sind XML / JSON / CSV. Sie sind plattform- / sprach- / toolkitübergreifend und aufgrund der Fähigkeit, sich selbst zu beschreiben (oder offensichtlich zu sein :) ein gutes Archivierungsformat. Wenn sie nicht komprimiert sind, sind sie riesig (10x-100x HDF), aber wenn sie komprimiert sind, können sie relativ platzsparend sein (komprimiertes XML entspricht in etwa HDF). Der Hauptnachteil ist auch hier die Geschwindigkeit: Das Parsen von Text ist sehr viel langsamer als HDF.

Die anderen Binärformate (npy / npz numpy-Dateien, blz blaze-Dateien, Protokollpuffer, Avro, ...) haben ähnliche Eigenschaften wie HDF, werden jedoch weniger häufig unterstützt (möglicherweise nur auf eine Plattform beschränkt: numpy) und möglicherweise spezifische andere Einschränkungen haben. Sie bieten in der Regel keinen zwingenden Vorteil.

HDF ist eine gute Ergänzung zu Datenbanken. Es kann sinnvoll sein, eine Abfrage auszuführen, um ein etwa speichergroßes Dataset zu erstellen, und es dann in HDF zwischenzuspeichern, wenn dieselben Daten mehr als einmal verwendet würden. Wenn Sie einen Datensatz haben, der repariert und normalerweise als Ganzes verarbeitet wird, ist es keine schlechte Option, ihn als Sammlung von HDF-Dateien mit geeigneter Größe zu speichern. Wenn Sie einen Datensatz haben, der häufig aktualisiert wird, kann es dennoch hilfreich sein, einige davon regelmäßig als HDF-Dateien zu speichern.

Zusammenfassend ist HDF ein gutes Format für Daten, die in der Regel als Ganzes gelesen (oder geschrieben) werden. Aufgrund der umfassenden Unterstützung und Kompatibilität ist es das Lingua-Franca-Format oder das häufig verwendete / bevorzugte Austauschformat für viele Anwendungen. Es ist als Archivierungsformat anständig und sehr schnell.

PS Um diesen praktischen Kontext zu verdeutlichen, benötigte mein jüngster Vergleich von HDF mit Alternativen für ein bestimmtes kleines (viel weniger als speichergroßes) Dataset 2 Sekunden, um es als HDF zu lesen (und das meiste davon ist wahrscheinlich ein Overhead von Pandas). ~ 1 Minute zum Lesen von JSON; und 1 Stunde , um in die Datenbank zu schreiben. Sicherlich könnte das Schreiben der Datenbank beschleunigt werden, aber Sie sollten einen guten DBA haben! So funktioniert es sofort.

Alex ich
quelle
Können wir sagen, dass HDF ein Spaltenspeicherformat ist ? Ich bin mit beiden nicht besonders vertraut, aber die HDF-Beispiele, mit denen ich gearbeitet habe, scheinen externe Merkmale der spaltenbasierten Datenaggregation zu präsentieren.
Félix Gagnon-Grenier
Sowohl Datenbanken als auch HDF bieten "die Möglichkeit, mit Daten zu arbeiten, die viel größer als der Arbeitsspeicher sind", daher halte ich es nicht für richtig, zu sagen, dass dies ein Vorteil von Datenbanken gegenüber HDF ist, da (was sie "partielle E / A" nennen) ein Kernfeature davis.lbl.gov/Manuals/HDF5-1.8.7/UG/12_Dataspaces.html
David LeBauer
11

Ein Vorteil ist die breite Unterstützung - C, Java, Perl, Python und R verfügen alle über HDF5-Bindungen.

Ein weiterer Vorteil ist die Geschwindigkeit. Ich habe es noch nie als Benchmark gesehen, aber HDF soll schneller sein als SQL-Datenbanken.

Ich verstehe, dass es sehr gut ist, wenn es sowohl mit großen Mengen wissenschaftlicher Daten als auch mit Zeitreihendaten verwendet wird - Netzwerküberwachung, Nutzungsverfolgung usw.

Ich glaube nicht, dass es eine Größenbeschränkung für HDF-Dateien gibt (obwohl die Betriebssystembeschränkungen weiterhin gelten würden.

Steve Kallestad
quelle
5
Aus persönlicher Erfahrung würde ich hinzufügen, dass die eingebaute Dokumentation / das Etikett riesig ist. Jetzt können alle meine Datensätze mit expliziten Aufzeichnungen über
Herkunft, Abtasthäufigkeit