編集:これまでの回答の結果として、私が焦点を当てたいものにさらに焦点を当てたいと思います:データにアクセスするためにストレージオプションに永続性を備えたメモリ内(単純なC#コードである可能性があります)に書き込むことができるデータベースR. Redis内から、これまでのところ最も有望に見えます。また、データベースへのデータの同時書き込みを回避するために、Lockfree ++またはZeroMQに似たものを実際に使用することを検討しますが、メッセージバス/その他の実装を介してすべてを永続化データに送信し、1つの「アクター」がすべての書き込み操作を処理するようにします。インメモリデータベースまたは他のソリューションに。Redis以外のアイデア(SQLiteについて言及している人もいますが、パフォーマンスをテストする必要があります)。他に何か提案はありますか?
以下の要件のほとんどを満たす理想的なデータベース構造/ソリューションを探していますが、これまでのところ完全に失敗しました。手伝ってもらえますか?
私のタスク:.Net 4.5(C#)でプロセスを実行し、(一般的に)他のアプリケーションでさらに分析するために使用する値型を生成します。したがって、メモリ内に保持するか、ディスクに保持します。詳細は以下をご覧ください。データはさまざまなタスク/スレッド内で生成されるため、行ベースのデータ形式はこの状況にうまく適合しません(さまざまなスレッドで生成されたデータはさまざまな時間に生成されるため、整列されないため)。したがって、列型のデータ構造が適切かもしれないと思いましたが、間違っている場合は訂正してください。
例:
タスク/スレッド#1は、指定されたタイムスタンプで次のデータを生成します
datetime.ticks/出力データの値
1000000001 233.23
1000000002 233.34
1000000006234.23..。
Taks / Thread#2は、指定されたタイムスタンプで次のデータを生成します
datetime.ticks/出力データの値
1000000002 33.32
1000000005 34.34
100000001554.32..。
.Netランタイムでタイムスタンプを調整する必要はありません。何よりもまず、データを保存し、後でRまたはPython内でデータを処理します。
私の要件:
高速書き込み、高速書き込み、高速書き込み:1秒あたり100,000〜1,000,000のデータポイントを生成し、データを永続化(最悪の場合)またはメモリに保持する必要がある場合があります。このプロセスがデータ生成プロセスに遅れをとることができるように、独自のスレッドで書き込みを実行しても問題ありませんが、制限は16GB RAM(64ビットコード)です。
後でデータをクエリする方法に適しているため、列指向データベース形式が優先されますが、上記の例に関して意味がある場合は、他の構造を受け入れることができます(他のすべての要件があれば、ドキュメント/キー値も問題ありません)特に書き込み速度の点で満たされています)。
.Net内から参照できるAPI。例:HDF5は一部の人には対応可能と見なされるかもしれませんが、.Netポートはひどいものだと思います。.Netをもう少しサポートするものはプラスですが、他のすべての要件が満たされている場合は、HDF5.Netポートに似たものを処理できます。 。
可能であれば同時書き込み:前述のように、異なるタスク/スレッドから同時にデータを書き込むのが好きです。
私は16GBのメモリ(64ビットで.Netプロセスを実行)に制約されているため、それよりも多くのデータを生成することがあるため、純粋にメモリ内にないものを探す可能性があります。時々永続化するメモリ内の何か、または純粋な永続化モデルがおそらく望ましいでしょう。
組み込みが優先されますが、クライアント/サーバーソリューションのサーバーがWindowsサービスとして実行できる場合は、問題ありません。
データアクセスに関しては、RとPythonのインターフェイスがすでに存在するdbソリューションを強く好みます。これは、Python内のPandaライブラリを時系列の配置やその他の分析に使用し、R内で分析を実行するためです。
API/ライブラリがSQL/SQLのような/Linq/のようなクエリをサポートしている場合、それは素晴らしいことですが、一般的には、開始日と終了日の間に列データをロードするなどの絶対的な必要条件が必要です(「キー」/インデックスが与えられた場合) R / Python内でクエリを分析して実行するためです)。
管理コンソールまたはデータビジュアライザーが付属している場合は、プラスになりますが、必須ではありません。
オープンソースであるか、「リーチ」内の価格である必要があります(いいえ、KDBはその点で資格がありません;-)
OK、これが私がこれまでに持っているものです。ほとんどのdbソリューションは、書き込みパフォーマンス要件ですでに失敗しているため、これもすべてです。
- InfobrightとDb4o。私はこれまで読んだものが好きですが、パフォーマンス統計をチェックインしていないことを認めます
- 何かが自分でやった。値型をバイナリ形式で簡単に保存し、datetime.ticksでデータにインデックスを付けることができます。Python/Rでデータをロード/逆シリアル化するためのスクリプトを作成する必要があります。しかし、並行性、クエリエンジン、およびその他の機能を追加したい場合は、膨大な作業になります。したがって、私はすでにそこにある何かを探します。