To trudne pytanie i nie jestem pewien, czy mogę udzielić jednoznacznej odpowiedzi, ale mam doświadczenie zarówno z HDF5/pyTables, jak i niektórymi bazami danych NoSQL.
Oto kilka przemyśleń.
- HDF5 per se nie ma pojęcia o indeksie. Jest to tylko hierarchiczny format przechowywania, który dobrze nadaje się do wielowymiarowych danych liczbowych. Możliwe jest rozszerzenie na HDF5 w celu zaimplementowania indeksu (np. PyTables, HDF5 FastQuery ) dla danych.
- HDF5 (chyba że używasz wersji MPI) nie obsługuje współbieżnego dostępu do zapisu (możliwy jest dostęp do odczytu).
- HDF5 obsługuje filtry kompresji, które mogą – w przeciwieństwie do powszechnego przekonania – przyspieszyć dostęp do danych (jednak musisz pomyśleć o odpowiednim rozmiarze porcji, który zależy od sposobu, w jaki uzyskujesz dostęp do danych).
- HDF5 nie jest bazą danych. MongoDB ma właściwości ACID, HDF5 nie (może być ważne).
- Istnieje pakiet (SciHadoop ), która łączy Hadoop i HDF5.
- HDF5 ułatwia wykonanie podstawowych obliczeń (np. jeśli dane są zbyt duże, aby zmieścić się w pamięci).
- PyTables obsługuje niektóre szybkie obliczenia „w jądrze” bezpośrednio w HDF5 przy użyciu numexpr
Myślę, że twoje dane ogólnie dobrze nadają się do przechowywania w HDF5. Możesz także przeprowadzić analizę statystyczną w R
lub przez Numpy/Scipy
.
Ale możesz też pomyśleć o podejściu hybrydowym. Przechowuj surowe dane zbiorcze w HDF5 i używaj MongoDB do metadanych lub do buforowania określonych wartości, które są często używane.