python - 精细控制 h5py 缓冲

标签 python hdf5 h5py

我在内存中有一些数据要存储在 HDF 文件中。

我的数据不是很大(<100 MB,所以它们很适合放在内存中),所以为了性能,将它们保留在那里似乎是有意义的。同时,我也想把它存储在磁盘上。两者始终完全同步并不重要,只要它们都有效(即未损坏),并且我可以手动触发同步。

我可以将我的数据保存在内存中的一个单独容器中,然后按需将其放入 HDF 对象中。如果可能的话,我想避免写这一层。这将需要我跟踪哪些部分已更改,并有选择地更新这些部分。我希望 HDF 能帮我解决这个问题。

我知道 driver='core' 具有后备存储功能,但据我所知,它仅在关闭文件时同步后备存储。 我可以刷新文件,但这是否保证将对象写入存储?

从HDF5源码来看,似乎答案是肯定的。但我想听到确认。

奖励问题:driver='core' 实际上比普通文件系统后端更快吗?我需要注意什么?

最佳答案

H5Fflush 命令的作用是请求 文件系统将所有缓冲区传输到文件。

documentation对此有具体说明:

HDF5 does not possess full control over buffering. H5Fflush flushes the internal HDF5 buffers then asks the operating system (the OS) to flush the system buffers for the open files. After that, the OS is responsible for ensuring that the data is actually flushed to disk.

在实践中,我注意到我可以使用大部分时间从已刷新的 HDF5 文件中读取数据(即使该进程随后被终止)但是 HDF5 不能保证这一点:没有安全性依靠刷新操作来获得有效的 HDF5 文件,因为进一步的操作(例如,在元数据上)可能会损坏文件,然后进程会被中断。您必须完全关闭文件才能保持这种一致性。

关于python - 精细控制 h5py 缓冲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48517784/

相关文章:

python - 在 setup.py 中声明我的包的可选组件

python - 使用 Python 将 XML 文件存储到 MS SQL DB 中

python - OpenERP登录问题

c - 为什么在执行 HDF5 示例代码期间出现 libhdf5_hl not returned 错误?

python - h5py文件和pickle文件保存模型的区别

python - 如何导入LambdaContext?

fortran - HDF5 用于使用 Fortran 编写的数据文件

c++ - 打开 hdf5 字符串数据集

python - 用于读取行的最佳 HDF5 数据集 block 形状

numpy - 如何连接两个 hdf5 格式的 numpy 数组?