40

C/C++ コードの分析中に収集したデータを格納するために使用するテクノロジを評価しています。C++ の場合、データ量は比較的大きくなる可能性があり、TU あたり最大 20Mb です。

次のSOの回答を読んだ後、 HDF5が使用に適したテクノロジーである可能性があると考えました。ここにいる人々が、私が持っているいくつかの最初の質問に答えるのを手伝ってくれるかどうか疑問に思っていました:

  1. パフォーマンス。データの一般的な使用法は、コンパイラによって生成された「.o」ファイルの有効期間と同様に、1 回の書き込みと「数回」の読み取りです。HDF5 は、SQLite DB などを使用する場合と比べてどうですか? それは合理的な比較でさえありますか?

  2. 時間の経過とともに、保存している情報を追加しますが、新しい形式をサポートするために、完全に新しい "リーダー" のセットを再配布する必要はありません。ユーザー ガイドを読んだ後、HDF5 は XML や DB に似ていることを理解しました。つまり、情報はタグ/列に関連付けられているため、古い構造を読み取るために作成されたツールは、関係のないフィールドを無視します。これについての私の理解は正しいですか?

  3. 書き出したい情報のかなりの部分は、ツリー型の構造 (スコープ階層、型階層など) になります。理想的には、親、子などを持つスコープをモデル化します。1 つの HDF5 オブジェクト「ポイント」を持つことは可能ですか?別の?そうでない場合、HDF5 を使用してこの問題を解決する標準的な手法はありますか? それとも、DB で必要とされるように、データを検索するときに適切なルックアップを使用して、あるオブジェクトを別のオブジェクトに「リンク」する一意のキーが必要ですか?

どうもありがとう!

4

2 に答える 2

23

HDF5 は、SQLite DB などを使用する場合と比べてどうですか? それは合理的な比較でさえありますか?

似ていますが、実際にはそうではありません。どちらも構造化ファイルです。SQLite には、SQL を使用したデータベース クエリをサポートする機能があります。HDF5 には、大規模な科学データセットをサポートする機能があります。

どちらも高性能を目指しています。

時間の経過とともに、保存している情報を追加しますが、新しい形式をサポートするために、完全に新しい "リーダー" のセットを再配布する必要はありません。

データを構造化形式で保存すると、それらの構造のデータ型も HDF5 ファイルに保存されます。これがどのように機能するかについては少しわかりませんが (たとえば、本来の下位互換性が含まれている場合)、「リーダー」を正しく設計すれば、将来変更される型を処理できるはずです。

1 つの HDF5 オブジェクトを別のオブジェクトに「ポイント」させることは可能ですか?

絶対!attributesを使用する必要があります。各オブジェクトには、そのオブジェクトに到達するためのパスを記述する 1 つ以上の文字列があります。HDF5グループはフォルダー/ディレクトリに似ていますが、フォルダー/ディレクトリは階層的です = 一意のパスがそれぞれの場所を (少なくともハード リンクのないファイルシステムで) 記述しますが、グループは循環を含む有向グラフを形成します。オブジェクトへの「ポインタ」を属性として直接保存できるかどうかはわかりませんが、絶対/相対パスを文字列属性としていつでも保存できます。(または文字列としての他の場所。必要に応じて、ルックアップ テーブルを大量に作成できます。)

于 2009-02-13T19:07:35.030 に答える
10

私のプロジェクトでは HDF5 データを作成していますが、通常は直接処理することはありません。最初の 2 つの質問に答えてみましょう。

  1. 1 回書き込み、何度も読み取るモデルを使用していますが、この形式はこれをうまく処理しているようです。Oracleデータベースと HDF5の両方に書き込みを行っていたプロジェクトを知っています。最終的に、パフォーマンスが低下し、誰も使用していなかったため、Oracle の出力は削除されました。明らかに、SQLite は Oracle ではありませんが、HDF5 形式の方がこのタスクに適していました。その 1 つのデータ ポイントに基づいて、複数の挿入と更新に対して RDBMS をより適切に調整できます。

  2. お客様が使用するリーダーは、新しいデータ型を追加しても堅牢です。いくつかの変更は予想されますが、データ フィールドを追加するときに問題が発生することを心配する必要はありません。当社の DBA は最近、HDF5 データを読み取り、Google Earth で視覚化するために KMZ ファイルを作成する Python プログラムを作成しました。これは彼が Python を学ぶために使用したプロジェクトだったので、リーダーを作成するのは難しくないと思います。

3 番目の質問では、Jason S の優れた知識に敬意を表します。

HDF5 は完全に妥当な選択だと思います。特に、すでに興味を持っているか、科学コミュニティ向けに何かを作成する予定がある場合はなおさらです。

于 2009-02-13T19:45:59.323 に答える