結果を保存するためのバッキング データベースを必要とするシミュレーションを作成しています。シミュレーションは大量のデータを書き込みます。明らかなパフォーマンス上の理由から、NoSQL データベース、特に MongoDB を試すことにしました。ただし、データ モデルについては少し戸惑っています。
リレーショナルの世界では、スキーマは次のように変換されます。
- シミュレーションには、シミュレーションの構成、ステータスなどが保持されます。
- シナリオでは、特定のシミュレーション ケースについて説明します。
- 実現グループ TestResults。
シミュレーションは次のように動作します。最初に、構成 (シミュレーション テーブルへのマップ) を作成し、シナリオと、計算する実現の数を指定します。それではシミュレーションを開始します。シミュレーションは、シナリオで実現を作成します (並行して、非常に多くの実現が同時に計算され、シミュレーションが現在取り組んでいるシナリオに挿入されます)。
ただ、NoSQL、特にMongoDBはリレーションが悪くて遅いので、埋め込みドキュメントを極力活用したい。だから私はこれを思いついた:
このモデルは、最初にすべての実現を計算し、それを (シナリオの) 単一の挿入としてデータベースに保存するときに、最高のパフォーマンスを発揮するはずです。
ただし、パフォーマンス上の理由から、計算されたらすぐに実現をシナリオに挿入したいと考えています。これは、実現が完了するたびにシナリオを更新する必要があります。これは悪い考えですか?MongoDB のリファレンスでは、埋め込みドキュメントを親ドキュメントに追加すると、親ドキュメントは更新されますが、とにかくパフォーマンスが低下すると書かれています。
Realization を Scenario に埋め込まずに参照した方が速いでしょうか? 後でデータを読み取って集計すると、どの程度のパフォーマンスが失われますか? 私が知っておくべき他の落とし穴はありますか?
ありがとう。