Évaluation du HDF5: quelles sont les limites / caractéristiques du HDF5 pour les données de modélisation?
Nous évaluons les technologies que nous utiliserons pour stocker les données que nous recueillons lors de l'analyse du code C/C++. Dans le cas de C++, la quantité de données peut être relativement grande, ~20Mb par TU.
Après avoir lu ce qui suit SO answer il m'a fait considérer que HDF5 pourrait être une technologie appropriée pour nous d'utiliser. Je me demandais si les gens ici pourraient m'aider à répondre à quelques questions initiales que j'ai:
Les Performances. L'utilisation générale pour le les données seront écrites une fois et lues "plusieurs" fois, similaire à la durée de vie d'un '.o' fichier généré par un compilateur. Comment HDF5 se compare-t-il à l'utilisation de quelque chose comme une base de données SQLite? Est-ce même une comparaison raisonnable à faire?
Au fil du temps, nous ajouterons aux informations que nous stockons, mais nous ne voulons pas nécessairement redistribuer un tout nouvel ensemble de "lecteurs" pour prendre en charge un nouveau format. Après avoir lu le guide de l'utilisateur, je comprends que HDF5 est similaire à XML ou à une base de données, dans cette information est associée à une balise / colonne et donc un outil construit pour lire une structure plus ancienne ignorera simplement les champs qui ne l'intéressent pas? Est-ce que ma compréhension à ce sujet est correcte?
Un morceau important de l'information que nous souhaitons écrire sera un type de structure arborescente: hiérarchie de portée, hiérarchie de type, etc. Idéalement, nous modéliserions les étendues comme ayant des parents,des enfants, etc. Est-il possible d'avoir un objet HDF5 "point" à un autre? Si non, est-il un technique standard pour résoudre ce problème en utilisant HDF5? Ou, comme cela est requis dans une base de données, avons-nous besoin d'une clé unique qui "lierait" un objet à un autre avec des recherches appropriées lors de la recherche des données?
Merci beaucoup!
2 réponses
Comment HDF5 se compare-t-il à l'utilisation de quelque chose comme une base de données SQLite? Est-ce même une comparaison raisonnable à faire?
Un peu similaire mais pas vraiment. Ce sont deux fichiers structurés. SQLite a des fonctionnalités pour prendre en charge les requêtes de base de données en utilisant SQL. HDF5 a des caractéristiques pour soutenir de grands ensembles de données scientifiques.
Ils sont tous deux destinés à être de haute performance.
Au fil du temps, nous ajouterons aux informations que nous stockons, mais ne voudront pas nécessairement redistribuer un tout nouvel ensemble de "lecteurs" pour prendre en charge un nouveau format.
Si vous stockez des données sous forme structurée, les types de données de ces structures sont également stockés dans le fichier HDF5. Je suis un peu rouillé quant à la façon dont cela fonctionne (par exemple s'il inclut une rétrocompatibilité innée), mais je sais que si vous concevez correctement votre "lecteur", il devrait être capable de gérer les types qui sont modifiés à l'avenir.
Est-il possible d'avoir un objet HDF5 "point" à un autre?
Absolument! Vous voulez utiliser attributs . Chaque objet a une ou plusieurs chaînes décrivant le chemin d'accès à cet objet. HDF5 les groupes {[20] } sont analogues aux dossiers / répertoires, sauf que les dossiers / répertoires sont hiérarchiques = un chemin unique décrit l'emplacement de chacun (dans les systèmes de fichiers sans liens durs au moins), tandis que les groupes forment un graphe dirigé qui peut inclure des cycles. Je ne suis pas sûr si vous pouvez stocker un" pointeur " sur un objet directement en tant qu'attribut, mais vous pouvez toujours stocker un chemin absolu/relatif en tant qu'attribut de chaîne. (ou n'importe où ailleurs comme une chaîne; vous pourriez avoir des tables de recherche à gogo si vous le vouliez.)
Nous produisons des données HDF5 sur mon projet, mais je ne les traite pas directement habituellement. Je peux prendre un coup de poignard aux deux premières questions:
Nous utilisons une écriture une fois, lire plusieurs fois le modèle et le format semble bien gérer cela. Je connais un projet qui écrivait à la fois dans une base de données Oracle et HDF5. Finalement, ils ont supprimé la sortie Oracle car les performances ont souffert et personne ne l'utilisait. De toute évidence, SQLite N'est pas Oracle, mais le format HDF5 était mieux adapté pour le tâche. Sur la base de ce point de données, un SGBDR peut être mieux réglé pour plusieurs insertions et mises à jour.
Les lecteurs de nos clients utilisent sont robustes lorsque nous ajoutons de nouveaux types de données. Certains des changements sont prévus, mais nous n'avons pas à nous soucier de casser quelque chose lors de l'ajout de champs de données supplémentaires. Notre DBA a récemment écrit un programme Python pour lire les données HDF5 et remplir les fichiers KMZ pour la visualisation dans Google Earth. Comme c'était un projet qu'il avait l'habitude d'apprendre Python, je dirais que ce n'est pas difficile à construire des lecteurs.
Sur la troisième question, je vais m'incliner devant la connaissance supérieure deJason s .
Je dirais que HDF5 est un choix tout à fait raisonnable, surtout si vous êtes déjà intéressé ou prévoyez de produire quelque chose pour la communauté scientifique.