層級數據格式(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). 

外部連結