C'est une question difficile et je ne suis pas sûr de pouvoir donner une réponse définitive, mais j'ai de l'expérience avec HDF5/pyTables et certaines bases de données NoSQL.
Voici quelques réflexions.
- HDF5 en soi n'a pas de notion d'index. Il s'agit uniquement d'un format de stockage hiérarchique bien adapté aux données numériques multidimensionnelles. Il est possible de s'étendre au-dessus de HDF5 pour implémenter un index (c'est-à-dire PyTables, HDF5 FastQuery ) pour les données.
- HDF5 (sauf si vous utilisez la version MPI) ne prend pas en charge l'accès simultané en écriture (l'accès en lecture est possible).
- HDF5 prend en charge les filtres de compression qui peuvent - contrairement à la croyance populaire - accélérer l'accès aux données (cependant, vous devez penser à la bonne taille de bloc qui dépend de la façon dont vous accédez aux données).
- HDF5 n'est pas une base de données. MongoDB a des propriétés ACID, pas HDF5 (cela peut être important).
- Il existe un package (SciHadoop ) qui combine Hadoop et HDF5.
- HDF5 facilite relativement le calcul du cœur (c'est-à-dire si les données sont trop volumineuses pour tenir en mémoire).
- PyTables prend en charge certains calculs rapides "dans le noyau" directement dans HDF5 à l'aide de numexpr
Je pense que vos données sont généralement bien adaptées au stockage dans HDF5. Vous pouvez également faire une analyse statistique soit en R
ou via Numpy/Scipy
.
Mais vous pouvez aussi penser à une approche hybride. Stockez les données de masse brutes dans HDF5 et utilisez MongoDB pour les métadonnées ou pour mettre en cache des valeurs spécifiques souvent utilisées.