2012-07-13 2 views
6

hdf5がリアルタイムデータロギングに適しているかどうかを知りたいですか?hdf5はリアルタイム測定に適していますか

もっと正確には: 私は、(テレメトリ、信号、ビデオ)の異なる性質のかなりの量のデータ(数時間)を連続的に(サンプルレートの範囲の形式に30Hzから400Hzまで)混在させたいプロジェクトに取り組んでいます。

潜在的なクラッシュ時にデータを失うのを防ぐために、データはリアルタイムで(または小さな遅延で)書き込まなければなりません。

最初のプロトタイプはsqlite3をベースにしていますが、速度、1つのデータベース== 1つのファイル、複数のスレッドからのデータベースへのアクセスの難しさなど、長時間使用すると制限が生じる可能性があります。同時に)。

私はhdf5をディスク上のデータストレージのバックエンドとして使用することを検討しています(内部表現ではnumpy/pytable)。そのようなpythonバインディングからhdf5ファイルを定期的に更新することは可能だと思いますか?

答えて

1

HDF5パケットテーブルはリアルタイム測定に適していますが、固定サイズのデータ​​パケットを通常の古いPOSIXファイルに置き換えて後で変換するほうがよいです。これは、HDF5が現時点ではあまり堅牢ではないため、低レベルのファイルIOコードを使用してさまざまな保証を提供していないためです。ある時点では、作業するデータが十分に複雑になっても、HDF5は低レベルのファイルIOに関連しているはずですが、それは重量のあるものであり、グローバルミューテックスの使用のために合理的な決定論/パフォーマンスでマルチスレッド化できません。たとえば、システムがクラッシュした場合、結果として生じるHDF5ファイルはガベージ/リカバリ不能になります。これは1日固定されますが、HDFグループが次の10年以内に迅速化して完了するための資金が必要です。

私のポリシーは、可能な限りパケットログファイルを使用することです。これらのファイルを長期間使用+圧縮+他のツール/プログラムで使用するために記録した後、すぐに結果をHDF5に変換します。このレコーダーは、書き込み時にバイナリ構造を説明しているHDF5ファイルをダンプすることがよくあります。そのため、あとでそのファイルを読み込んで、パケットログファイルにある構造体を理解し、パケットをロードした後で実際のHDFファイルに渡しますメモリ内にアップする。

すべてのことを言ってやって、the packet table api from boeingをご覧ください。また、hdf5に付属しているhl C++ライブラリに黒い羊のC++バインディングがありますが、私の用途のためにパッチを当てなければなりませんでした。

関連する問題