Sto scrivendo un gran numero di piccoli set di dati su un file HDF5 e il file risultante è circa 10x quello che mi aspetterei da una ingenua tabulazione dei dati che sto inserendo. I miei dati sono organizzati gerarchicamente come segue:Overhead storage 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
...
Ogni sottogruppo deve assumere 500 * 4 byte = 2000 byte, ignorando in testa. Non memorizzo alcun attributo accanto ai dati. Eppure, durante i test, trovo che ogni sottogruppo occupa circa 4 kB, o circa il doppio di quanto mi aspetterei. Capisco che ci sia un sovraccarico, ma da dove viene e come posso ridurlo? È nel rappresentare la struttura del gruppo?
Ulteriori informazioni: Se aumento le dimensioni dei due set di dati in ogni sottogruppo su 1000 x 4 e 1000, ciascun sottogruppo occupa circa 22.250 byte, anziché i 20.000 byte piatti che mi aspetto. Ciò implica un sovraccarico di 2,2 kB per sottogruppo ed è coerente con i risultati ottenuti con le dimensioni del set di dati più piccole. C'è un modo per ridurre questo sovraccarico?
Il formato di file HDF5 è [estremamente complesso] (http://www.hdfgroup.org/HDF5/doc/H5.format.html). Usa il blocco interno per memorizzare dati e oggetti di metadati. La dimensione di blocco predefinita per i metadati è 2 KiB e ciascun (sotto) gruppo ha il proprio spazio di intestazione, che spiega la differenza osservata di circa 2000 byte. Potresti provare a sperimentare con l'archiviazione 'COMPACT' - vedi (4.5) [qui] (http://www.hdfgroup.org/HDF5/doc1.6/UG/10_Datasets.html) per ulteriori informazioni sulle strategie di archiviazione. –
I numeri che ho dato sopra sono con il set 'COMPACT'. La lezione è di evitare complicate strutture di gruppo che ospitano piccole quantità di dati. Dopo aver combinato tutti i miei set di dati in un array più grande e applicando la compressione, ottengo un rapporto di compressione migliore di 1: 1 (la compressione consente di risparmiare più spazio rispetto all'aggiunta di overhead HDF5). – Thucydides411
@ Thucydides411 il tuo commento è la migliore risposta! Dovresti scriverlo in una risposta e accettarlo. – Simon