HDF5

**層級資料格式**（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 PICT 格式。這個計劃在 1990 年和 1992 年收到了美國國家科學基金會（NSF）的至關重要的撥款。大約 1990 年代早期美國國家航空暨太空總署（NASA）研究了用在地球觀測系統（EOS）計劃中的 15 種不同檔案格式。在兩年評述過程之後，HDF 被選擇為 EOS 資料和資訊系統的標準格式。

1996 年美國能源部的勞倫斯利弗摩爾、洛斯阿拉莫斯和桑迪亞國家實驗室與 NCSA 抽調人員成立了資料建模和格式（DMF）小組，研究滿足進階類比和計算規劃（ASC）需要的並列 I/O 能力的檔案格式。在 NASA 的額外支援下，三實驗室與 NCSA 聯合開發了第一版的 HDF5 並於 1998 年發行。在 2003 年，R&D 雜誌評選 HDF5 為「2002 年一百個技術上最重要的新產品之一」。

## 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 作為主記憶體儲。
* hdf5-cffi。
* D 語言提供到 C API 的繫結，有著高層 h5py 風格的包裝器正在開發。
* Dymola 使用叫做科學資料格式（SDF）的實現支援 HDF5 匯出，自從 Dymola 2016 FD01 發行。
* Erlang、Elixir 和 LFE 語言可以使用 BEAM 語言繫結。
* GNU 資料語言。
* Go 語言，通過 gonum 的 hdf5 包。
* HDFql 使使用者能用 C、C++、Java、Python、C#、Fortran 和 R 語言通過高層語言（類似 SQL）管理 HDF5 檔案。
* Huygens 軟體自從版本 3.5 使用 HDF5 作為主記憶體儲。
* IDL。
* IGOR Pro 提供對 HDF5 檔案的完全支援。
* JHDF5 庫，是一個可替代的 Java 繫結，採用了與官方 HDF5 Java 繫結不同的方式，一些使用者覺得更簡單。
* jHDF 庫，一個純 Java 實現，提供了對 HDF5 檔案的唯讀存取。
* JSON，通過 hdf5-json。
* Julia 語言通過 HDF5 包提供 HDF5 支援。
* LabVIEW 可以通過第三方庫獲得 HDF 支援，比如 h5labview 和 lvhdf5。
* Lua，通過 lua-hdf5 庫。
* MATLAB、Scilab 或 Octave，在新近發行中使用 HDF5 作為主記憶體儲格式。
* Mathematica HDF Import and Export 提供 HDF 和 HDF5 資料的直接分析。
* Perl 語言。
* Python 語言通過 h5py（對 HDF5 抽象的高層和低層存取二者）和通過 PyTables（帶有進階索引和類似資料庫查詢能力的高層介面）支援 HDF5。通過 Python-HDF4 和 / 或 PyHDF 對於 Python 2 和 Python 3 二者支援 HDF4。流行的資料操縱包 pandas 可以通過 PyTables 匯入和匯出 HDF5。
* R 語言通過 rhdf5 和 hdf5r 包提供支援。
* Rust 語言通過第三方庫獲得 HDF 支援，比如 hdf 庫。

## 工具

* Apache Spark HDF5 Connector，用於 Apache Spark 的 HDF5 連接器
* Apache Drill HDF5 Plugin，用於 Apache Drill 的 HDF5 外掛程式，允許在 HDF5 檔案集上執行 SQL 查詢
* HDF Product Designer，可互操作的 HDF5 資料產品建立 GUI 工具
* HDF Explorer，可讀取 HDF、HDF5 和 netCDF 的資料視覺化程式
* HDFView，HDF 檔案的瀏覽器和編輯器
* ViTables，用 Python 寫的 HDF5 和 PyTables 檔案的瀏覽器和編輯器

## 參見

* 通用資料格式 (CDF)
* FITS，用於天文學的資料格式
* GRIB (GRIdded Binary)，用於氣象學的資料格式
* HDF Explorer
* NetCDF，Netcdf Java 庫使用純 Java 讀取 HDF5、HDF4、HDF-EOS 和其他格式
* Protocol Buffers，Google 的資料交換格式

## 參照

本條目部分或全部內容出自以 GFDL 授權發佈的《自由線上電腦詞典》（FOLDOC）。

## 外部連結

* 官方網站
* What is HDF5? （頁面存檔備份，存於網際網路檔案館）
* HDF-EOS Tools and Information Center （頁面存檔備份，存於網際網路檔案館）
* Open Navigation Surface （頁面存檔備份，存於網際網路檔案館）
* HDF5 使用簡介