Det är en svår fråga och jag är inte säker på om jag kan ge ett definitivt svar men jag har erfarenhet av både HDF5/pyTables och några NoSQL-databaser.
Här är några tankar.
- HDF5 i sig har inget begrepp om index. Det är bara ett hierarkiskt lagringsformat som är väl lämpat för flerdimensionell numerisk data. Det är möjligt att utöka ovanpå HDF5 för att implementera ett index (dvs PyTables, HDF5 FastQuery ) för data.
- HDF5 (såvida du inte använder MPI-versionen) stöder inte samtidig skrivåtkomst (läsbehörighet är möjlig).
- HDF5 stöder komprimeringsfilter som kan - till skillnad från vad många tror - göra dataåtkomst faktiskt snabbare (du måste dock tänka på rätt chunkstorlek vilket beror på hur du kommer åt data).
- HDF5 är ingen databas. MongoDB har ACID-egenskaper, HDF5 har inte (kan vara viktigt).
- Det finns ett paket (SciHadoop ) som kombinerar Hadoop och HDF5.
- HDF5 gör det relativt enkelt att göra kärnberäkningar (dvs om data är för stor för att passa in i minnet).
- PyTables stöder vissa snabba "in kernel"-beräkningar direkt i HDF5 med numexpr
Jag tror att dina data i allmänhet passar bra för lagring i HDF5. Du kan också göra statistisk analys antingen i R
eller via Numpy/Scipy
.
Men du kan också tänka på ett hybridt tillvägagångssätt. Lagra den råa bulkdatan i HDF5 och använd MongoDB för metadata eller för att cachelagra specifika värden som ofta används.