Het is een moeilijke vraag en ik weet niet zeker of ik een definitief antwoord kan geven, maar ik heb ervaring met zowel HDF5/pyTables als sommige NoSQL-databases.
Hier zijn enkele gedachten.
- HDF5 heeft op zich geen notie van index. Het is slechts een hiërarchisch opslagformaat dat zeer geschikt is voor multidimensionale numerieke gegevens. Het is mogelijk om bovenop HDF5 uit te breiden om een index te implementeren (bijv. PyTables, HDF5 FastQuery ) voor de gegevens.
- HDF5 (tenzij u de MPI-versie gebruikt) ondersteunt geen gelijktijdige schrijftoegang (leestoegang is mogelijk).
- HDF5 ondersteunt compressiefilters die - in tegenstelling tot wat vaak wordt gedacht - de toegang tot gegevens daadwerkelijk sneller kunnen maken (je moet echter nadenken over de juiste chunk-grootte die afhangt van de manier waarop je de gegevens opent).
- HDF5 is geen database. MongoDB heeft ACID-eigenschappen, HDF5 niet (misschien belangrijk).
- Er is een pakket (SciHadoop ) die Hadoop en HDF5 combineert.
- HDF5 maakt het relatief eenvoudig om kernberekeningen uit te voeren (d.w.z. als de gegevens te groot zijn om in het geheugen te passen).
- PyTables ondersteunt enkele snelle "in kernel"-berekeningen rechtstreeks in HDF5 met behulp van numexpr
Ik denk dat uw gegevens over het algemeen goed geschikt zijn voor opslag in HDF5. U kunt ook statistische analyses uitvoeren in R
of via Numpy/Scipy
.
Maar je kunt ook denken aan een hybride aanpak. Sla de onbewerkte bulkgegevens op in HDF5 en gebruik MongoDB voor de metagegevens of voor het cachen van specifieke waarden die vaak worden gebruikt.