Det er et svært spørgsmål, og jeg er ikke sikker på, om jeg kan give et entydigt svar, men jeg har erfaring med både HDF5/pyTables og nogle NoSQL-databaser.
Her er nogle tanker.
- HDF5 i sig selv har ikke noget begreb om indeks. Det er kun et hierarkisk lagerformat, der er velegnet til multidimensionelle numeriske data. Det er muligt at udvide oven på HDF5 for at implementere et indeks (dvs. PyTables, HDF5 FastQuery ) for dataene.
- HDF5 (medmindre du bruger MPI-versionen) understøtter ikke samtidig skriveadgang (læseadgang er mulig).
- HDF5 understøtter komprimeringsfiltre, som - i modsætning til populær tro - kan gøre dataadgang faktisk hurtigere (men du skal tænke på den korrekte chunk-størrelse, som afhænger af den måde, du får adgang til dataene).
- HDF5 er ingen database. MongoDB har ACID-egenskaber, HDF5 har ikke (kan være vigtigt).
- Der er en pakke (SciHadoop ), der kombinerer Hadoop og HDF5.
- HDF5 gør det relativt nemt at udføre kerneberegning (dvs. hvis dataene er for store til at passe ind i hukommelsen).
- PyTables understøtter nogle hurtige "in kernel"-beregninger direkte i HDF5 ved hjælp af numexpr
Jeg tror, at dine data generelt passer godt til lagring i HDF5. Du kan også lave statistisk analyse enten i R
eller via Numpy/Scipy
.
Men du kan også tænke på en hybrid tilgang. Gem de rå bulkdata i HDF5 og brug MongoDB til metadata eller til cachelagring af specifikke værdier, som ofte bruges.