科学データを保存する方法として、NetCDFとHDF5を使用して、それらについてプラス/マイナスを与える十分な経験がある人はいますか?
私はHDF5を使用しており、Javaを介して読み書きしたいのですが、インターフェイスは本質的にCライブラリのラッパーであり、混乱しているため、NetCDFは興味をそそられるようですが、ほとんど何も知りませんそれについて。
edit:私のアプリケーションはデータロギング用の「専用」なので、自己記述形式のファイルを取得します。私にとって重要な機能は、任意のメタデータを追加でき、バイト配列に追加するための高速書き込みアクセスがあり、単一ライター/複数リーダーの同時実行が可能です(強く推奨されますが、必須ではありません。NetCDFのドキュメントではSWMRはあるが2人のライターが同じファイルを同時に開くことができず、悲惨な結果になることを防ぐためのメカニズムをサポートしているかどうかについては触れていません)。私はHDF5の階層的側面が好きです(特に私はlove方向性非循環グラフ階層で、「通常の」ファイルシステムのような階層よりもはるかに柔軟です)、今NetCDFドキュメントを読んでいます...ファイルごとに1つのデータセットしか許可しない場合、おそらく私にとっては機能しません。 :(
update— NetCDF-Java のように見えますが、netCDF-4ファイルからは読み取りますが、netCDF-3ファイルからは書き込みを行いません階層グループをサポートします。くそー。
2009年7月14日更新:JavaのHDF5で本当に動揺し始めています。利用可能なライブラリはそれほど素晴らしいものではなく、Javaの抽象化レイヤー(複合データ型)に関連するいくつかの主要な障害があります。 Cの優れたファイル形式ですが、私が失うだけのようです。 > :(
NetCDFではなくHDF5を強くお勧めします。 NetCDFはフラットであり、分類できない場合、しばらくすると非常に汚れます。もちろん分類も議論の問題ですが、少なくともあなたはこの柔軟性を持っています。
私はQ5Costを書いたときに、HDF5とNetCDFの正確な評価を行い、最終的な結果はHDF5のハンドダウンでした。
長期的には、HDF5を使用する方がはるかに簡単です。単純なデータ構造をNetCDF形式に変換することは難しくありませんが、それらを後で操作するのはちょっと面倒です。
HDF5の「H」は「階層的」を表しており、(私にとっては)ノードをあちこち移動して他の場所からノードを参照するだけで、データを操作する本当に簡単な方法に変換されます。
これはどのようなプロジェクトですか?これらの両方を、多くのHPC科学モデリングタスクに使用します。同じことをしていると思いますか?もしそうなら、私が見ている傾向はHDF5に移行する人々ですが、それはあなたの特定のドメインでは異なるかもしれません。
しかし、あなたは結局、幸運を祈ります!
NetCDFは、バージョン4.0(2008)以降、ほとんどのHDF5ファイルを読み書きでき、拡張データモデルを介してHDF5の階層機能にアクセスできます。
HDF5は非常に機能が豊富で、いくつかの優れたパフォーマンス機能を備えています。
NetCDFには、よりシンプルなAPIと、より幅広いツールベースがあります。 netCDFデータを処理する多くのツールがあります。
それぞれに小さなサンプルアプリケーションをいくつか作成して、体験を比較してみてください。 (MPIなどによる)並列実行に対するコードの将来のスケーラビリティが重要である場合、HDFには並列実装があり、人々が常に改善に取り組んでいることを知っています。 NetCDFについては不明です。
後期編集:NetCDFの場合、アルゴンヌから Parallel NetCDF が追加されました。それは非常にうまく機能し、開発チームはそれをさらに改善することに非常に積極的です。
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のみを読み取ることができます。