0

我正在大量使用 pytables 和 HDF5 数据,并且我对节点的属性(您通过 pytables 'node._v_attrs' 属性访问的属性)有疑问。

假设我设置了一个 hdf5 节点的这样一个属性。我一遍又一遍地这样做,设置一个特定的属性

(1) 始终为相同的值(因此总体上存储在 hdf5file 中的值不会发生质的变化)

(2) 总是具有不同的值

这些操作在速度和内存方面如何?我的意思是以下,设置属性真的意味着删除hdf5文件中的属性并添加一个与以前相同名称的新属性吗?如果是这样,这是否意味着每次我重置现有属性时,hdf5 文件的大小都会略微增加并保持缓慢增长,直到我的硬盘已满?

如果这是真的,在我重置是否有案例(1)之前检查是否更有益[我根本不应该存储,而是将数据与写入磁盘上的属性进行比较]并且只有在我遇到案例(2)时才重新分配[即hdf5file中的属性值不是我要写入hdf5文件的那个]。

非常感谢,最好的问候,罗伯特

4

1 回答 1

3

HDF5 属性访问速度非常慢。HDF5 是真正为数组数据结构而构建的。诸如组和属性之类的东西是很好的帮手,但它们没有被优化。

也就是说,虽然属性读取很慢,但属性写入更慢。因此,按照您的建议做额外的努力总是值得的。在写入之前检查属性是否存在以及它是否具有所需的值。与每次都写出来相比,这应该可以提高您的速度。

幸运的是,属性对内存的影响——无论是在磁盘上还是在内存中——都是最小的。这是因为节点上的所有属性都适合 64 kb 的特殊元数据空间。如果您尝试写入超过 64 kb 的属性,HDF5 和 PyTables 将失败。

我希望这有帮助。

于 2013-09-05T16:24:50.987 回答