私は結果を格納するためにバッキングデータベースを必要とするシミュレーションを書いています。シミュレーションは大量のデータを書き込みます。明らかなパフォーマンス上の理由から、私はNoSQLデータベース、特にMongoDBを試してみました。しかし、私は自分のデータモデルに少し戸惑っています。MongoDBスキーマ設計 - 参照と埋め込み
リレーショナルの世界では、スキーマはこれに翻訳します:
- シミュレーション
- シナリオは、特定のシミュレーションケースを記述するなど、シミュレーションの設定、ステータスを保持しています。
- 実現グループTestResults。
シミュレーションは次のように動作します。まず、コンフィギュレーション(シミュレーションテーブルへのマップ)を作成し、シナリオと計算するRealizationの数を指定します。次に、シミュレーションを開始します。シミュレーションは、シナリオで実現を作成します(並行して、多くの実現と同時に計算され、シミュレーションが現在実行しているシナリオに挿入されます)。
しかし、NoSQL、特にMongoDBではリレーションが悪く遅いので、できるだけ埋め込みドキュメントを活用する必要があります。だから私はこの思い付いた:
このモデルは私の最初のすべての実現を計算し、THEN(シナリオの)単一のインサートとしてデータベースに保存する最高のパフォーマンスを与える必要があります。
しかしパフォーマンス上の理由から、私は、計算が実行されるとすぐに、シナリオにRealizationを挿入したいと考えています。実現するたびにシナリオを更新する必要があります。これは悪い考えですか? MongoDBのリファレンスでは、親ドキュメントに埋め込みドキュメントを追加すると、親ドキュメントが更新されますが、とにかくパフォーマンスが低下すると言います。
Realizationをシナリオに埋め込むのではなく、それを参照する方が速いでしょうか?あとでデータを読み込んだり集計すると、どれくらいのパフォーマンスが失われますか?私が知るべき他の落とし穴?
ありがとうございました。