2

When developing software that records input signals (numbers) in real time, how can this data be best stored and compressed? Would an SQL engine be good for this, permitting fast data mining in the future, or are there other data formats that would be suitable or compressed enough for upto 1000 data samples per second?

I don't mind building in VC++ but ideas applicable to C# would be ideal.

4

2 に答える 2

2

ソースが何であるか、保存されたデータをクエリする必要があるかなど、詳細情報なしでは言うのは難しいです。

ただし、1000サンプル/秒の場合は、数秒のデータをメモリに保持してから、それらを別のスレッドの永続ストレージに一括で書き出すことを検討する必要があります。(マルチプロセッサマシンを推奨)。

管理言語を介して実行する場合は、サンプルを保持するために同じデータ構造を維持してください。これにより、GCがメモリを頻繁に収集する必要がなくなります。ポインタとunsafeキーワードを使用すると、パフォーマンスがわずかに向上します(メモリ構造への直接アクセスを提供し、配列の境界チェックコードを排除します)。

各サンプルを収集するために必要なCPU時間はわかりません。また、指定された時間に各サンプルを読み取ることがどれほどタイムクリティカルであるか(読み取り元のデバイスにバッファリングされますか?)。サンプリングがタイムクリティカルな場合、サンプルごとに1ミリ秒かかります。そして、ガベージコレクターが起動するリスクを許容できない可能性があります。これは、しばらくの間スレッドをブロックするためです。この場合、私は管理されていないアプローチを選びます。

SQL Serverはデータを簡単に保持できるか、ファイルに書き込むことができます。これは主に、後でデータをどのように処理する必要があるかによって異なります。各サンプルのデータ量はわかりませんが、8バイトだとしましょう。次に、生データの書き込みに1秒あたり8000バイトがあります。おそらくオーバーヘッドがあるため、10 kB/sになる可能性があります。私が考えることができるほとんどのストレージメカニズムは、この速度でデータを書き込むことができます。サンプリングを行っているスレッドとは別のスレッドに書き込むようにしてください。

于 2009-09-06T11:21:32.060 に答える
2

リレーショナルではなく、時系列データベースを確認することをお勧めします。これらは、検討している種類のデータと使用法を処理するために最適化されます。

Kxは、名声と同様に人気のある選択肢です。

于 2009-09-06T11:38:00.700 に答える