データ取得のためのシステムを構築しています。取得したデータは通常、15 個の信号で構成され、それぞれが (たとえば) 500 Hz でサンプリングされます。つまり、毎秒約 15 x 500 x 4 バイト (signed float) が到着し、永続化する必要があります。
以前のバージョンは、データ ストレージに DB4O データベースを使用して .NET (C#) 上に構築されていました。これはかなり効率的で、うまく機能しました。
新しいバージョンは Linux ベースで、Python (またはおそらく Erlang) を使用し、... はい! 適切なストレージ候補は何ですか?
私は MongoDB を考えており、各サンプル (または実際にはそれらの束) を BSON オブジェクトとして保存しています。各サンプル (ブロック) には、キー (インデックス付き) フィールドとしてのサンプル カウンターと、信号源の識別情報があります。
問題は、サンプルをかなり迅速に取得できなければならないことです。要求された場合、サンプル カウンター範囲と要求された信号ソースを使用して、最大 30 秒のデータを 1 秒未満で取得する必要があります。現在の (C#/DB4O) バージョンは、この OK を管理し、100 ミリ秒未満でデータを取得します。
Python がパフォーマンス面で理想的ではないかもしれないことはわかっていますが、それについては後で説明します。
システム (「サーバー」) には複数の取得クライアントが接続されるため、アーキテクチャは適切に拡張する必要があります。
編集: さらに調査した後、おそらくサンプルデータにはHDF5を使用し、ドキュメントのような情報にはCouchまたはMongoのいずれかを使用します。お知らせします。
編集: 最終的な解決策は、HDF5 と CouchDB に基づいていました。Python で実装され、Raspberry Pi で実行され、問題なく動作しました。