1 回答
TA贡献1836条经验 获得超4个赞
这是一个“仅”写入 1.5e6 行的简单示例。我没有做任何事情来优化非常大的文件的性能。您正在创建一个非常大的文件,但没有说明有多少行(显然超过 10**6)。以下是根据另一个线程中的评论提出的一些建议。
我推荐的区域(3 个与 PyTables 代码相关,2 个基于外部使用)。
PyTables 代码建议:
创建文件时启用压缩(
filters=
创建文件时添加参数)。从 开始tb.Filters(complevel=1)
。expectedrows=
在.create_tables()
(根据 PyTables 文档,“这将优化 HDF5 B 树和使用的内存量”)中定义参数。默认值设置在tables/parameters.py
(查找 EXPECTED_ROWS_TABLE;在我的安装中它只有 10000)。如果您要创建 10**6(或更多)行,我建议您将此设置为更大的值。setting 有一个附带的好处
expectedrows=
。如果你没有定义 chunkshape,'一个合理的值是根据 expectedrows 参数计算的'。检查使用的值。这不会减小创建的文件大小,但会提高 I/O 性能。
如果您在创建文件时没有使用压缩,则有 2 种方法可以压缩现有文件:
外部实用程序:
PyTables 实用程序
ptrepack
- 针对 HDF5 文件运行以创建新文件(对于从未压缩到压缩,反之亦然)。它随 PyTables 一起提供,并在命令行上运行。HDF5 实用程序
h5repack
- 与ptrepack
. 它随 HDF Group 的 HDF5 安装程序一起提供。
文件压缩需要权衡取舍:它减小了文件大小,但增加了访问时间(降低了 I/O 性能)。我倾向于使用经常打开的未压缩文件(以获得最佳 I/O 性能)。然后完成后,我将其转换为压缩格式以进行长期存档。您可以继续以压缩格式使用它们(API 处理干净)。
添加回答
举报