Piszę dużą liczbę małych zestawów danych do pliku HDF5, a wynikowy rozmiar pliku wynosi około 10x, czego oczekiwałbym od naiwnej tabeli danych, które wprowadzam. Moje dane są uporządkowane hierarchicznie w następujący sposób:Napięcie pamięci masowej HDF5
group 0
-> subgroup 0
-> dataset (dimensions: 100 x 4, datatype: float)
-> dataset (dimensions: 100, datatype: float)
-> subgroup 1
-> dataset (dimensions: 100 x 4, datatype: float)
-> dataset (dimensions: 100, datatype: float)
...
group 1
...
Każda podgrupa powinna zająć 500 * 4 Bytes = 2000 Bytes, ignorując obciążenie. Nie przechowuję żadnych atrybutów obok danych. Jednak podczas testów okazało się, że każda podgrupa zajmuje około 4 kB, czyli około dwa razy więcej niż oczekiwałbym. Rozumiem, że istnieje pewne obciążenie, ale skąd ono pochodzi i jak mogę je zmniejszyć? Czy reprezentuje strukturę grupy?
Więcej informacji: Jeśli zwiększenie rozmiarów dwóch zestawów danych w każdej podgrupie 1000 x 4 do 1000, a każda podgrupa zajmuje około 22250 bajtów, a nie płaskich 20000 bajtów, że oczekiwać. Oznacza to obciążenie 2,2 kB na podgrupę i jest zgodne z wynikami uzyskiwanymi przy mniejszych rozmiarach zbioru danych. Czy istnieje sposób na zmniejszenie tego obciążenia?
Format pliku HDF5 jest [bardzo złożony] (http://www.hdfgroup.org/HDF5/doc/H5.format.html). Używa wewnętrznego blokowania do przechowywania danych i obiektów metadanych. Domyślny rozmiar bloku dla metadanych wynosi 2 KiB, a każda (pod) grupa ma swoją własną przestrzeń nagłówkową, która wyjaśnia zaobserwowaną różnicę około 2000 bajtów. Możesz spróbować eksperymentować z pamięcią typu "COMPACT" - patrz (4.5) [tutaj] (http://www.hdfgroup.org/HDF5/doc1.6/UG/10_Datasets.html), aby uzyskać więcej informacji na temat strategii przechowywania. –
Numery, które podałem powyżej, są ustawione na "COMPACT". Lekcja z tego polega na unikaniu skomplikowanych struktur grupowych zawierających niewielkie ilości danych. Po połączeniu wszystkich moich zbiorów danych w większą macierz i zastosowaniu kompresji uzyskuje się lepszą niż 1: 1 wartość współczynnika wypełnienia (kompresja oszczędza więcej miejsca niż narzut na HDF5). – Thucydides411
@ Thucydides411 Twój komentarz jest najlepszą odpowiedzią! Powinieneś zapisać go w odpowiedzi i zaakceptować. – Simon