HDF

出自Local Chinese Wikipedia
(重新導向自HDF4
跳至導覽 跳至搜尋
Hierarchical Data Format
File:HDF logo (2017).svg
HDF Group的logo
副檔名.hdf, .h4, .hdf4, .he2, .h5, .hdf5, .he5
網路媒體型式{{#property:P1163}}
開發者The HDF Group
格式類型科學數據格式
免費格式?
網站{{URL|example.com|可选的显示文本}}Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)

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

伴隨着這個目標,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[編輯]

File:HDF-Structure-Example.gif
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). 

外部鏈接[編輯]