Che*_*oy2 7 logging real-time hdf5
我想知道hdf5是否适合实时数据记录?
更准确地说:我在一个项目中工作,我们想要连续(采样率范围从30到400Hz)混合相当数量(几个小时)的不同性质(遥测,信号,视频).
数据必须实时(或稍有延迟)写入,以防止我们在潜在的崩溃时丢失它们.
我们的第一个原型基于sqlite3,但是我们觉得从长期使用中可能会出现一些限制:速度,一个数据库==一个文件,以及从多个线程访问数据库的困难(同时读取和写入时锁定异常) ).
所以,我正在考虑使用hdf5作为磁盘上数据存储的后端(以及内部表示的numpy/pytable)的可能性.你认为有可能定期从这样的python绑定更新hdf5文件吗?
HDF5 数据包表适合实时测量 - 但是您最好使用固定大小的数据包到常规旧 posix 文件并稍后进行转换。这是因为 HDF5 目前还不是很强大,并且不提供使用低级文件 IO 代码的各种保证 - 说低级代码实际上非常容易使用。虽然在某些时候,当您处理的数据足够复杂时,HDF5 应该加入,但要注意相对于低级文件 IO,它是重量级的,并且由于其全局互斥体的使用而无法以合理的确定性/性能进行多线程处理。此外,例如,如果系统崩溃,生成的 HDF5 文件就是垃圾/无法恢复 - 这有一天会被修复,但需要 HDF 小组提供资金来加快并在未来十年内完成它。
我自己的策略是尽可能使用数据包日志文件。然后在这些文件被记录下来以供长期使用+压缩+由其他工具/程序使用后立即将结果转换为HDF5。所述记录器经常在编写时转储解释二进制结构的 HDF5 文件,以便稍后我可以简单地读取该文件以了解数据包日志文件中的结构,并在加载数据包后将其传递给真正的 HDF 文件在记忆中。
说了这么多,做了这么多,看看boeing 的数据包表 api。它在 hdf5 附带的 hl c++ 库中还有一个害群之马的 c++ 绑定,尽管我必须对其进行修补以供我使用。