Hierarchical Data Format
Icon and logo for The HDF Group | |
拡張子 | .hdf , .h4 , .hdf4 , .he2 , .h5 , .hdf5 , .he5 |
---|---|
MIMEタイプ | application/x-hdf、application/x-hdf5 |
マジック ナンバー | \211HDF\r\n\032\n |
開発者 | The HDF Group |
最新版 | |
種別 | Scientific data format |
オープン フォーマット | Yes |
ウェブサイト | www |
Hierarchical Data Format(HDF)は、大量のデータを格納および構造化するために設計した一連のファイル形式(HDF4、HDF5)。米国立スーパーコンピュータ応用研究所が開発し、非営利法人である HDF グループが対応している。HDFグループは、HDF5 技術の継続的な開発と HDF で保存しデータの継続的な提供を確保することを使命としている。
HDF ライブラリと関連ツールは自由なBSDライセンスの下で幅広く利用できる。 HDF は多くの商用および非商用ソフトウェアプラットフォームとプログラミング言語でサポートされている。 無料で利用できる HDF ディストリビューションは、ライブラリ、コマンドラインユーティリティ、テストスイートソース、Java インターフェイス、Java ベースのHDFビューアー(HDFView)で構成されている。 [2]
現行の HDF5 は、旧来の HDF4 とはデザインも API も大きく異なる。
初期の歴史
[編集]ポータブルな科学データ形式は当初 AEHOO(All Encompassing Hierarchical Object Oriented)形式と呼ばれ、1987年に米国立スーパーコンピュータ応用研究所(NCSA)のグラフィック財団タスクフォース(GFTF)によって探求が始められた。 1990年と1992年に受け取った NSF 助成金は同プロジェクトにとって重要だった。 この頃 NASA は、地球観測システム(EOS)プロジェクトで使用するために 15 種類のファイル形式を調査した。2 年間の評価期間を経て、HDF がデータおよび情報システムの標準として採用された[3]。
HDF4
[編集]HDF4 はこのフォーマットの旧バージョンだが、HDF グループは現在も積極的にサポートしており、多次元配列、ラスターイメージ、テーブルなど、多様なデータモデルに対応している。それぞれに集計データタイプが定義され、データとメタデータの読み取り、書き込み、および構造化のための API が提供されている。 HDF 開発者やユーザーは、新しいデータモデルを追加できる。
HDF は自己記述型であり、アプリケーションは外部情報なしでファイルの構造と内容を解釈できる。 1つの HDF ファイルには関連するオブジェクトが混在し、それぞれがグループまたは個別のオブジェクトとしてアクセスできる。 ユーザーは、「vgroup」と呼ばれる独自のグループ化構造を作成できる。
HDF4 には多くの制限がある [4] [5] 。まず、明確なオブジェクトモデルがないため、継続的なサポートと改善が困難である。 多くの異なるインターフェイススタイル(画像、テーブル、配列)をサポートすることで、API が複雑になる。メタデータのサポートは、使用されているインターフェースによって異なる。 SD (Scientific Dataset)オブジェクトは任意の名前付き属性をサポートするが、他のタイプは事前定義されたメタデータのみをサポートする。 アドレス指定に32ビットの符号付き整数を使用しているため一つのファイルの容量が 2 GB までに制限されていることが一番の問題かもしれない。このことは、現代科学の多くの場面で受け入れられない。
HDF5
[編集]HDF5は、HDF4ライブラリのいくつかの制限に対処し、モダンなシステムとアプリケーションにおける現在および将来的な要件に対応するべく設計された。2002 年にR&D 100 Awardを受賞した[6]。
HDF5はファイル構造を単純化しており、オブジェクトのタイプには下記の 2 つしかない。
- データセット - 同じタイプの多次元配列
- グループ - データセットや他のグループを保持できるコンテナ構造
このことにより、真に階層的な、ファイルシステムのようなデータ形式になる。実際、HDF5ファイル内のリソースには、POSIX風の構文(/path/to/resource)でアクセスできる。 メタデータは、グループとデータセットに添付されたユーザー定義の名前付き属性の形式で保存される。 次に、データセット、グループ、および属性を使用して、画像とテーブルを表すより複雑なストレージAPIを構築できる。
これらのファイル形式の進歩に加えて、HDF5には、改良された型システムと、データセット領域での選択を表すデータスペースオブジェクトが含まれている。 APIは、データセット、グループ、属性、タイプ、データスペース、およびプロパティリストに関してオブジェクト指向でもある。
NetCDF の最新バージョン(version 4)は、HDF5 に基づいている。
B木を使用してテーブルオブジェクトのインデックスを作成するため、HDF5は株価シリーズ、ネットワークモニタリングデータ、3D気象データなどの時系列データに適している。 データの大部分は SQL データベースの行よりもはるかに高速にアクセスできる単純な配列(テーブルオブジェクト)となるが、非配列データにはB木アクセスを利用できる。 HDF5データストレージの機構は、SQL スタースキーマよりも単純かつ高速である。
批判
[編集]モノリシックな設計と長い仕様から批判されている。
- HDF5はUTF-8の使用を強制しないため、クライアントアプリケーションは多くの場面でASCIIを想定している可能性がある。
- データセットデータは、外部ツール(h5repack)を使用してファイルコピーを生成しないと、ファイル内で解放できない。 [7]
インターフェース
[編集]公式にサポートされているAPI
[編集]- C
- C++
- CLI - .Net
- Fortran, Fortran 90
- HDF5 Lite(H5LT)– C 用の軽量インターフェイス
- HDF5 Image(H5IM)– 画像またはラスター用の C インターフェイス
- HDF5 Table(H5TB)– テーブルの C インターフェイス
- HDF5 Packet Table(H5PT)– パケットデータを処理する C および C++ のインターフェイス
- HDF5 Dimension Scale(H5DS)
- Java
サードパーティのバインディング
[編集]- CGNS – HDF5 をメインのストレージとして使用する
- Common Lisp – hdf5-cffi ライブラリ
- D – 開発中の高レベルの h5py スタイルの D ラッパーを使用して、C APIへのバインディングを提供する
- Dymola – リリース Dymola 2016 FD01 で SDF (Scientific Data Format) と呼ばれる実装を使用したHDF5エクスポートのサポートを導入した
- Erlang、Elixir、LFE は、BEAM 言語のバインディングを使用できる
- GNU データ言語
- Go – gonumのhdf5パッケージ。
- HDFql – C、C++、Java、Python、C#、Fortran、R の高水準言語(SQL に類似)を介して HDF5 ファイルを管理できる
- Huygens Software – バージョン3.5以降、プライマリのストレージ形式として HDF5 を使用している
- IDL
- IGOR Pro – HDF5 ファイルを完全にサポートしている
- JHDF5 [8] – 一部のユーザーが簡単だと感じる公式の HDF5 Java バインディングとは異なるアプローチを取る代替 Java バインディング
- jHDF – HDF5ファイルへの読み取り専用アクセスを提供する純粋なJava実装
- JSON – hdf5-json 。
- Julia – HDF5パッケージを通じて HDF5 サポートを提供する
- LabVIEW – h5labview や lvhdf5 などのサードパーティライブラリを通じてHDFサポートを取得できる。
- lua-hdf5 – ライブラリを介した Lua
- MATLAB, Scilab, Octave – 最近のリリースでは、HDF5をプライマリストレージフォーマットとして使用
- Mathematica [9] – HDF および HDF5 データの即時分析を提供する
- Perl [10]
- Python – h5py (HDF5 概念への高レベルと低レベルの両方のアクセス)とPyTables (高度なインデックス作成とデータベースのようなクエリ機能を備えた高レベルインターフェイス)を介して HDF5 をサポートする。
HDF4 は、 Python-HDF4またはPyHDFを介して、Python 2 とPython 3 の両方で利用できる。 データ操作パッケージ pandas は、 PyTables を介してHDF5 からのインポートおよび HDF5 へのエクスポートが可能である
ツール
[編集]- Apache Spark HDF5 コネクタ – Apache Spark の HDF5 コネクタ
- Apache Drill HDF5 プラグイン – Apache Drill の HDF5 プラグインは、HDF5ファイルを介したSQLクエリを可能にする。
- HDF Product Designer – 相互運用可能な HDF5 データ製品作成 GUI ツール
- HDF Explorer – HDF、HDF5、netCDF データファイル形式を読み取るデータ視覚化プログラム
- HDFView – HDF ファイル用のブラウザとエディタ
- ViTables – Python で記述された HDF5 および PyTables ファイル用のブラウザおよびエディタ
関連項目
[編集]- Common Data Format (CDF)
- FITS – 天文学で使用されるデータ形式
- GRIB (GRIdded Binary) – 気象学で使用されるデータ形式
- HDF Explorer
- NetCDF – Netcdf Javaライブラリは、純粋なJavaを使用してHDF5、HDF4、HDF-EOSおよびその他の形式を読み取る
- Protocol Buffers – Google のデータ交換形式
脚注
[編集]- ^ “HDF5 version 1.10.7 released on 2020-09-16”. 16 Sep 2020閲覧。
- ^ Java-based HDF Viewer (HDFView)
- ^ “History of HDF Group”. 15 July 2014閲覧。
- ^ How is HDF5 different from HDF4? Archived 2009-03-30 at the Wayback Machine.
- ^ “Are there limitations to HDF4 files?”. 2016年4月19日時点のオリジナルよりアーカイブ。2009年3月29日閲覧。
- ^ R&D 100 Awards Archives Archived 2011-01-04 at the Wayback Machine.
- ^ Rossant. “Moving away from HDF5”. cyrille.rossant.net. 21 April 2016閲覧。
- ^ JHDF5 library
- ^ HDF Import and Export Mathematica documentation
- ^ PDL::IO::HDF5
外部リンク
[編集]この記事は2008年11月1日以前にFree On-line Dictionary of Computingから取得した項目の資料を元に、GFDL バージョン1.3以降の「RELICENSING」(再ライセンス) 条件に基づいて組み込まれている。