層級數據格式(Hierarchical Data Format:HDF)是設計用來存儲和組織大量數據的一組文件格式(HDF4HDF5)。它最初開發於美國國家超級計算應用中心,現在由非營利社團HDF Group支持,其任務是確保HDF5技術的持續開發和存儲在HDF中數據的持續可訪問性。

Hierarchical Data Format
HDF Group的logo
副檔名.hdf, .h4, .hdf4, .he2, .h5, .hdf5, .he5
網路媒體型式application/x-hdf、​application/x-hdf5
開發者The HDF Group
格式類型科學數據格式
免費格式?
網站www.hdfgroup.org/solutions/hdf5 編輯維基數據鏈接

伴隨着這個目標,HDF庫和相關工具可在自由的類BSD許可證下獲得用於一般使用。HDF被很多商業和非商業軟件平台所支持,包括JavaMATLABScilabOctaveMathematicaIDLPythonRFortranJulia。可免費獲得的HDF發行中包括了庫,命令行實用程序,測試套件源代碼,Java接口,和基於Java的HDF查看器(HDFView)[1]

當前版本是HDF5,在設計和API上與主要的遺留版本HDF4有顯著區別。

歷史

在1987年由美國國家超級計算應用中心(NCSA)的圖形基礎任務攻堅組(GFTF),着手建立一種架構無關的軟件庫和文件格式,致力於滿足NCSA在當時使用的多種不同計算平台之間,移送科學數據的需要。額外的目標還包括:有效的存儲和訪問大對象的能力,在一個容器內存儲不同類型的眾多對象的能力,增長格式來容納新類型的對象和對象元數據的能力,用C和Fortran二者的程序訪問存儲數據的能力。最初稱為AEHOO(全包容層級面向對象格式),新軟件和文件格式,最終叫做層級數據格式(HDF)。HDF的設計組合了來自很多不同格式的想法,包括TIFFCGMFITSMacintosh PICT英語PICT格式。這個計劃在1990年和1992年,收到了美國國家科學基金會(NSF)的至關重要的撥款。大約1990年代早期美國國家航空航天局(NASA),研究了用在地球觀測系統英語Earth Observing System(EOS)計劃中的15種不同文件格式。[2]在兩年評述過程之後,HDF被選擇為EOS數據和信息系統的標準格式[3]

1996年美國能源部勞倫斯利弗摩爾洛斯阿拉莫斯桑迪亞國家實驗室與NCSA,抽調人員成立了數據建模和格式(DMF)小組,研究滿足高級模擬和計算規劃(ASC)需要的並行I/O能力的文件格式。在NASA的額外支持下,三實驗室與NCSA,聯合開發了第一版的HDF5並於1998年發行。[2]在2007年NASA地球觀測系統英語Earth Observing System推薦使用HDF-EOS5[4]

HDF4

HDF4是這個格式的較老版本,它支持可增殖的不同數據模型,包括了多維陣列、光柵圖像和表格。每種都定義了特定的聚集數據類型,並提供一個API用來讀取、寫入、組織數據和元數據。HDF開發者和用戶可以增加新數據模型。

HDF是自描述的,允許應用程序解釋文件的結構和內容而不需要外部信息。一個HDF文件可以持有混合的有關聯的對象,它們可以作為一個群組或作為個別對象來訪問。用戶可以建立自己的叫做「vgroups」的群組結構。

HDF4格式有很多限制[5][6]。它缺乏清晰的對象模型,這導致持難於持續支持和改進。支持多種不同的接口風格(圖像、表格、陣列)導致了複雜的API。對元數據的支持依賴於使用的是哪個接口;SD(科學數據集)對象支持任意命名屬性,而其他類型只支持預定義的元數據。可能最重要的問題,是使用32-bit位有符號整數尋址,限制了HDF4文件大小極大為2GB,這在很多現代科學應用中是不可接受的。它仍被HDF Group活躍支持着,可見於其支持頁面[7]

HDF5

 
HDF結構舉例

HDF5格式被設計解決HDF4庫的某些限制,並致力於滿足現代系統和應用的當前和預期要求。

