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).