web-dev-qa-db-fra.com

Opinions sur NetCDF vs HDF5 pour le stockage de données scientifiques?

Quelqu'un a-t-il suffisamment d'expérience avec NetCDF et HDF5 pour donner quelques avantages/inconvénients à leur sujet comme moyen de stocker des données scientifiques?

J'ai utilisé HDF5 et j'aimerais lire/écrire via Java mais l'interface est essentiellement un wrapper autour des bibliothèques C, ce que j'ai trouvé confus, donc NetCDF semble intrigant mais je ne sais presque rien à propos de ça.

edit: mon application est "seulement" pour l'enregistrement de données, de sorte que j'obtiens un fichier qui a un format auto-descriptif. Les fonctionnalités importantes pour moi sont la possibilité d'ajouter des métadonnées arbitraires, un accès en écriture rapide pour l'ajout à des tableaux d'octets et la simultanéité d'un seul auteur/plusieurs lecteurs (fortement préféré mais pas indispensable. Les documents NetCDF disent qu'ils ont SWMR mais ne le font pas ne dites pas s'ils prennent en charge un mécanisme pour garantir que deux écrivains ne peuvent pas ouvrir le même fichier à la fois avec des résultats désastreux). J'aime l'aspect hiérarchique de HDF5 (en particulier j'aime j'adore la hiérarchie des graphes acycliques dirigés, beaucoup plus flexible qu'une hiérarchie de type système de fichiers "ordinaire" ), je lis les documents NetCDF maintenant ... si cela ne permet qu'un seul ensemble de données par fichier, cela ne fonctionnera probablement pas pour moi. :(

mise à jour - ressemble à NetCDF-Java lit à partir de fichiers netCDF-4 mais écrit uniquement à partir de fichiers netCDF-3 qui ne le font pas soutenir les groupes hiérarchiques. Zut.

mise à jour 2009-juil-14 : Je commence à vraiment me fâcher avec HDF5 en Java. La bibliothèque disponible n'est pas géniale et elle a des obstacles majeurs liés aux couches d'abstraction de Java (types de données composés). Un excellent format de fichier pour C mais on dirait que je viens de perdre. > :(

67
Jason S

Je vous suggère fortement HDF5 au lieu de NetCDF. NetCDF est plat et il devient très sale après un certain temps si vous n'êtes pas en mesure de classer les choses. Bien sûr, la classification est également un sujet de débat, mais au moins vous avez cette flexibilité.

Nous avons effectué une évaluation précise de HDF5 par rapport à NetCDF lorsque j'ai écrit Q5Cost, et le résultat final était pour HDF5 haut la main.

30
Stefano Borini

Je dois admettre que l'utilisation de HDF5 est beaucoup plus facile à long terme. Il n'est pas difficile d'obtenir des structures de données simples au format NetCDF, mais les manipuler sur la route est une sorte de douleur.

Le "H" dans HDF5 signifie "heirarchical", qui s'est traduit (pour moi de toute façon) en un moyen VRAIMENT facile de manipuler les données, en déplaçant simplement les nœuds et en référençant les nœuds d'autres endroits.

Puis-je demander de quel type de projet il s'agit? Je les utilise tous les deux pour de nombreuses tâches de modélisation scientifique HPC. Puis-je supposer que vous faites de même? Si c'est le cas, la tendance que je vois est que les gens passent à HDF5, mais cela pourrait être différent dans votre domaine particulier.

Quoi qu'il en soit, bonne chance!

22
Mike

NetCDF, à partir de la version 4.0 (2008), peut lire et écrire la plupart des fichiers HDF5 et donne accès aux fonctionnalités hiérarchiques de HDF5 via le modèle de données amélioré.

HDF5 est extrêmement riche en fonctionnalités et offre d'excellentes performances.

NetCDF a une API plus simple et une base d'outils beaucoup plus large. Il existe de nombreux outils qui gèrent les données netCDF.

16
Edward Hartnett

Je sais que c'est un article plus ancien, et l'affiche originale a indiqué qu'ils ont évolué, mais pour quiconque se retrouve ici ... la bibliothèque netCDF-Java (à partir du 4.3.13) a un support d'écriture netCDF-4 via le bibliothèque netCDF C. Il est toujours en version bêta, mais cela fonctionne et feedback est certainement apprécié!

Veuillez consulter les documents netCDF-Java référence pour plus de détails.

9
Sean A.

Essayez d'écrire un petit exemple d'application dans chacun et comparez l'expérience. Si l'évolutivité future de votre code à l'exécution parallèle (via MPI ou similaire) est importante pour vous, je sais que HDF a une implémentation parallèle, que les gens travaillent constamment à améliorer. Je suis pas sûr de NetCDF.

Edition tardive: Pour NetCDF, il y a maintenant Parallel NetCDF d'Argonne. Cela fonctionne assez bien et l'équipe de développement est très active pour l'améliorer davantage.

8
Phil Miller

1) La bibliothèque Netcdf-4 C est une couche au-dessus de la bibliothèque HDF-5 C. L'API est considérée comme plus simple que la bibliothèque HDF5, mais au final, vous avez à peu près les mêmes fonctionnalités. Netcdf ne prend pas en charge les graphiques, contrairement à HDF5. En fait, HDF n'empêche pas les cycles dans votre graphique je pense.

2) le groupe HDF possède une API Java au-dessus de la bibliothèque HDF-5 C.

3) Unidata possède la bibliothèque Netcdf-Java qui est du pur Java, mais ne peut lire que HDF-5.

6
John Caron