Je to těžká otázka a nejsem si jistý, jestli mohu dát jednoznačnou odpověď, ale mám zkušenosti jak s HDF5/pyTables, tak s některými databázemi NoSQL.
Zde je několik myšlenek.
- HDF5 samo o sobě nemá pojem index. Je to pouze hierarchický formát úložiště, který se dobře hodí pro vícerozměrná číselná data. Je možné rozšířit nad HDF5 a implementovat index (tj. PyTables, HDF5 FastQuery ) pro data.
- HDF5 (pokud nepoužíváte verzi MPI) nepodporuje souběžný přístup pro zápis (je možný přístup pro čtení).
- HDF5 podporuje kompresní filtry, které mohou – na rozdíl od všeobecného přesvědčení – skutečně zrychlit přístup k datům (musíte však myslet na správnou velikost bloku, která závisí na způsobu, jakým k datům přistupujete).
- HDF5 není databáze. MongoDB má ACID vlastnosti, HDF5 ne (může být důležité).
- Existuje balíček (SciHadoop ), který kombinuje Hadoop a HDF5.
- HDF5 umožňuje poměrně snadno provést výpočet jádra (tj. pokud jsou data příliš velká na to, aby se vešla do paměti).
- PyTables podporuje některé rychlé výpočty „v jádře“ přímo v HDF5 pomocí numexpr
Myslím, že vaše data jsou obecně vhodná pro ukládání v HDF5. Statistickou analýzu můžete provádět také v R
nebo prostřednictvím Numpy/Scipy
.
Můžete ale také uvažovat o hybridním přístupu. Uložte nezpracovaná hromadná data do HDF5 a použijte MongoDB pro metadata nebo pro ukládání konkrétních hodnot, které se často používají, do mezipaměti.