Това е труден въпрос и не съм сигурен дали мога да дам категоричен отговор, но имам опит както с HDF5/pyTables, така и с някои NoSQL бази данни.
Ето някои мисли.
- HDF5 per se няма представа за индекс. Това е само йерархичен формат за съхранение, който е много подходящ за многоизмерни числови данни. Възможно е да се разшири над HDF5, за да се приложи индекс (т.е. PyTables, HDF5 FastQuery ) за данните.
- HDF5 (освен ако не използвате MPI версията) не поддържа едновременен достъп за запис (възможен е достъп за четене).
- HDF5 поддържа филтри за компресиране, които могат - за разлика от общоприетото схващане - да направят достъпа до данни наистина по-бърз (все пак трябва да помислите за правилния размер на парчето, което зависи от начина, по който осъществявате достъп до данните).
- HDF5 не е база данни. MongoDB има ACID свойства, HDF5 не (може да е важно).
- Има пакет (SciHadoop ), който съчетава Hadoop и HDF5.
- HDF5 прави сравнително лесно извършването на основни изчисления (т.е. ако данните са твърде големи, за да се поберат в паметта).
- PyTables поддържа някои бързи изчисления „в ядрото“ директно в HDF5 с помощта на numexpr
Мисля, че вашите данни като цяло са подходящи за съхранение в HDF5. Можете също така да направите статистически анализ или в R
или чрез Numpy/Scipy
.
Но можете да помислите и за хибриден подход. Съхранявайте необработените групови данни в HDF5 и използвайте MongoDB за метаданни или за кеширане на специфични стойности, които често се използват.