PYTANIE : Jakie są zalety w porównaniu do alternatywnych formatów? Jakie są główne korzyści z przechowywania danych w HDF? A jakie są główne zadania związane z nauką danych, w których HDF jest naprawdę odpowiedni i przydatny?
ODPOWIEDŹ : Być może dobrym sposobem na sparafrazowanie pytania jest, jakie są zalety w porównaniu do alternatywnych formatów? Myślę, że głównymi alternatywami są baza danych, pliki tekstowe lub inny format spakowany / binarny. Opcje bazy danych, które należy wziąć pod uwagę, to prawdopodobnie magazyn kolumnowy lub NoSQL lub małe samodzielne zestawy danych SQLite. Główną zaletą bazy danych jest możliwość pracy z danymi znacznie większymi niż pamięć, dostęp losowy lub indeksowany oraz szybkie dodawanie / dołączanie / modyfikowanie danych. Główną zaletą * dis * jest to, że jest znacznie wolniejszy niż HDF, w przypadku problemów, w których cały zestaw danych musi zostać wczytany i przetworzony. Kolejną wadą jest to, że z wyjątkiem baz danych w stylu osadzonym, takich jak SQLite, baza danych jest systemem (wymagającym podziwu, konfiguracji, konserwacji itp.), A nie prostym, niezależnym magazynem danych. Opcje formatu pliku tekstowego to XML / JSON / CSV. Są to narzędzia typu crosssplatform / language / toolkit i są dobrym formatem archiwalnym ze względu na możliwość samodzielnego opisywania. Jeśli nieskompresowane, są ogromne (10x-100x HDF), ale jeśli są skompresowane, mogą być dość wydajne pod względem przestrzeni (skompresowany XML jest mniej więcej taki sam jak HDF). Główną wadą jest tutaj szybkość: parsowanie tekstu jest znacznie, dużo wolniejsze niż HDF. Inne formaty binarne (pliki numy npy / npz, pliki blz blaze, bufory protokołów, Avro,…) mają bardzo podobne właściwości do HDF, z tym że są mniej obsługiwane (mogą być ograniczone tylko do jednej platformy: numpy) i mogą mieć określone inne ograniczenia. Zazwyczaj nie oferują one istotnych korzyści. HDF stanowi dobre uzupełnienie baz danych, może być sensowne uruchomienie zapytania w celu wygenerowania zbioru danych o wielkości mniej więcej pamięci, a następnie buforowanie go w HDF, jeśli te same dane zostaną użyte więcej niż jeden raz. Jeśli masz zestaw danych, który jest stały i zwykle przetwarzany jako całość, przechowywanie go jako zbioru plików HDF o odpowiednim rozmiarze nie jest złą opcją. Jeśli masz często aktualizowany zestaw danych, okresowe umieszczanie niektórych z nich jako plików HDF może być nadal pomocne. Podsumowując, HDF jest dobrym formatem dla danych, które są odczytywane (lub zapisywane) zazwyczaj jako całość; dla wielu jest to lingua franca lub wspólny / preferowany format wymiany aplikacji ze względu na szerokie wsparcie i kompatybilność, przyzwoity jako format archiwalny i bardzo szybki.
P.S. Aby nadać temu praktyczny kontekst, ostatnie doświadczenie w porównywaniu HDF z alternatywami, pewien mały (znacznie mniejszy niż pamięć) zestaw danych potrzebował 2 sekund na odczytanie jako HDF (a większość z nich to prawdopodobnie narzut z Pandas); ~ 1 minuta do odczytania z JSON; i 1 godzina na zapis do bazy danych. Z pewnością można przyspieszyć zapis w bazie danych, ale lepiej mieć dobry DBA.
Jedną z korzyści jest szerokie wsparcie – wszystkie C, Java, Perl, Python i R mają powiązania HDF5. Kolejną zaletą jest szybkość. Nigdy nie widziałem, żeby był testowany, ale HDF ma być szybszy niż bazy danych SQL. Rozumiem, że jest bardzo dobry, gdy jest używany zarówno z dużymi zestawami danych naukowych, jak i szeregami czasowymi – monitorowanie sieci, śledzenie użytkowania itp. Nie sądzę, aby istniało ograniczenie rozmiaru plików HDF (chociaż nadal obowiązywałyby ograniczenia systemu operacyjnego.