9

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

より正確に言えば、私は、さまざまな性質(テレメトリ、信号、ビデオ)のかなりの量のデータ(数時間)を継続的に(サンプリングレートが30〜400Hzの範囲で)混合したいプロジェクトに取り組んでいます。

クラッシュの可能性でデータが失われないようにするには、データをリアルタイムで(または少し遅れて)書き込む必要があります。

私たちの最初のプロトタイプはsqlite3に基づいていますが、長期的な使用からいくつかの制限が生じる可能性があると感じています:速度、1つのデータベース== 1つのファイル、および複数のスレッドからデータベースにアクセスすることの難しさ(同時に読み取りと書き込みを行う場合のロック例外) )。

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

4

1 に答える 1

4

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

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

以上で、boeing のパケット テーブル API を見てみましょう。また、hdf5 に付属する hl c++ ライブラリに黒い羊の c++ バインディングがありますが、使用するためにパッチを適用する必要がありました。

于 2015-05-01T10:01:08.960 に答える