L'évaluation HDF5: Quelles sont les limites / caractéristiques ne fournit HDF5 pour les données de modélisation?
-
23-08-2019 - |
Question
Nous sommes dans l'évaluation des technologies que nous utilisons pour stocker des données que nous collectons lors de l'analyse du code C / C ++. Dans le cas de C ++, la quantité de données peut être relativement importante, ~ 20 Mo par TU.
Après avoir lu la réponse suivante SO il m'a fait considérer que HDF5 pourrait être une technologie appropriée pour nous d'utiliser. Je me demandais si les gens pouvaient me aider ici répondre à quelques questions initiales que j'ai:
-
Performance. L'utilisation générale des données est réinscriptible et lu fois « plusieurs », semblable à la durée de vie d'un fichier « .o » généré par un compilateur. Comment se compare-t HDF5 contre l'utilisation de quelque chose comme un SQLite DB? Est-ce même une comparaison raisonnable de faire?
-
Au fil du temps, nous allons ajouter à l'information que nous stockons, mais ne voudrons pas nécessairement redistribuera une toute nouvelle série de « lecteurs » pour soutenir un nouveau format. Après avoir lu le guide de l'utilisateur Je comprends que HDF5 est similaire au format XML ou un DB, dans cette information est associée à une étiquette / colonne et donc un outil conçu pour lire une structure plus ancienne sera tout simplement ignorer les champs qu'il ne se préoccupe pas? Je crois comprendre ce correct?
-
Une importante partie de l'information que nous voulons écrire sera un type d'arbre de la structure: hiérarchie de portée, la hiérarchie de type, etc. L'idéal serait modèle portées comme ayant les parents, les enfants, etc. Est-il possible d'avoir un objet HDF5 « point » à un autre? Dans le cas contraire, il est une technique standard pour résoudre ce problème en utilisant HDF5? Ou, comme cela est nécessaire dans une base de données, nous avons besoin de faire une clé unique qui « lien » un objet à l'autre avec lors de la recherche appropriés lookups pour les données?
Merci!
La solution
Comment se compare-t HDF5 contre l'utilisation de quelque chose comme un SQLite DB? Est-ce même une comparaison raisonnable de faire?
Trier de similaire, mais pas vraiment. Ils sont tous les deux fichiers structurés. SQLite a des fonctions pour supporter des 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 haute performance.
Au fil du temps, nous allons ajouter à l'information que nous stockons, mais ne voudrons pas nécessairement redistribuera une toute nouvelle série de « lecteurs » pour soutenir un nouveau format.
Si vous stockez des données sous forme structurée, les types de données de ces structures sont également stockées dans le fichier HDF5. Je suis un peu rouillé à la façon dont cela fonctionne (par exemple si elle inclut la rétrocompatibilité innée), mais je sais que si vous concevez votre « lecteur » correctement, il devrait être en mesure de traiter les types qui sont modifiés à l'avenir.
Est-il possible d'avoir un objet HDF5 « point » à un autre?
Tout à fait! Vous voulez utiliser attributs . Chaque objet a une ou plusieurs chaînes décrivant le chemin pour atteindre cet objet. Les groupes de HDF5 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 w / o liens physiques tout au moins), tandis que les groupes forment un graphe orienté qui peut comprendre des cycles. Je ne suis pas sûr que vous pouvez stocker un « pointeur » à un objet directement comme un attribut, mais vous pouvez toujours stocker un chemin absolu / relatif comme attribut de chaîne. (Ou nulle part ailleurs comme une chaîne,., Vous pouvez avoir des tables de consultation à gogo si vous voulez)
Autres conseils
Nous produisons HDF5 des données sur mon projet, mais je ne traite pas directement avec elle habituellement. Je peux prendre un coup de poignard aux deux premières questions:
-
Nous utilisons une écriture une fois, lisez modèle plusieurs fois et le format semble gérer ce bien. Je connais un projet qui sert à écrire à la fois à une Oracle base de données et HDF5. Finalement, ils ont enlevé la sortie Oracle depuis la performance a souffert et personne ne l'utilisait. De toute évidence, SQLite est pas Oracle, mais le format de HDF5 était mieux adapté à la tâche. Sur la base de ce seul point de données, un SGBDR peut être mieux à l'écoute pour de multiples insertions et mises à jour.
-
Les lecteurs que nos clients utilisent sont robustes lorsque nous ajoutons de nouveaux types de données. Certains des changements sont à prévoir, mais nous n'avons pas à vous soucier de casser chose lors de l'ajout des champs de données. 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 il était un projet qu'il a utilisé pour apprendre Python, je dirais que ce n'est pas difficile de construire les lecteurs.
Sur la troisième question, je fléchis une connaissance supérieure de Jason S .
Je dirais que HDF5 est un choix tout à fait raisonnable, surtout si vous êtes déjà intéressé ou envisagez de produire quelque chose pour la communauté scientifique.