3

I am looking for a data storage option for storing ECG (1000 samples /sec) and other patient data (e.g. blood pressure, body temperature etc - sampled at much lower sampling rate) in a queryable storage for my C# application.

I have already evaluated SQLite (which is a great option in its own right), but I am looking for some option that would meet following requirements:

  1. Small storage space - ECG is typically sampled at 1000 samples/sec, and I need to store ECG data for 24 - 48 hours (~82 to ~162 million data samples). On SQLite it is taking huge amount of space.

  2. I should be able quickly read a portion of this data (from - to timestamps).

  3. I should be able to modify portions of the data without having to write the all the data from that point onwards.

I have also looked at HDF5, but haven't really understood how to use it from C#.net.

Looking for practical suggestions.

Thanks,

Vikram

4

1 に答える 1

2

あなたのユースケースは HDF5 にぴったりのようです。

  1. 小さなストレージ スペース - 通常、ECG は毎秒 1000 サンプルでサンプリングされ、ECG データを 24 時間から 48 時間 (~82 から~1 億 6200 万のデータ サンプル) 保存する必要があります。SQLite では、膨大な量のスペースが必要です。

HDF5 は、非常に効率的でコンパクトなストレージを可能にします。さらに、パフォーマンスに大きな影響を与えることなく、さまざまな圧縮アルゴリズム/フィルター (gzip、bzip など) を有効にすることができます。

  1. このデータの一部 (- からタイムスタンプまで) をすばやく読み取ることができるはずです。

これは、実際には HDF5 の主な使用例です。データセットからのデータのスライスは、非常に迅速に簡単に行うことができます。

  1. その時点以降のすべてのデータを書き込まなくても、データの一部を変更できるはずです。

データセットを拡張し、その場でデータを変更することもできます (ただし、SQLite の UPDATE ステートメントほど便利ではありません)。ただし、データの削除にはいくつかの注意事項があります。(詳細については、こちらをご覧ください)

多くのメタ情報がある場合は、それらを SQLite に保存し、それらのレコードを生データを含む HDF5 ファイルに接続することを考えることができます。または、これらのメタ情報をノード/データセットの属性として HDF5 に保存し、SQLite を一緒に使用しないようにすることもできます。

HDF5 に関する唯一の大きな問題/課題は、同時書き込み操作です。そのため、単一の HDF5 ファイルに対して同時書き込み操作が必要な場合は、より複雑になります。

.NET で HDF5 を使用するには、このスレッドを参照してください。

于 2013-02-05T09:35:56.957 に答える