我想问一个关于压缩性能的问题这与hdf5文件的块大小有关。
我手头有2个hdf5文件,它们具有以下属性。它们都只包含一个数据集,叫做"data"。
文件A的"data":
- 类型:HDF5 Scalar Dataset
- 。尺寸:2
- 尺寸尺寸:5094125 × 6
- Max。尺寸尺寸:Unlimited x Unlimited
- 数据类型:64位浮点
- 分块:10000 × 6
- 压缩:GZIP级别= 7
文件B的"data":
- 类型:HDF5 Scalar Dataset
- 。尺寸:2
- 尺寸尺寸:6720 × 1000
- Max。尺寸尺寸:Unlimited x Unlimited
- 数据类型:64位浮点
- 分块:6000 × 1
- 压缩:GZIP级别= 7
文件A的大小:HDF5——19 MBCSV——165 MB
文件B的大小:HDF5——60 MBCSV——165 MB
与csv文件相比,它们都显示了对存储数据的极大压缩。而A文件的压缩率约为原始csv文件的10%,而文件B只有原始csv的30%左右。
我尝试了不同的块大小,使文件B尽可能小,但似乎30%是最佳压缩率。我想问一下为什么文件A可以实现更大的压缩,而文件B不能。
如果文件B也可以实现,块大小应该是多少?
是否有任何规则来确定HDF5的最佳块大小用于压缩目的?
谢谢!
分块并不真正影响压缩比本身,除了@Ümit描述的方式。分块确实会影响I/O性能。当压缩应用于HDF5数据集时,它被单独应用于整个块。这意味着当从数据集中的单个块读取数据时,必须对整个块进行解压缩——可能涉及更多的I/O,具体取决于缓存的大小、块的形状等。
您应该做的是确保块形状匹配您读取/写入数据的方式。例如,如果您通常一次阅读一列,那么将您的块设置为列。