8

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

我手头有 2 个 hdf5 文件,它们具有以下属性。它们都只包含一个数据集,称为“数据”。

文件 A 的“数据”:

  1. 类型:HDF5 标量数据集
  2. 尺寸数量:2
  3. 尺寸尺寸:5094125 x 6
  4. 最大限度。尺寸大小:无限 x 无限
  5. 数据类型:64位浮点
  6. 分块:10000 x 6
  7. 压缩:GZIP 级别 = 7

文件 B 的“数据”:

  1. 类型:HDF5 标量数据集
  2. 尺寸数量:2
  3. 尺寸尺寸:6720 x 1000
  4. 最大限度。尺寸大小:无限 x 无限
  5. 数据类型:64位浮点
  6. 分块:6000 x 1
  7. 压缩:GZIP 级别 = 7

文件 A 的大小:HDF5----19 MB CSV-----165 MB

文件 B 的大小:HDF5----60 MB CSV-----165 MB

与 csv 文件相比,它们都显示出对存储数据的极大压缩。但是文件A的压缩率大约是原始csv的10%,而文件B的压缩率只有原始csv的30%左右。

我尝试了不同的块大小以使文件 B 尽可能小,但似乎 30% 是最佳压缩率。我想问为什么文件A可以实现更大的压缩而文件B不能。

如果文件B也能实现,那么块大小应该是多少?

这是为了压缩目的确定 HDF5 的最佳块大小的任何规则吗?

谢谢!

4

1 回答 1

10

除了@Ümit 描述的方式外,分块本身并不会真正影响压缩率。分块的作用是影响 I/O 性能。当压缩应用于 HDF5 数据集时,它会单独应用于整个块。这意味着从数据集中的单个块读取数据时,必须解压缩整个块 - 可能涉及更多的 I/O,具体取决于缓存的大小、块的形状等。

您应该做的是确保块形状与您读取/写入数据的方式相匹配。例如,如果您通常一次阅读一列,请制作您的块列。这是一个很好的分块教程。

于 2013-05-31T13:08:56.257 回答