HDF5簡化了文件結構,只包含兩種主要的對象類型:

  • 數據集,它是同質類型的多維陣列
  • 群組,它是持有數據集和其他群組的容器結構。

這真正產生了層級的、類似文件系統的數據格式。事實上,在HDF5文件中的資源可以使用類似POSIX語法的「/路徑/至/資源」來訪問。元數據以用戶定義形式存儲,命名特性附加到群組和數據集之上。表示圖形和表格的更複雜存儲API,可以接着使用數據集、群組和特性來建造起來。

除了這些在文件格式上的進步,HDF5包括了改進的類型系統,和表示在數據集區域上選擇的數據空間對象。API是面向對象的,有關於數據集、群組、特性、類型、數據空間和屬性列表。

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

由於它使用了B樹來索引表格對象,HDF5有效工作於時間序列數據,比如股價序列,網絡監控數據,和3D氣象數據。大批量的數據直接進入陣列(表格對象),它可以比SQL數據庫的行存儲更快訪問,而非陣列的數據可獲得B樹訪問。HDF5數據存儲機制比SQL星模式英語Star schema更簡單和快速。

批評

對HDF5的批評來源於它的單體設計和冗長規定。

  • HDF5不強制使用UTF-8,所以客戶應用可能在多數位置上都預期ASCII碼。
  • 在文件中的數據集數據不能釋放,除非使用外部工具(h5repack)生成文件複本[8]

接口

官方支持的API

  • C
  • C++
  • CLI - .Net
  • FortranFortran 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庫訪問[9]
  • D語言,提供到C API的綁定[10],有着高層h5py風格的包裝器正在開發。
  • Dymola[11],使用叫做科學數據格式(SDF)的實現支持HDF5導出,自從Dymola 2016 FD01發行。
  • ErlangElixirLFE英語LFE (programming language)語言,可以使用BEAM語言綁定[12]
  • GNU數據語言,支持訪問HDF5和HDF4。
  • Go語言,通過gonum[13]的hdf5包[14]
  • HDFql[15],使用戶能用C、C++、Java、Python、C#、Fortran和R語言通過高層語言(類似SQL)管理HDF5文件。
  • Huygens軟件[16],自從版本3.5使用HDF5作為主存儲。
  • IDL,提供訪問HDF5的API。
  • IGOR Pro[17],提供對HDF5文件的完全支持[18]
  • JHDF5庫[19],是一個可替代的Java綁定,採用了與官方HDF5 Java綁定不同的方式,一些用戶覺得更簡單。
  • jHDF庫[20],一個純Java實現,提供了對HDF5文件的只讀訪問。
  • JSON,通過hdf5-json[21]
  • Julia語言,通過HDF5包[22]提供HDF5支持。
  • LabVIEW,可以通過第三方庫獲得HDF支持,比如h5labview[23]和lvhdf5[24]
  • Lua,通過lua-hdf5[25]庫。
  • MATLABScilabOctave,在新近發行中使用HDF5作為主存儲格式。
  • Mathematica HDF導入和導出[26],提供HDF和HDF5數據的直接分析。
  • Perl語言,通過PDL::IO::HDF5訪問[27]
  • Python語言,對於HDF5,可通過支持抽象高層訪問和低層訪問二者的h5py[28],或通過具有高級索引和類似數據庫查詢能力的高層接口的PyTables[29]。對於HDF4,可通過Python-HDF4[30]和/或PyHDF[31]。流行的數據操縱包pandas可以通過PyTables導入和導出HDF5。
  • R語言,通過rhdf5[32]和hdf5r[33]包提供支持。
  • Rust語言,通過第三方庫獲得HDF支持,比如hdf庫[34]

工具

  • Apache Spark HDF5 Connector[35],用於Apache Spark的HDF5連接器
  • Apache Drill HDF5 Plugin[36],用於Apache Drill的HDF5插件,允許在HDF5文件集上執行SQL查詢
  • HDF Product Designer[37],可互操作的HDF5數據產品建立GUI工具
  • HDF Explorer[38],可讀取HDF、HDF5和netCDF的數據可視化程序
  • HDFView[39],基於Java的HDF文件的瀏覽器和編輯器
  • ViTables[40],用Python寫的HDF5和PyTables文件的瀏覽器和編輯器
  • Panoply[41],基於Java的netCDF、HDF和GRIB數據查看器

