40 votes

Évaluation de HDF5: Quelles sont les limitations / fonctionnalités fournies par HDF5 pour la modélisation des données?

Nous sommes dans l'évaluation des nouvelles technologies que nous allons utiliser pour stocker les données que nous avons recueillies lors de l'analyse de code C/C++. Dans le cas de C++, la quantité de données peut être relativement importante, ~20 mo par TU.

Après la lecture de ce qui suit AFIN de répondre , il m'a fait envisager que HDF5 pourrait être une technologie appropriée pour l'utiliser. Je me demandais si des gens ici pourrait m'aider à répondre à quelques questions que j'ai:

  1. Les performances. L'utilisation générale pour les données seront écrire une fois et lire les "plusieurs" fois, semblable à la durée de vie d'une '.o' fichier généré par un compilateur. Comment HDF5 comparer à l'aide de quelque chose comme un DB SQLite? C'est que même une comparaison raisonnable à faire?

  2. Au fil du temps, nous allons ajouter les informations qui nous sont le stockage, mais n'ont pas forcément envie de re-distribuer un tout nouveau jeu de "lecteurs" à l'appui d'un nouveau format. Après la lecture du guide de l'utilisateur-je comprendre que HDF5 est similaire à XML ou d'un DB, en ce que l'information est associée à une balise/colonne et donc un outil intégré pour lire une ancienne structure va simplement ignorer les champs qu'il n'est pas concerné avec? Est ma compréhension sur ce correct?

  3. Une partie importante de l'information que l'on souhaite écrire une arborescence type de structure: champ d'application de la hiérarchie, la hiérarchie des types de etc. Idéalement, nous aurions modèle étendues comme avoir des parents, des enfants, etc. Est-il possible d'avoir un HDF5 objet "point" à l'autre? Si non, est-il une norme technique pour résoudre ce problème à l'aide de HDF5? Ou, comme il est requis dans une DB, n'avons-nous besoin d'une clé unique qui serait "lien" un objet à l'autre avec des recherches appropriées lors de la recherche pour les données?

Merci beaucoup!

23voto

Jason S Points 58434

Comment HDF5 comparer à l'aide de quelque chose comme un DB SQLite? C'est que même une comparaison raisonnable à faire?

Sorte de semblable, mais pas vraiment. Ils sont à la fois des fichiers structurés. SQLite a des caractéristiques à l'appui de requêtes de base de données à l'aide de SQL. HDF5 a des fonctionnalités pour prendre en charge de grands ensembles de données scientifiques.

Ils sont tous les deux destinés à être de haute performance.

Au fil du temps, nous allons ajouter les informations qui nous sont le stockage, mais n'ont pas forcément envie de re-distribuer un tout nouveau jeu de "lecteurs" à l'appui d'un nouveau format.

Si vous stockez des données sous une forme structurée, les types de données de ces structures sont également stockés dans la HDF5 fichier. Je suis un peu rouillé comment cela fonctionne (par exemple, si elle comprend innée compatibilité descendante), mais je sais que si la conception de votre "lecteur" correctement, il devrait être capable de gérer les types qui sont modifiés dans l'avenir.

Est-il possible d'avoir un HDF5 objet "point" à l'autre?

Absolument! Vous aurez envie d'utiliser des attributs. Chaque objet a un ou plusieurs chaînes de caractères décrivant le chemin pour atteindre cet objet. HDF5 groupes sont analogues aux dossiers/répertoires, sauf que les dossiers/répertoires sont hiérarchiques = un chemin d'accès unique décrit chacun son emplacement (dans les systèmes de fichiers w/o des liens en dur au moins), tandis que des groupes forme d'un graphe orienté qui peuvent inclure des cycles. Je ne suis pas sûr de savoir si vous pouvez stocker un "pointeur" vers un objet directement comme un attribut, mais vous pouvez toujours stocker un absolu/relatif chemin comme un attribut de chaîne. (ou n'importe où ailleurs comme une chaîne de caractères; vous pourriez avoir des tables de recherche à gogo si vous voulez.)

9voto

Jon Ericson Points 9703

Nous produisons HDF5 données sur mon projet, mais je ne les traitent pas directement en général. Je peux prendre un coup de couteau à la première des deux questions:

  1. Nous utilisons un write once, read many fois le modèle et le format semble gérer ce bien. Je sais un projet que l'habitude d'écrire à la fois sur une Oracle base de données et HDF5. Finalement, ils ont enlevé l'Oracle de sortie puisque les performances souffert et que personne n'était à l'utiliser. Évidemment, SQLite n'est pas Oracle, mais le format HDF5 était mieux adapté à la tâche. Basé sur un point de données, un SGBD peut-être mieux à l'écoute pour de multiples insertions et mises à jour.

  2. Les lecteurs de nos clients utilisent sont robustes lorsque nous ajoutons de nouveaux types de données. Certains de ces changements sont prévus, mais nous n'avons pas à vous soucier de casser chose lors de l'ajout de plusieurs champs de données. Notre DBA a récemment écrit un programme en Python pour lire HDF5 de données et de remplir des fichiers KMZ pour la visualisation dans Google Earth. Puisque c'était un projet qu'il a utilisé pour apprendre le langage Python, je dirais qu'il n'est pas difficile de construire des lecteurs.

Sur la troisième question, je vais arc de Jason S de la connaissance supérieure.

Je dirais HDF5 est tout à fait raisonnable, surtout si vous êtes déjà intéressé à elle ou d'un plan pour produire quelque chose pour la communauté scientifique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X