压缩性能与hdf5文件中的块大小有关



我想问一个关于压缩性能的问题这与hdf5文件的块大小有关。

我手头有2个hdf5文件,它们具有以下属性。它们都只包含一个数据集,叫做"data"。

文件A的"data":

  1. 类型:HDF5 Scalar Dataset
  2. 。尺寸:2
  3. 尺寸尺寸:5094125 × 6
  4. Max。尺寸尺寸:Unlimited x Unlimited
  5. 数据类型:64位浮点
  6. 分块:10000 × 6
  7. 压缩:GZIP级别= 7

文件B的"data":

  1. 类型:HDF5 Scalar Dataset
  2. 。尺寸:2
  3. 尺寸尺寸:6720 × 1000
  4. Max。尺寸尺寸:Unlimited x Unlimited
  5. 数据类型:64位浮点
  6. 分块:6000 × 1
  7. 压缩: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,具体取决于缓存的大小、块的形状等。

您应该做的是确保块形状匹配您读取/写入数据的方式。例如,如果您通常一次阅读一列,那么将您的块设置为列。

最新更新