參見

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

引用

  1. ^ Java-based HDF Viewer (HDFView). [2019-06-05]. (原始內容存檔於2016-08-11). 
  2. ^ 2.0 2.1 HDF Group History. [2019-06-08]. (原始內容存檔於2019-06-08). 
  3. ^ HDF-EOS Tools and information Center. [2023-10-09]. (原始內容存檔於2023-10-21). 
  4. ^ HDF-EOS5 Data Model, File Format and Library. [2023-10-09]. (原始內容存檔於2023-11-10). 
  5. ^ How is HDF5 different from HDF4?. [2019-06-05]. (原始內容存檔於2009-03-30). 
  6. ^ Are there limitations to HDF4 files?. [2019-06-05]. (原始內容存檔於2016-04-19). 
  7. ^ 支持頁面頁面存檔備份,存於網際網路檔案館
  8. ^ Rossant, Cyrille. Moving away from HDF5. cyrille.rossant.net. [21 April 2016]. (原始內容存檔於2016-01-08). 
  9. ^ hdf5-cffi頁面存檔備份,存於網際網路檔案館
  10. ^ 到C API的綁定頁面存檔備份,存於網際網路檔案館
  11. ^ Dymola頁面存檔備份,存於網際網路檔案館
  12. ^ BEAM語言綁定頁面存檔備份,存於網際網路檔案館
  13. ^ gonum頁面存檔備份,存於網際網路檔案館
  14. ^ hdf5頁面存檔備份,存於網際網路檔案館
  15. ^ HDFql頁面存檔備份,存於網際網路檔案館
  16. ^ Huygens軟件頁面存檔備份,存於網際網路檔案館
  17. ^ IGOR Pro頁面存檔備份,存於網際網路檔案館
  18. ^ Igor Pro includes extensive support for reading and writing HDF5 files through an included HDF5 package頁面存檔備份,存於網際網路檔案館).
  19. ^ JHDF5庫頁面存檔備份,存於網際網路檔案館
  20. ^ jHDF庫頁面存檔備份,存於網際網路檔案館
  21. ^ hdf5-json頁面存檔備份,存於網際網路檔案館
  22. ^ HDF5頁面存檔備份,存於網際網路檔案館
  23. ^ h5labview頁面存檔備份,存於網際網路檔案館
  24. ^ lvhdf5頁面存檔備份,存於網際網路檔案館
  25. ^ lua-hdf5頁面存檔備份,存於網際網路檔案館
  26. ^ HDF Import and Export頁面存檔備份,存於網際網路檔案館)Mathematica documentation
  27. ^ PDL::IO::HDF5. [2019-06-05]. (原始內容存檔於2019-06-05). 
  28. ^ h5py頁面存檔備份,存於網際網路檔案館
  29. ^ PyTables頁面存檔備份,存於網際網路檔案館
  30. ^ Python-HDF4頁面存檔備份,存於網際網路檔案館
  31. ^ PyHDF頁面存檔備份,存於網際網路檔案館
  32. ^ rhdf5頁面存檔備份,存於網際網路檔案館
  33. ^ hdf5r頁面存檔備份,存於網際網路檔案館
  34. ^ hdf5頁面存檔備份,存於網際網路檔案館
  35. ^ Apache Spark HDF5 Connector
  36. ^ Apache Drill HDF5 Plugin
  37. ^ HDF Product Designer頁面存檔備份,存於網際網路檔案館
  38. ^ HDF Explorer頁面存檔備份,存於網際網路檔案館
  39. ^ HDFView頁面存檔備份,存於網際網路檔案館
  40. ^ ViTables頁面存檔備份,存於網際網路檔案館
  41. ^ Panoply. [2023-08-11]. (原始內容存檔於2023-11-09). 

外部連結