2

H5TB APIを使用して、(等距離ではない)時系列をhdf5ファイルのテーブルとして保存します。フォーマットは次のようになります。

time   channel1   channel2
0.0    x          x
1.0    x          x
2.0    x          x

次のような「詳細データ」の挿入もあります。

time   channel1   channel2
0.0    x          x
1.0    x          x
1.2    x          x
1.4    x          x
1.6    x          x
1.8    x          x
2.0    x          x

ここで、データを別のデータ形式で保存したいので、次のように hdf5 ファイルを「クエリ」します。

select ch1 where time > 1.6 && time < 3.0

このクエリを実行する方法をいくつか考えました。

  1. B-Tree インデックスと呼ばれる機能が組み込まれています。これをデータの索引付けに使用できますか?
  2. 時間チャネルでバイナリ検索を実行してから、チャネル値を読み取る必要があります
  3. 私は自分でインデックスを作成します (詳細が挿入されるたびに更新します)。ここで使用するのに最適なアルゴリズムは何ですか?

インデックスの主な動機は、クエリの応答を高速にすることです。

ここで何を提案しますか?

4

3 に答える 3

2

最終的に別の(明白な)解決策を自分で見つけました。最も簡単な方法は、hdf5 ファイルを開いて時間チャネルのみを読み取り、データ チャネルを読み取る前にインメモリ マップを作成することです。このプロセスは、スパース ハイパースラブを使用して時間チャネルを読み取ることで最適化することもできます。

特定の時点でのインデックスがわかっている場合は、データを読み取ることができます。

于 2011-03-28T09:14:41.247 に答える
1

hdf5ファイルからデータを解析する方法について尋ねているのではなく、解析されたデータを使用する方法についてのみ尋ねていると仮定します....

が与えられた場合class channel_data { ... };、 aはニーズに合うはずです。具体的にはとです。std::map<double, channel_data>std::map<>::lower_bound()std::map<>::upper_bound()

于 2011-03-21T07:10:55.690 に答える
0

この問題を解決する一般的な方法は、ビットマップ インデックスを使用することです。これについて書かれた論文もありますが、コードは公開されていないようです。

于 2012-02-10T00:20:54.780 に答える