HDF5 官网学习记录之 抽象数据模型

HDF5:(Hierarchical Data Format) 是由美国伊利诺伊大学厄巴纳 - 香槟分校 UIUC (University of Illinois at Urbana-Champaign) 开发,是一种常见的跨平台数据储存文件,可以存储不同类型的图像和数码数据,并且可以在不同类型的机器上传输,同时还有统一处理这种文件格式的函数库。

层次结构数据格式(HDF)实现了一个用于管理和存储数据的模型。该模型包括一个抽象数据模型和一个抽象存储模型(数据格式),以及用于实现抽象模型并将存储模型映射到不同的存储机制的库。HDF5 库为抽象模型的具体实现提供了一个编程接口。该库还实现了一个数据传输模型,即数据从一个存储表示到另一个存储表示的有效移动。下图说明了模型和实现之间的关系。

抽象数据模型是数据、数据类型和数据组织的概念性模型。抽象数据模型独立于存储介质或编程环境。存储模型是抽象数据模型的对象的标准表示。HDF5 文件格式规范定义了存储模型。

抽象数据模型是数据、数据类型和数据组织的概念性模型。抽象数据模型独立于存储介质或编程环境。存储模型是抽象数据模型的对象的标准表示。HDF5 文件格式规范定义了存储模型。

该库是该编程模型的具体实现。该库将 HDF5api 导出为其接口。除了实现抽象数据模型的对象外,该库管理从一个存储表单到另一个存储表单的数据传输。数据传输示例包括从磁盘读取到内存和从内存写到磁盘。

存储数据是存储模型的具体实现。存储模型映射到多个存储机制,包括单个磁盘文件、多个文件(文件族)和内存表示。

HDF5 库是一个 C 模块,它实现了编程模型和抽象数据模型。HDF5 库调用操作系统或其他存储管理软件(例如,MPI/IO 库)来存储和检索持久性数据。HDF5 库还可以链接到其他软件,如过滤器进行压缩。HDF5 库链接到一个可以用 C、C、++、Fortran 或 JAVA 编写的应用程序。该应用程序实现了特定于问题的算法和数据结构,并调用 HDF5 库来存储和检索数据。下图显示了这些模块的依赖关系。

重要的是要意识到,每个软件组件都使用适合于该组件的模型和数据结构来管理数据。当数据在层之间传递时(在存储或检索期间)时,它将从一种表示转换为另一种表示。下图显示了在不同层中使用的一些数据结构。应用程序程序使用表示问题的数据结构,以及算法,包括变量、表、数组和网格以及其他数据结构。根据其设计和功能,一个应用程序可能有相当多的不同类型的数据结构和不同的数量和大小的对象。

HDF5 库实现了 HDF5 抽象数据模型的对象。其中一些对象包括组、数据集和属性。应用程序程序将应用程序数据结构映射到 HDF5 对象的层次结构。每个应用程序都将创建一个最适合其目的的映射。HDF5 抽象数据模型的对象被映射到 HDF5 存储模型的对象,并存储在一个存储介质中。存储的对象包括头块、自由列表、数据块、b- 树和其他对象。每个组或数据集都被存储为一个或多个标头和数据块。有关这些对象是如何组织的更多信息,请参阅 HDF5 文件格式规范。HDF5 库还可以使用其他库和模块,如压缩

需要注意的重要一点是,应用程序的对象、抽象数据模型和格式规范的对象之间不一定存在任何简单的对应关系。应用程序数据的组织,以及如何将其映射到 HDF5 抽象数据模型,都取决于应用程序开发人员。应用程序只需要处理库和抽象数据模型。大多数应用程序不需要考虑 HDF5 文件格式规范的任何细节,也不需要考虑抽象数据模型的对象如何转换到存储和进出存储的细节。

总而言之,HDF5 是一种全新的分层数据格式产品,由数据格式规范和支持库实现组成。HDF5 旨在解决较旧的 HDF 产品的一些限制,满足现代系统和应用需求。

2.   抽象数据模型

抽象数据模型(ADM)定义了用于定义和描述存储在文件中的复杂数据的概念。ADM 是一个非常通用的模型,它设计在概念上涵盖许多特定的模型。许多不同类型的数据可以被映射到 ADM 的对象上,因此可以使用 HDF5 进行存储和检索。然而,ADM 并不是任何特定问题或应用程序领域的模型。用户需要将他们的数据映射到 ADM 的概念上。

关键概念包括:

  • File 文件 - 计算机存储区(内存、磁盘等)中的连续字节字符串,和字节表示零或更多的对象的模型组的对象(包括组)
  • Group 组——对象(包括组)的集合数据。
  • Dataset 数据集——多维数组的数据元素属性和其他元数据数据空间多维数组的维度的。
  • Dataspace 数据空间 - 对一个多维数组的维度的描述。
  • Datatype 数据类型 - 对特定数据元素类的描述,包括它作为位模式的存储布局。
  • Attribute 属性——与组、数据集或命名数据类型相关联的命名数据值
  • Property List 属性列表——库中的一些参数(一些永久的和一些短暂的)控制选项。
  • Link 链接——对象的连接方式。

下面将更详细地描述这些关键概念。

2.1 File

抽象地说,HDF5 文件是一个有组织的对象集合的容器。这些对象是组、数据集和下面定义的其他对象。这些对象被组织成一个有根的有向图。每个 HDF5 文件都至少有一个对象,即根组。见下图。所有对象都是根组的成员或根组的后代。

attachments-2022-10-vI4a3Bzp6353bd1bcc269.png

HDF5 对象在单个 HDF5 文件中有一个唯一的标识,并且只能通过其在文件层次结构中的名称来访问。不同文件中的 HDF5 对象不一定具有唯一的身份,而且除了通过一个文件之外,不可能访问一个永久的 HDF5 对象。

当创建文件时,文件创建属性将指定文件的设置。文件创建属性包括版本信息和全局数据结构的参数。打开文件时,文件访问属性将指定对文件的当前访问的设置。文件访问属性包括存储驱动程序的参数以及缓存和垃圾收集的参数。文件创建属性将被永久地设置为文件的使用寿命,并且可以通过关闭和重新打开文件来更改文件访问属性。

一个 HDF5 文件可以作为另一个 HDF5 文件的一部分进行“挂载”。这类似于 Unix 文件系统的挂载。挂载文件的根目录被附加到挂载文件中的一个组中,所有的内容都可以像挂载文件是挂载文件的一部分一样被访问。

2.2  Group

HDF5 组类似于文件系统目录。抽象地说,一个组包含 0 个或多个对象,并且每个对象必须是至少一个组的成员。根组是一种特殊情况;它可能不是任何组的成员。

  • 发表于 · 2022.10.22 17:56 · 阅读 · 1366

[版权声明] :本文文字、代码及图片版权归原作者所有,任何媒体、网站或个人未经本网协议授权不得采集、整理、转载或以其他方式复制发表。已经本站协议授权的媒体、网站,在使用时必须注明“稿件来源:学研谷”。

1 条评论

请先 登录 后评论
猜猜我是谁
游客一枚 -研究生

0
提问
0
回答
3
文章