HDF
層級數據格式(Hierarchical Data Format:HDF)是設計用來存儲和組織大量數據的一組文件格式(HDF4,HDF5)。它最初開發於美國國家超級計算應用中心,現在由非營利社團HDF Group支持,其任務是確保HDF5技術的持續開發和存儲在HDF中數據的持續可訪問性。
副檔名 | .hdf , .h4 , .hdf4 , .he2 , .h5 , .hdf5 , .he5 |
---|---|
網路媒體型式 | application/x-hdf、application/x-hdf5 |
開發者 | The HDF Group |
格式類型 | 科學數據格式 |
免費格式? | 是 |
網站 | www |
伴隨着這個目標,HDF庫和相關工具可在自由的類BSD許可證下獲得用於一般使用。HDF被很多商業和非商業軟件平台所支持,包括Java、MATLAB、Scilab、Octave、Mathematica、IDL、Python、R、Fortran和Julia。可免費獲得的HDF發行中包括了庫,命令行實用程序,測試套件源代碼,Java接口,和基於Java的HDF查看器(HDFView)[1]。
當前版本是HDF5,在設計和API上與主要的遺留版本HDF4有顯著區別。
歷史
在1987年由美國國家超級計算應用中心(NCSA)的圖形基礎任務攻堅組(GFTF),着手建立一種架構無關的軟件庫和文件格式,致力於滿足NCSA在當時使用的多種不同計算平台之間,移送科學數據的需要。額外的目標還包括:有效的存儲和訪問大對象的能力,在一個容器內存儲不同類型的眾多對象的能力,增長格式來容納新類型的對象和對象元數據的能力,用C和Fortran二者的程序訪問存儲數據的能力。最初稱為AEHOO(全包容層級面向對象格式),新軟件和文件格式,最終叫做層級數據格式(HDF)。HDF的設計組合了來自很多不同格式的想法,包括TIFF、CGM、FITS和Macintosh PICT格式。這個計劃在1990年和1992年,收到了美國國家科學基金會(NSF)的至關重要的撥款。大約1990年代早期美國國家航空航天局(NASA),研究了用在地球觀測系統(EOS)計劃中的15種不同文件格式。[2]在兩年評述過程之後,HDF被選擇為EOS數據和信息系統的標準格式[3]。
1996年美國能源部的勞倫斯利弗摩爾、洛斯阿拉莫斯和桑迪亞國家實驗室與NCSA,抽調人員成立了數據建模和格式(DMF)小組,研究滿足高級模擬和計算規劃(ASC)需要的並行I/O能力的文件格式。在NASA的額外支持下,三實驗室與NCSA,聯合開發了第一版的HDF5並於1998年發行。[2]在2007年NASA地球觀測系統推薦使用HDF-EOS5[4]。
HDF4
HDF4是這個格式的較老版本,它支持可增殖的不同數據模型,包括了多維陣列、光柵圖像和表格。每種都定義了特定的聚集數據類型,並提供一個API用來讀取、寫入、組織數據和元數據。HDF開發者和用戶可以增加新數據模型。
HDF是自描述的,允許應用程序解釋文件的結構和內容而不需要外部信息。一個HDF文件可以持有混合的有關聯的對象,它們可以作為一個群組或作為個別對象來訪問。用戶可以建立自己的叫做「vgroups」的群組結構。
HDF4格式有很多限制[5][6]。它缺乏清晰的對象模型,這導致持難於持續支持和改進。支持多種不同的接口風格(圖像、表格、陣列)導致了複雜的API。對元數據的支持依賴於使用的是哪個接口;SD(科學數據集)對象支持任意命名屬性,而其他類型只支持預定義的元數據。可能最重要的問題,是使用32-bit位有符號整數尋址,限制了HDF4文件大小極大為2GB,這在很多現代科學應用中是不可接受的。它仍被HDF Group活躍支持着,可見於其支持頁面[7]。
HDF5
HDF5格式被設計解決HDF4庫的某些限制,並致力於滿足現代系統和應用的當前和預期要求。
HDF5簡化了文件結構,只包含兩種主要的對象類型:
- 數據集,它是同質類型的多維陣列;
- 群組,它是持有數據集和其他群組的容器結構。
這真正產生了層級的、類似文件系統的數據格式。事實上,在HDF5文件中的資源可以使用類似POSIX語法的「/路徑/至/資源」來訪問。元數據以用戶定義形式存儲,命名特性附加到群組和數據集之上。表示圖形和表格的更複雜存儲API,可以接着使用數據集、群組和特性來建造起來。
除了這些在文件格式上的進步,HDF5包括了改進的類型系統,和表示在數據集區域上選擇的數據空間對象。API是面向對象的,有關於數據集、群組、特性、類型、數據空間和屬性列表。
最新版的NetCDF版本4基於了HDF5。
由於它使用了B樹來索引表格對象,HDF5有效工作於時間序列數據,比如股價序列,網絡監控數據,和3D氣象數據。大批量的數據直接進入陣列(表格對象),它可以比SQL數據庫的行存儲更快訪問,而非陣列的數據可獲得B樹訪問。HDF5數據存儲機制比SQL星模式更簡單和快速。
批評
對HDF5的批評來源於它的單體設計和冗長規定。
接口
官方支持的API
第三方綁定
- CGNS,使用HDF5作為主存儲。
- Common Lisp,通過hdf5-cffi庫訪問[9]。
- D語言,提供到C API的綁定[10],有着高層h5py風格的包裝器正在開發。
- Dymola[11],使用叫做科學數據格式(SDF)的實現支持HDF5導出,自從Dymola 2016 FD01發行。
- Erlang、Elixir和LFE語言,可以使用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]庫。
- MATLAB、Scilab或Octave,在新近發行中使用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的數據交換格式
引用
- ^ Java-based HDF Viewer (HDFView). [2019-06-05]. (原始內容存檔於2016-08-11).
- ^ 2.0 2.1 HDF Group History. [2019-06-08]. (原始內容存檔於2019-06-08).
- ^ HDF-EOS Tools and information Center. [2023-10-09]. (原始內容存檔於2023-10-21).
- ^ HDF-EOS5 Data Model, File Format and Library. [2023-10-09]. (原始內容存檔於2023-11-10).
- ^ How is HDF5 different from HDF4?. [2019-06-05]. (原始內容存檔於2009-03-30).
- ^ Are there limitations to HDF4 files?. [2019-06-05]. (原始內容存檔於2016-04-19).
- ^ 支持頁面 (頁面存檔備份,存於網際網路檔案館)
- ^ Rossant, Cyrille. Moving away from HDF5. cyrille.rossant.net. [21 April 2016]. (原始內容存檔於2016-01-08).
- ^ hdf5-cffi (頁面存檔備份,存於網際網路檔案館)
- ^ 到C API的綁定 (頁面存檔備份,存於網際網路檔案館)
- ^ Dymola (頁面存檔備份,存於網際網路檔案館)
- ^ BEAM語言綁定 (頁面存檔備份,存於網際網路檔案館)
- ^ gonum (頁面存檔備份,存於網際網路檔案館)
- ^ hdf5 (頁面存檔備份,存於網際網路檔案館)
- ^ HDFql(頁面存檔備份,存於網際網路檔案館)
- ^ Huygens軟件 (頁面存檔備份,存於網際網路檔案館)
- ^ IGOR Pro (頁面存檔備份,存於網際網路檔案館)
- ^ Igor Pro includes extensive support for reading and writing HDF5 files through an included HDF5 package (頁面存檔備份,存於網際網路檔案館).
- ^ JHDF5庫 (頁面存檔備份,存於網際網路檔案館)
- ^ jHDF庫(頁面存檔備份,存於網際網路檔案館)
- ^ hdf5-json(頁面存檔備份,存於網際網路檔案館)
- ^ HDF5 (頁面存檔備份,存於網際網路檔案館)
- ^ h5labview (頁面存檔備份,存於網際網路檔案館)
- ^ lvhdf5 (頁面存檔備份,存於網際網路檔案館)
- ^ lua-hdf5(頁面存檔備份,存於網際網路檔案館)
- ^ HDF Import and Export (頁面存檔備份,存於網際網路檔案館)Mathematica documentation
- ^ PDL::IO::HDF5. [2019-06-05]. (原始內容存檔於2019-06-05).
- ^ h5py (頁面存檔備份,存於網際網路檔案館)
- ^ PyTables (頁面存檔備份,存於網際網路檔案館)
- ^ Python-HDF4 (頁面存檔備份,存於網際網路檔案館)
- ^ PyHDF (頁面存檔備份,存於網際網路檔案館)
- ^ rhdf5(頁面存檔備份,存於網際網路檔案館)
- ^ hdf5r(頁面存檔備份,存於網際網路檔案館)
- ^ hdf5 (頁面存檔備份,存於網際網路檔案館)
- ^ Apache Spark HDF5 Connector
- ^ Apache Drill HDF5 Plugin
- ^ HDF Product Designer (頁面存檔備份,存於網際網路檔案館)
- ^ HDF Explorer(頁面存檔備份,存於網際網路檔案館)
- ^ HDFView (頁面存檔備份,存於網際網路檔案館)
- ^ ViTables (頁面存檔備份,存於網際網路檔案館)
- ^ Panoply. [2023-08-11]. (原始內容存檔於2023-11-09).