8

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

アプリケーションはPythonで記述されており、各シミュレーション結果はPythonオブジェクトとしてモデル化されています。1時間ごとに、最大100の結果(オブジェクト)が生成されます。ほとんどのオブジェクトには、重いデータ(数MBの2進数配列)といくつかの軽いデータ(温度、位置など)があります。合計データ生成レートは1時間あたり数GBです。

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

私はsqlalchemy+sqliteオプションを知っています。ただし、大量のデータをHDF5にストリーミングすることは、SqlAlchemyで自然にサポートされているようには見えず、固定スキーマは面倒です。

私はこの投稿( HDF5データセットの検索)を知っていますが、「インデックステーブル」自体は高速クエリのためにいくつかのメモリ内インデックスを必要とします。

私が飛び込む前に私が見なければならない代替の解決策があるかどうか疑問に思いますか?それとも、計画で見落としていた問題はありますか?

TIA。

4

2 に答える 2

3

あなたが説明した状況に関連する可能性のある Mongo について知っておくべきことと、Mongo が適している理由:

オンライン分析を行い、生データに対する派生データの依存関係を追跡し、「温度が 400 度を超え、(x0,y0) 付近の位置の波形を教えてください」などのクエリを実行する必要があります。

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

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

MongoDB の各ドキュメントは最大 16MB のデータを保持でき、バイナリ フィールド タイプもサポートされているため、数メガのバイナリをフィールドに埋め込み、データ内の他のフィールドをクエリして取得するのは比較的簡単です。16MB 以上が必要になると予想される場合は、mongodb の GridFS API を使用することもできます。これにより、バイナリ データの任意の大きなブロブをディスクに保存し、それらをすばやく取得できます。

総データ生成レートは、1 時間あたり数 GB です。

このように急速に拡大する大規模なデータ セットの場合、サーバーを追加してサイズが大きくなっても対応できるようにするシャード セットアップを作成できます。

于 2012-01-25T15:56:50.603 に答える
0

Vistrailsを見たことがありますか?

于 2012-01-25T11:09:50.303 に答える