HDF

层级数据格式（Hierarchical Data Format：HDF）是设计用来存储和组织大量数据的一组文件格式（HDF4，HDF5）。它最初开发于美国国家超级计算应用中心，现在由非营利社团HDF Group支持，其任务是确保HDF5技术的持续开发和存储在HDF中数据的持续可访问性。

伴随着这个目标，HDF库和相关工具可在自由的类BSD许可证下获得用于一般使用。HDF被很多商业和非商业软件平台所支持，包括Java、MATLAB、Scilab、Octave、Mathematica、IDL、Python、R、Fortran和Julia。可免费获得的HDF发行中包括了库，命令行实用程序，测试套件源代码，Java接口，和基于Java的HDF查看器（HDFView）。

当前版本是HDF5，在设计和API上与主要的遗留版本HDF4有显著区别。

历史

在1987年由美国国家超级计算应用中心（NCSA）的图形基础任务攻坚组（GFTF），着手建立一种架构无关的软件库和文件格式，致力于满足NCSA在当时使用的多种不同计算平台之间，移送科学数据的需要。额外的目标还包括：有效的存储和访问大对象的能力，在一个容器内存储不同类型的众多对象的能力，增长格式来容纳新类型的对象和对象元数据的能力，用C和Fortran二者的程序访问存储数据的能力。最初称为AEHOO（全包容层级面向对象格式），新软件和文件格式，最终叫做层级数据格式（HDF）。HDF的设计组合了来自很多不同格式的想法，包括TIFF、CGM、FITS和Macintosh 格式。这个计划在1990年和1992年，收到了美国国家科学基金会（NSF）的至关重要的拨款。大约1990年代早期美国国家航空航天局（NASA），研究了用在（EOS）计划中的15种不同文件格式。在两年评述过程之后，HDF被选择为EOS数据和信息系统的标准格式。

1996年美国能源部的劳伦斯利弗摩尔、洛斯阿拉莫斯和桑迪亚国家实验室与NCSA，抽调人员成立了数据建模和格式（DMF）小组，研究满足高级模拟和计算规划（ASC）需要的并行I/O能力的文件格式。在NASA的额外支持下，三实验室与NCSA，联合开发了第一版的HDF5并于1998年发行。在2007年NASA推荐使用HDF-EOS5。

HDF4

HDF4是这个格式的较老版本，它支持可增殖的不同数据模型，包括了多维阵列、光栅图像和表格。每种都定义了特定的聚集数据类型，并提供一个API用来读取、写入、组织数据和元数据。HDF开发者和用户可以增加新数据模型。

HDF是自描述的，允许应用程序解释文件的结构和内容而不需要外部信息。一个HDF文件可以持有混合的有关联的对象，它们可以作为一个群组或作为个别对象来访问。用户可以建立自己的叫做“vgroups”的群组结构。

HDF4格式有很多限制。它缺乏清晰的对象模型，这导致持难于持续支持和改进。支持多种不同的接口风格（图像、表格、阵列）导致了复杂的API。对元数据的支持依赖于使用的是哪个接口；SD（科学数据集）对象支持任意命名属性，而其他类型只支持预定义的元数据。可能最重要的问题，是使用32-bit位有符号整数寻址，限制了HDF4文件大小极大为2GB，这在很多现代科学应用中是不可接受的。它仍被HDF Group活跃支持着，可见于其支持页面支持页面 。

HDF5
HDF5格式被设计解决HDF4库的某些限制，并致力于满足现代系统和应用的当前和预期要求。

HDF5简化了文件结构，只包含两种主要的对象类型：
数据集，它是同质类型的多维阵列；
群组，它是持有数据集和其他群组的容器结构。
这真正产生了层级的、类似文件系统的数据格式。事实上，在HDF5文件中的资源可以使用类似POSIX语法的“/路径/至/资源”来访问。元数据以用户定义形式存储，命名特性附加到群组和数据集之上。表示图形和表格的更复杂存储API，可以接着使用数据集、群组和特性来建造起来。

除了这些在文件格式上的进步，HDF5包括了改进的类型系统，和表示在数据集区域上选择的数据空间对象。API是面向对象的，有关于数据集、群组、特性、类型、数据空间和属性列表。

最新版的NetCDF版本4基于了HDF5。

由于它使用了B树来索引表格对象，HDF5有效工作于时间序列数据，比如股价序列，网络监控数据，和3D气象数据。大批量的数据直接进入阵列（表格对象），它可以比SQL数据库的行存储更快访问，而非阵列的数据可获得B树访问。HDF5数据存储机制比SQL更简单和快速。

 批评 

