Format de données hiérarchique. Quels sont les avantages par rapport aux formats alternatifs?


28

Quels sont les principaux avantages du stockage de données dans HDF? Et quelles sont les principales tâches de science des données où HDF est vraiment adapté et utile?

Réponses:


25

Peut-être un bon moyen de paraphraser la question est, quels sont les avantages par rapport aux formats alternatifs?

Les principales alternatives sont, je pense: une base de données, des fichiers texte ou un autre format compressé / binaire.

Les options de base de données à considérer sont probablement un magasin en colonnes ou NoSQL, ou pour de petits ensembles de données autonomes SQLite. Le principal avantage de la base de données est la possibilité de travailler avec des données beaucoup plus volumineuses que la mémoire, d'avoir un accès aléatoire ou indexé, et d'ajouter / ajouter / modifier des données rapidement. Le principal * inconvénient * est qu'il est beaucoup plus lent que HDF, pour les problèmes dans lesquels l'ensemble de données doit être lu et traité. Un autre inconvénient est que, à l'exception des bases de données de style embarqué comme SQLite, une base de données est un système (nécessitant une administration, une configuration, une maintenance, etc.) plutôt qu'un simple magasin de données autonome.

Les options de format de fichier texte sont XML / JSON / CSV. Ils sont multi-plateforme / langue / boîte à outils, et sont un bon format d'archivage en raison de la capacité à être auto-descriptif (ou évident :). S'ils ne sont pas compressés, ils sont énormes (10x-100x HDF), mais s'ils sont compressés, ils peuvent être assez économes en espace (le XML compressé est à peu près le même que HDF). Le principal inconvénient ici est à nouveau la vitesse: l'analyse du texte est beaucoup, beaucoup plus lente que HDF.

Les autres formats binaires (fichiers numpy npy / npz, fichiers blz blaze, tampons de protocole, Avro, ...) ont des propriétés très similaires à HDF, sauf qu'ils sont moins largement pris en charge (peuvent être limités à une seule plateforme: numpy) et peuvent ont d'autres limitations spécifiques. Ils n'offrent généralement pas un avantage convaincant.

HDF est un bon complément aux bases de données, il peut être judicieux d'exécuter une requête pour produire un ensemble de données de taille approximative en mémoire, puis de le mettre en cache dans HDF si les mêmes données sont utilisées plus d'une fois. Si vous avez un ensemble de données qui est fixe et généralement traité dans son ensemble, le stocker en tant que collection de fichiers HDF de taille appropriée n'est pas une mauvaise option. Si vous avez un jeu de données qui est mis à jour souvent, il peut être utile de le mettre en scène périodiquement sous forme de fichiers HDF.

Pour résumer, HDF est un bon format pour les données qui sont lues (ou écrites) généralement dans leur ensemble; c'est le lingua franca ou le format d'échange commun / préféré pour de nombreuses applications en raison de son large support et de sa compatibilité, décent comme format d'archivage et très rapide.

PS Pour donner à ce contexte pratique, ma plus récente expérience en comparant HDF à des alternatives, un certain petit ensemble de données (beaucoup moins que de la taille de la mémoire) a pris 2 secondes pour être lu en HDF (et la plupart de cela est probablement une surcharge de Pandas); ~ 1 minute pour lire à partir de JSON; et 1 heure pour écrire dans la base de données. Certes, l'écriture de la base de données pourrait être accélérée, mais vous feriez mieux d'avoir un bon DBA! Voici comment cela fonctionne hors de la boîte.


Peut-on dire que HDF est un format de stockage en colonnes? Je ne suis pas trop compétent dans ces deux cas, mais les échantillons HDF avec lesquels j'ai travaillé semblent présenter des caractéristiques externes d'agrégation de données basées sur des colonnes.
Félix Gagnon-Grenier

Les bases de données et HDF offrent «la possibilité de travailler avec des données beaucoup plus volumineuses que la mémoire», donc je ne pense pas qu'il soit exact de dire que c'est un avantage des bases de données par rapport à HDF car (ce qu'ils appellent «E / S partielles» est une fonctionnalité principale davis.lbl.gov/Manuals/HDF5-1.8.7/UG/12_Dataspaces.html
David LeBauer

11

Un des avantages est une large prise en charge - C, Java, Perl, Python et R ont tous des liaisons HDF5.

Un autre avantage est la vitesse. Je ne l'ai jamais vu comparé, mais HDF est censé être plus rapide que les bases de données SQL.

Je comprends qu'il est très bon lorsqu'il est utilisé à la fois avec de grands ensembles de données scientifiques et des données de séries chronologiques - surveillance du réseau, suivi de l'utilisation, etc.

Je ne crois pas qu'il existe une limitation de taille pour les fichiers HDF (bien que les limites du système d'exploitation s'appliquent toujours.


5
Par expérience personnelle, j'ajouterais que la documentation / étiquette intégrée est énorme. Maintenant, tous mes ensembles de données peuvent être stockés avec des enregistrements explicites d'où ils viennent, la fréquence d'échantillonnage, les anomalies, etc. etc.
gallamine

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.