2012-01-25 14 views
8

私は、複数の物理学とシミュレータを含むモンテカルロシミュレーションソフトウェアパッケージを開発しています。私はオンライン分析を行い、派生データの生データへの依存性を追跡し、 "温度> 400の位置と(x0、y0)の近くの位置に波形を与える"のようなクエリを実行する必要があります。したがって、メモリ内のデータモデルはかなり複雑です。科学シミュレーションデータ、Mongodb + HDF5のデータ持続性?

アプリケーションはPythonで書かれ、各シミュレーション結果はPythonオブジェクトとしてモデル化されています。 1時間ごとに〜100個の結果(オブジェクト)が生成されます。ほとんどのオブジェクトは、重いデータ(バイナリ数値配列の数MB)だけでなく、いくつかの軽いデータ(温度、位置など)を持っています。総データ生成レートは1時間あたり数GBです。

私はデータ永続性ソリューションと使いやすいクエリAPIが必要です。 私は既に重いデータ(数値配列)をHDF5ストレージに保存することを決めました。 私はオブジェクトの永続性(軽いデータのみ)としてMongoDBを使用し、HDF5で重いデータを索引付けすることを検討しています。 MongoDBによるオブジェクトの永続性は簡単で、クエリインタフェースは十分に強力です。

私はsqlalchemy + sqliteオプションについて認識しています。ただし、重いデータをHDF5にストリーミングすることはSqlAlchemyでは当然サポートされていないようで、固定スキーマは煩雑です。

私はこのポスト( Searching a HDF5 dataset)を知っていますが、 "インデックステーブル"自体には高速クエリのためのメモリ内インデックスが必要です。

私がジャンプする前に見なければならない代替ソリューションがあるのだろうかと思いますか?それとも、私の計画で見落とした問題はありますか?

TIA。

答えて

0

あなたはVistrailsを見ましたか?

+0

ポインタがありがとうございました。私はVistrailsのドキュメントを読み飛ばした。 VisTrailは後処理やグラフ作成に最適です。私のアプリケーションは1つの問題に特化していると思うし、多くの分析の詳細をユーザーから隠すには –

+0

が必要です。私はそのソースコードを読んで、データがVisTrailにどのように格納されているかを見ています。 VisTrailは印象的なソフトウェアですが、私は大学院生として欲しいと思います。ありがとうございました。 –

3

あなたが説明した状況に関連するかもしれないし、なぜそれが良いフィットかもしれないモンゴについて知るためにいくつかの事:私は、オンライン分析を行う必要があり

、生で得られたデータの依存関係の追跡「温度> 400の波形と(x0、y0)の近くに位置する」というようなクエリを実行することができます。

Mongoには、このようなクエリを実行するのが非常に簡単な柔軟なクエリ言語があります。地理空間(2D)インデックスもサポートされています。さらに、位置と温度に関するクエリを頻繁に行う必要がある場合は、(温度、位置)に複合インデックスを作成することができます。

ほとんどのオブジェクトには、重いデータ(数MBのバイナリ数値配列)と、軽いデータ(温度、位置など)があります。

のMongoDBの各ドキュメントには、データの16メガバイトまで保持することができ、およびバイナリフィールドタイプもサポートされています - フィールドにバイナリの数メガバイトを埋め込むことが比較的簡単になり、そして他の照会することによって、それを取得しますデータ内のフィールド。 16MB以上が必要な場合は、mongodbのGridFS APIを使用することもできます。これにより、任意の大きさのバイナリデータをディスクに保存して迅速に取得できます。

合計データ生成速度は1時間あたり数GBです。

このような急速に拡大するデータセットの場合、サイズを大きくしてもサイズに合わせてサーバーを追加できるシャード設定を作成できます。

+0

数値配列を格納するための優れた機能として、HDF5が必要です。 MPIサポート、ロッシーおよびロスレス圧縮などをサポートしています。アプリケーションの実行時にMongodbをインデックスとして使用しながら、比較的固定されたスキーマであるHDF5を永続ストレージとして使用する予定です。アプリケーションの統計アルゴリズムは頻繁に変更される可能性があるため、スキーマが大幅に変更されるたびにHDF5ストレージからMongodbインデックスを再構築します。 –