回答:
おそらく、質問を言い換えるのに良い方法は、代替フォーマットと比較した利点は何ですか?
主な代替手段は、データベース、テキストファイル、または別のパック/バイナリ形式です。
考慮すべきデータベースオプションは、おそらくカラムナーストアまたはNoSQL、または小さな自己完結型のデータセットSQLiteです。データベースの主な利点は、メモリよりもはるかに大きいデータを処理し、ランダムアクセスまたはインデックス付きアクセスを持ち、データをすばやく追加/追加/変更できることです。主な*欠点*の利点は、データセット全体を読み込んで処理する必要がある問題に対して、HDFよりもはるかに遅いことです。もう1つの欠点は、SQLiteのような組み込みスタイルのデータベースを除き、データベースは単純な自己完結型のデータストアではなく、システム(アドミッション、セットアップ、メンテナンスなどが必要)であることです。
テキストファイル形式のオプションはXML / JSON / CSVです。これらはクロスプラットフォーム/言語/ツールキットであり、自己記述的(または明白な:)であるため、優れたアーカイブ形式です。圧縮されていない場合、それらは巨大(10x-100x HDF)ですが、圧縮されている場合、かなりスペース効率がよくなります(圧縮されたXMLはHDFとほぼ同じです)。ここでの主な欠点は、やはり速度です。テキストの解析はHDFよりはるかに遅くなります。
他のバイナリ形式(npy / npz numpyファイル、blz blazeファイル、プロトコルバッファー、Avroなど)は、HDFと非常によく似たプロパティを持っていますが、あまり広くサポートされていない(1つのプラットフォームに限定される場合があります:numpy)他の特定の制限があります。通常、それらは魅力的な利点を提供しません。
HDFはデータベースを補完するものであり、クエリを実行しておおよそのメモリサイズのデータセットを生成し、同じデータを複数回使用する場合はHDFにキャッシュすることをお勧めします。固定されたデータセットがあり、通常は全体として処理される場合、適切なサイズのHDFファイルのコレクションとして保存することは悪い選択肢ではありません。頻繁に更新されるデータセットがある場合は、その一部を定期的にHDFファイルとしてステージングすることも有用です。
要約すると、HDFは、通常全体として読み取られる(または書き込まれる)データに適した形式です。これは、幅広いサポートと互換性、アーカイブ形式として適切で非常に高速であるため、多くのアプリケーションにとって共通語または共通/優先交換形式です。
PSこれに実用的なコンテキストを与えるために、HDFを他の選択肢と比較した最近の経験では、特定の小さな(メモリサイズよりもはるかに小さい)データセットがHDFとして読み込むのに2秒かかりました(これはおそらくパンダのオーバーヘッドです)。JSONから読み取るのに約1分。データベースへの書き込みに1 時間。確かに、データベースへの書き込みは高速化されますが、優れたDBAが必要です。これは、箱から出してすぐに機能する方法です。
1つの利点は幅広いサポートです-C、Java、Perl、Python、およびRはすべてHDF5バインディングを備えています。
もう1つの利点は速度です。ベンチマークされたことは一度もありませんが、HDFはSQLデータベースよりも高速であるはずです。
大量の科学データと時系列データ(ネットワークの監視、使用状況の追跡など)の両方で使用すると非常に優れていることを理解しています。
HDFファイルにはサイズの制限があるとは思わない(OSの制限は適用されますが)。
追加するには、ASDF、特に彼らの論文ASDFをチェックアウトしてください:天文学のための新しいデータ形式。ASDFはHDF5の改善を試みており、このペーパーではHDF5形式のいくつかの欠点について説明しています。