HDF5 官方学习记录2

8 篇文章 1 订阅
本文详细介绍了HDF5文件格式的抽象存储模型和具体存储方案,包括文件的线性地址空间、VFL接口以及文件的组织结构。HDF5文件以有向图形式组织数据对象,支持复杂的链接机制,允许在多个组间共享和重命名对象。文件结构是自我描述的,便于导航和访问。此外,HDF5要求随机访问,适用于需要高效存储和访问大量数据的场景。
摘要由CSDN通过智能技术生成

1.3. The HDF5 Storage Model

1.3.1.抽象的存储模型:HDF5格式规范

HDF5文件格式规范定义了如何将HDF5对象和数据映射到一个线性地址空间。假设地址空间为存储在某些随机访问介质上的连续字节数列。该格式定义了抽象数据模型的对象如何映射到线性地址的标准。存储的表示法是自描述的,因为该格式定义了读取和重建抽象数据模型的原始对象所需的所有信息。

HDF5文件格式规范的组织分为三个部分:

     1.第0级:文件签名和超级数据块

     2.级别1:文件基础设施

        a.级别1A:B链接树和B树节点

        b.1B级:组

        c.1C级:组条目

        d. 1D级:局部堆

        e. 级别1E:全局堆

        f. 级别1F:自由空间指数

    3.第2级:数据对象

        a.数据对象标题

        b.共享数据对象标头

        c.级别2C:数据对象数据存储

       0级规范定义了文件的头块。头块元素包括签名、版本信息、文件布局的关键参数(例如需要哪些VFL文件驱动程序)和指向文件其余部分的指针。级别1定义了在整个文件中使用的数据结构:b树、堆树和组。级别2定义了用于存储数据对象和数据的数据结构。在所有情况下,数据结构都是完全指定的,以便可以忠实地解释文件中的每个位。

重要的是要意识到,在HDF5文件格式中定义的结构与抽象数据模型不同:文件规范的对象头、堆和b树则不是在抽象数据模型中表示。该格式定义了许多用于管理存储的对象,包括头块、b树和堆。HDF5文件格式规范定义了如何将抽象对象(例如,组和数据集)表示为头、b树块和其他元素。

HDF5库实现了将HDF5对象写入线性格式和从线性格式读取以创建HDF5对象的操作。认识到一个HDF5抽象对象通常被存储为多个对象是很重要的。例如,一个数据集可能存储在一个头和一个或多个数据块中,并且这些对象在硬盘上可能不相邻。

1.3.2. 具体存储方案

HDF5文件格式定义了一个抽象的线性地址空间。这可以在不同的存储介质中实现,例如磁盘或内存中的单个文件或多个文件。HDF5库定义了一个称为虚拟文件层(VFL)的开放接口。VFL允许选择不同的具体存储模型。VFL定义了一个抽象模型、一个用于随机访问存储的API,以及一个用于插入替代VFL驱动程序模块的API。该模型定义了VFL驱动程序必须和可能支持的操作,并且插件API使HDF5库能够识别驱动程序并将其传递给控件和数据。

在HDF5库中已经定义了许多VFL驱动程序。有些使用单个文件,有些使用以不同方式分割的多个文件。有些在串行计算环境中工作,有些在并行计算环境中工作。大多数使用HDF5文件的磁盘副本,但有一个使用内存副本。这些驱动程序列在“支持的文件驱动程序”表中。有关更多信息,请参见第3.11节,替代文件存储布局和底层文件驱动程序。每个驱动程序隔离读写存储的细节,以便HDF5库和用户程序的其余部分对于不同的存储方法几乎相同。此规则的例外情况是,一些VFL驱动程序需要来自调用应用程序的信息。将使用属性列表传递此信息。例如,并行驱动程序需要必须由应用程序提供的某些控制信息。

1.4. The Structure of an HDF5 File

1.4.1.整体文件结构

一个HDF5文件被组织为一个有根的有向图。命名的数据对象是图中的节点,链接是有向弧。图的每个root都有一个名称,根组的名称为“/”创建对象,然后使用链接操作插入到图中,该操作创建从组到对象的命名链接。例如,下图说明了在创建一个数据集时的HDF5文件的结构。一个对象可以是多个链接的目标。链接上的名称在每个组中必须是唯一的,但是在不同的组中可能有许多具有相同名称的链接。链接名称是明确的:一些祖先将有一个不同的名称,或者它们是相同的对象。该图使用类似于Unix文件系统的路径名进行导航。可以使用从根组开始的完整路径打开对象,也可以使用相对路径和起始节点(组)打开对象。请注意,所有的路径都是相对于单个HDF5文件的。在这个意义上,HDF5文件类似于单个Unix文件系统。

 

注:上图中为两个数字。上面的图表示一个新创建的文件。在底部的图中,已经创建了一个名为/dset1的数据集。

需要注意的是,就像Unix文件系统一样,HDF5对象也没有名称。这些名称与路径相关联。一个对象具有唯一的(在文件内)对象标识符,但是单个对象可能有许多名称,因为到同一对象可能有许多路径。可以通过添加和删除链接来重命名一个对象(移动到另一组)。在这种情况下,对象本身从不移动。因此,组中的成员身份对所存储对象的物理位置没有任何影响。

删除到一个对象的链接并不一定会删除该对象。只要至少有一个链接,该对象仍然可用。在删除到对象的所有链接之后,不能再打开它,尽管存储可能也可能不回收。

 重要的是要认识到连接机制可以用来构造非常复杂的对象图。例如,一个对象可以在多个组之间共享,甚至可以在同一个组中也有多个名称。一个组也有可能是自己的一员或在图中的一个“循环”中。循环的一个例子是,一个孩子是它自己祖先的父母。

1.4.2.HDF5路径名称和访问

文件的结构构成了文件中对象的名称空间。路径名是由“/”分隔的组件字符串。每个组件都是一个链接的名称或特殊字符“”。对于当前的组。链接名称(组件)可以是不包含“/”的ASCII字符字符串(字符串“”除外。哪个是保留的)。但是,建议用户以避免使用标点符号和非打印字符,因为它们可能会给其他软件造成问题。下图给出了HDF5路径名的BNF语法。

 

对象始终可以通过从根组开始的完整路径或绝对路径来处理。如前所述,一个给定的对象可以有多个完整的路径名。对象还可以通过相对路径处理,该路径从组开始,并包括对象的路径。HDF5文件的结构是“自我描述的”。这意味着可以导航该文件以发现该文件中的所有对象。基本上,该结构从一个节点开始,并递归地访问图的节点。

1.4.3.HDF5文件结构的示例

下图显示了一些可能的带有组和数据集的HDF5文件结构。第一个图显示了一个包含三组的文件的结构。第二个显示了在“/group1”中创建的数据集。第三个图显示了将一个名为dset2的数据集添加到根组后的结构。第四个图显示了添加了另一个组和数据集后的结构。

 

注:上图显示了三组;/group1和/组2是根组的成员。

 

注:上图显示,已在/group1: /group1/dset1中创建了一个数据集。

 

注意:在上图中,已经添加了另一个数据集作为根组: /dset2的成员。

 

注意:在上图中,已经添加了另一个组和数据集,并重用了对象名称: /group2/group2/dset2。

  1. HDF5要求随机访问线性地址空间。因此,它不太适合用于一些数据媒体,如流媒体。
  2. 可以说,HDF5将文件系统的组织概念扩展到单个文件的内部结构。
  3. 根据HDF5-1.4的规定,即使删除了所有的链接,用于对象的存储空间也会被回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值