web-dev-qa-db-ja.com

科学的データを保存するためのNetCDFとHDF5の意見?

科学データを保存する方法として、NetCDFとHDF5を使用して、それらについてプラス/マイナスを与える十分な経験がある人はいますか?

私はHDF5を使用しており、Javaを介して読み書きしたいのですが、インターフェイスは本質的にCライブラリのラッパーであり、混乱しているため、NetCDFは興味をそそられるようですが、ほとんど何も知りませんそれについて。

edit:私のアプリケーションはデータロギング用の「専用」なので、自己記述形式のファイルを取得します。私にとって重要な機能は、任意のメタデータを追加でき、バイト配列に追加するための高速書き込みアクセスがあり、単一ライター/複数リーダーの同時実行が可能です(強く推奨されますが、必須ではありません。NetCDFのドキュメントではSWMRはあるが2人のライターが同じファイルを同時に開くことができず、悲惨な結果になることを防ぐためのメカニズムをサポートしているかどうかについては触れていません)。私はHDF5の階層的側面が好きです(特に私はlove方向性非循環グラフ階層で、「通常の」ファイルシステムのような階層よりもはるかに柔軟です)、今NetCDFドキュメントを読んでいます...ファイルごとに1つのデータセットしか許可しない場合、おそらく私にとっては機能しません。 :(

updateNetCDF-Java のように見えますが、netCDF-4ファイルからは読み取りますが、netCDF-3ファイルからは書き込みを行いません階層グループをサポートします。くそー。

2009年7月14日更新:JavaのHDF5で本当に動揺し始めています。利用可能なライブラリはそれほど素晴らしいものではなく、Javaの抽象化レイヤー(複合データ型)に関連するいくつかの主要な障害があります。 Cの優れたファイル形式ですが、私が失うだけのようです。 > :(

67
Jason S

NetCDFではなくHDF5を強くお勧めします。 NetCDFはフラットであり、分類できない場合、しばらくすると非常に汚れます。もちろん分類も議論の問題ですが、少なくともあなたはこの柔軟性を持っています。

私はQ5Costを書いたときに、HDF5とNetCDFの正確な評価を行い、最終的な結果はHDF5のハンドダウンでした。

30
Stefano Borini

長期的には、HDF5を使用する方がはるかに簡単です。単純なデータ構造をNetCDF形式に変換することは難しくありませんが、それらを後で操作するのはちょっと面倒です。

HDF5の「H」は「階層的」を表しており、(私にとっては)ノードをあちこち移動して他の場所からノードを参照するだけで、データを操作する本当に簡単な方法に変換されます。

これはどのようなプロジェクトですか?これらの両方を、多くのHPC科学モデリングタスクに使用します。同じことをしていると思いますか?もしそうなら、私が見ている傾向はHDF5に移行する人々ですが、それはあなたの特定のドメインでは異なるかもしれません。

しかし、あなたは結局、幸運を祈ります!

22
Mike

NetCDFは、バージョン4.0(2008)以降、ほとんどのHDF5ファイルを読み書きでき、拡張データモデルを介してHDF5の階層機能にアクセスできます。

HDF5は非常に機能が豊富で、いくつかの優れたパフォーマンス機能を備えています。

NetCDFには、よりシンプルなAPIと、より幅広いツールベースがあります。 netCDFデータを処理する多くのツールがあります。

16
Edward Hartnett

私はこれが古い投稿であることを知っており、元の投稿者はそれが進んでいることを示していますが、ここで終わる誰にとっても... netCDF-Javaライブラリ(4.3.13現在)は、 netCDF Cライブラリ。まだベータ版ですが、動作します feedback は間違いなく高く評価されています!

詳細については、netCDF-Java reference docsを参照してください。

9
Sean A.

それぞれに小さなサンプルアプリケーションをいくつか作成して、体験を比較してみてください。 (MPIなどによる)並列実行に対するコードの将来のスケーラビリティが重要である場合、HDFには並列実装があり、人々が常に改善に取り組んでいることを知っています。 NetCDFについては不明です。

後期編集:NetCDFの場合、アルゴンヌから Parallel NetCDF が追加されました。それは非常にうまく機能し、開発チームはそれをさらに改善することに非常に積極的です。

8
Phil Miller

1)Netcdf-4 Cライブラリは、HDF-5 Cライブラリの最上層です。 APIはHDF5ライブラリよりも単純であると考えられていますが、最終的にはほぼ同じ機能を持っています。 Netcdfはグラフをサポートしていませんが、HDF5はサポートしています。実際、HDFは私が考えるグラフの循環を妨げません。

2)HDFグループには、HDF-5 Cライブラリに加えてJava APIがあります。

3)Unidataには、純粋なJavaであるNetcdf-Javaライブラリがありますが、HDF-5のみを読み取ることができます。

6
John Caron