2011-03-14 8 views
2

私は、複数のトランスデューサ(センサー/デバイス)に接続されたUSBからデータを取り込むC#デスクトップアプリケーションを構築しています。各装置/センサは、非常に高いサンプリングレート(> 1000/s)で同時にデータをコンピュータにリアルタイムで送信し、対応するデータベーステーブル(例えば、温度テーブルなどに格納された温度データ)に挿入する。どのような種類のデータベースが高速USB挿入に適していますか?

どのようなデータベースがそのようなアプリケーションに適していますか?オープンソースですか? MySQL? SQLite? 高速データの挿入中にデータが失われないように、データベースにどのような設定を行う必要がありますか?

+1

あなた自身に質問する必要がある最初の質問は、本当にすべてのデータを保存する必要がありますか? 1秒間に1000を超えるサンプル(ほとんどのデータベースが高速のマシンであれば簡単に処理できます)では、集計値がオプションであるかどうかは疑問です。 – Wolph

+0

残念ながら、私はすべてのデータをリアルタイムで保存する必要があります。私の心配は、複数のデバイスと同時にデータベースに挿入するデータの複数のスレッドがある、私はどのデータベースがそれを処理できるかどうかはわかりません... – KMC

+1

それはデータベースに依存しますが、適切なデータベースは遅延書き込みをサポートしています。 PostgreSQLの場合:http://www.postgresql.org/docs/current/static/runtime-config-wal.html#GUC-SYNCHRONOUS-COMMIT ディスクの生のスループットについては、あなたの書き込みはバッファリングされます。 – Wolph

答えて

0

あなたが行っていることを目的として設計されたdb40のオープンソースオブジェクトデータベースをご覧ください。

http://www.db4o.com/

そのJavaの&ために利用可能なネット&は例のヒープ、ZERO設定(新しいデータベース(ファイル名))があります。 db4oが挿入速度に追いつけない場合(これはありえないかもしれませんが)、挿入するオブジェクトのメモリにキャッシュを保持することができます(つまり、db writeが遅くなり、 )。

高レベルの挿入についてはわかりませんが、VistaDB(有料の.netファイルデータベース)を使用しましたが、メモリにキャッシュすると、別のデータベースプロバイダを試してみることができます多くのコード。

もう1つの方法は、log4netのようなロギングソリューションで、ファイルに書き込むだけですが、簡略化する価値があります。