版本化HDF5

2020-08-23 02:45:55

在许多科学计算和工业应用中,存储和处理大量数据是一个挑战。其中一个标准数据模型是HDF5,这是一种开放技术,它实现了分层结构(类似于文件系统结构),用于在单个文件中存储大量可能异构的数据。HDF5文件中的数据被组织成组和数据集;您可以将它们分别视为本地文件系统中的文件夹和文件。您还可以选择将与每个项目相关联的元数据存储在一个文件中,这使得它成为一个自我描述且功能强大的数据存储模型。

由于这些大型数据文件中的读写操作必须很快,因此HDF5模型包括数据压缩和分块。这项技术允许在适合计算机内存或RAM的子集中检索数据,这意味着它不需要一次性将整个文件内容加载到内存中。所有这些都使得HDF5成为几个领域的流行格式,使用h5py可以使用Pythonic接口对HDF5文件进行读写。

现在,假设您有一个HDF5文件,其内容会随着时间的推移而更改。您可能希望添加或删除数据集,更改数据或元数据的内容,并记录发生更改的时间,以便恢复此文件的以前版本。由于HDF5是二进制文件格式,使用常规版本控制工具(如git)可能会很困难。

版本化HDF5库是h5py之上的版本化抽象。由于HDF5数据模型的灵活性,所有版本控制数据都存储在文件本身中,这意味着同一数据(包括版本元数据)的不同版本可以存储在单个HDF5文件中。

要了解这在实践中是如何工作的,让我们假设我们用h5py创建了一个名为mydata.h5的常规HDF5文件。

此文件中仍然没有存储任何数据或版本。要创建新版本,您可以使用上下文管理器:

上下文管理器返回一个h5py组对象,应该就地修改该对象以构建新版本。当上下文管理器退出时,版本将写入文件。从现在开始,与版本化组和数据集的任何交互都应该通过Versioned HDF5API完成,而不是通过h5py。

>;>;>;v1=Versioned_File[';Version1';]>;>;提交的InMemoryGroup";/_Version_Data/Versions/Version1";>;>;>;v1[';myDataSet';]<;InMemoryArrayDataset。F8";>;

为了访问版本1中存储的实际数据,我们使用与h5py相同的语法:

假设现在我们想要提交此数据的新版本,只更改数据的一小部分。我们可以这样做:

>;>;>;v2=VERVERED_FILE[';version2';]>;>;v1[';myDataSet';][()]array([1.,1.,1.,...,1.,1.,1.])]>;>;>;v2[';myDatet';][()]array([-10.,1.,1.,...,1.,1.,1.])]。

Versioned-hdf51.0最近发布了,并且在PyPI和Conda-Forge上可用。您可以使用以下命令安装它。

开发是在GitHub上进行的,目前,该库支持基本用例,但是还有很多事情要做。我们欢迎社区对图书馆的贡献,包括任何问题或功能请求。

目前,您可以查看文档,了解更多关于支持什么以及如何构建库的详细信息。

这是关于版本化HDF5库的系列文章中的第一篇。接下来,我们将讨论版本化HDF5文件的性能,以及库的设计。