È una domanda difficile e non sono sicuro di poter dare una risposta definitiva, ma ho esperienza sia con HDF5/pyTables che con alcuni database NoSQL.
Ecco alcuni pensieri.
- HDF5 di per sé non ha la nozione di indice. È solo un formato di archiviazione gerarchico adatto per dati numerici multidimensionali. È possibile estendere l'HDF5 per implementare un indice (ad esempio PyTables, HDF5 FastQuery ) per i dati.
- HDF5 (a meno che non si utilizzi la versione MPI) non supporta l'accesso simultaneo in scrittura (è possibile l'accesso in lettura).
- HDF5 supporta i filtri di compressione che, a differenza della credenza popolare, possono rendere l'accesso ai dati effettivamente più veloce (tuttavia devi pensare alla dimensione del blocco corretta che dipende dal modo in cui accedi ai dati).
- HDF5 non è un database. MongoDB ha proprietà ACID, HDF5 no (potrebbe essere importante).
- Esiste un pacchetto (SciHadoop ) che combina Hadoop e HDF5.
- HDF5 rende relativamente facile eseguire il calcolo di base (cioè se i dati sono troppo grandi per essere inseriti nella memoria).
- PyTables supporta alcuni calcoli veloci "nel kernel" direttamente in HDF5 utilizzando numexpr
Penso che i tuoi dati in generale siano adatti per l'archiviazione in HDF5. Puoi anche eseguire analisi statistiche in R
o tramite Numpy/Scipy
.
Ma puoi anche pensare a un approccio ibrido. Archivia i dati di massa grezzi in HDF5 e usa MongoDB per i metadati o per memorizzare nella cache valori specifici che vengono spesso utilizzati.