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

时间:2013-05-28 07:40:07

标签: compression hdf5 chunking

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

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

文件A的“数据”:

  1. 类型:HDF5标量数据集
  2. 否。尺寸:2
  3. 尺寸大小: 5094125 x 6
  4. 最大。尺寸大小:无限x无限
  5. 数据类型:64位浮点
  6. 分块: 10000 x 6
  7. 压缩:GZIP等级= 7
  8. 文件B的“数据”:

    1. 类型:HDF5标量数据集
    2. 否。尺寸:2
    3. 尺寸大小: 6720 x 1000
    4. 最大。尺寸大小:无限x无限
    5. 数据类型:64位浮点
    6. Chunking: 6000 x 1
    7. 压缩:GZIP等级= 7
    8. 文件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的最佳块大小以用于压缩目的?

      谢谢!

1 个答案:

答案 0 :(得分:10)

除了@Ümit描述的方式之外,

Chunking并不会真正影响压缩比本身。分块的作用是影响I / O性能。当压缩应用于HDF5数据集时,它将单独应用于整个块。这意味着当从数据集中的单个块读取数据时,必须对整个块进行解压缩 - 可能涉及更多的I / O,具体取决于缓存的大小,块的形状等。

您应该做的是确保块形状与您读/写数据的方式相匹配。如果您通常一次读取一列,请创建您的块列。 This is a good tutorial on chunking.