对HDF5的批评来源于它的单体设计和冗长规定。
HDF5不强制使用UTF-8，所以客户应用可能在多数位置上都预期ASCII码。
在文件中的数据集数据不能释放，除非使用外部工具（h5repack）生成文件复本。

接口

官方支持的API

 C
 C++
 CLI - .Net
 Fortran，Fortran 90
 HDF5 Lite (H5LT) – 轻量级C接口
 HDF5 Image (H5IM) – 图像和光栅的C接口
 HDF5 Table (H5TB) – 表格的C接口
 HDF5 Packet Table (H5PT) – 处理“包”数据的C和C++接口，高速访问
 HDF5 Dimension Scale (H5DS) – 允许向HDF5增加维度缩放 
Java

第三方绑定

 CGNS，使用HDF5作为主存储。
 Common Lisp，通过hdf5-cffi库访问hdf5-cffi 。
 D语言，提供到C API的绑定到C API的绑定 ，有着高层h5py风格的包装器正在开发。
 DymolaDymola ，使用叫做科学数据格式（SDF）的实现支持HDF5导出，自从Dymola 2016 FD01发行。
 Erlang、Elixir和语言，可以使用BEAM语言绑定BEAM语言绑定 。
 GNU数据语言，支持访问HDF5和HDF4。
 Go语言，通过gonumgonum 的hdf5包hdf5 。
 HDFqlHDFql，使用户能用C、C++、Java、Python、C#、Fortran和R语言通过高层语言（类似SQL）管理HDF5文件。
 Huygens软件Huygens软件 ，自从版本3.5使用HDF5作为主存储。
 IDL，提供访问HDF5的API。
 IGOR ProIGOR Pro ，提供对HDF5文件的完全支持Igor Pro includes extensive support for reading and writing HDF5 files through an included HDF5 package .。
 JHDF5库JHDF5库 ，是一个可替代的Java绑定，采用了与官方HDF5 Java绑定不同的方式，一些用户觉得更简单。
 jHDF库jHDF库，一个纯Java实现，提供了对HDF5文件的只读访问。
 JSON，通过hdf5-jsonhdf5-json。
 Julia语言，通过HDF5包HDF5 提供HDF5支持。
 LabVIEW，可以通过第三方库获得HDF支持，比如h5labviewh5labview 和lvhdf5lvhdf5 。
 Lua，通过lua-hdf5lua-hdf5库。
 MATLAB、Scilab或Octave，在新近发行中使用HDF5作为主存储格式。
 Mathematica HDF导入和导出HDF Import and Export Mathematica documentation，提供HDF和HDF5数据的直接分析。
 Perl语言，通过PDL::IO::HDF5访问。
 Python语言，对于HDF5，可通过支持抽象高层访问和低层访问二者的h5pyh5py ，或通过具有高级索引和类似数据库查询能力的高层接口的PyTablesPyTables 。对于HDF4，可通过Python-HDF4Python-HDF4 和/或PyHDFPyHDF 。流行的数据操纵包pandas可以通过导入和导出HDF5。
 R语言，通过rhdf5rhdf5和hdf5rhdf5r包提供支持。
 Rust语言，通过第三方库获得HDF支持，比如hdf库hdf5 。

工具

 Apache Spark HDF5 ConnectorApache Spark HDF5 Connector，用于Apache Spark的HDF5连接器
 Apache Drill HDF5 PluginApache Drill HDF5 Plugin，用于Apache Drill的HDF5插件，允许在HDF5文件集上执行SQL查询
 HDF Product DesignerHDF Product Designer ，可互操作的HDF5数据产品建立GUI工具
 HDF ExplorerHDF Explorer，可读取HDF、HDF5和netCDF的数据可视化程序
 HDFViewHDFView ，基于Java的HDF文件的浏览器和编辑器
 ViTablesViTables ，用Python写的HDF5和PyTables文件的浏览器和编辑器
 Panoply，基于Java的netCDF、HDF和GRIB数据查看器

参见
通用数据格式 (CDF)
FITS，用于天文学的数据格式
GRIB (GRIdded Binary)，用于气象学的数据格式
NetCDF，Netcdf Java库使用纯Java读取HDF5、HDF4、HDF-EOS和其他格式 
Protocol Buffers，Google的数据交换格式

引用

外部链接

What is HDF5? 
HDF-EOS Tools and Information Center 
Open Navigation Surface 
HDF5使用简介

Category:C函式库
Category:文件格式
Category:地球科学数据格式
Category:氣象數據和網絡