プロパティとコレクションで構成される複雑なオブジェクトを取得するためにエンティティ フレームワークを使用しています (これらのコレクションはコレクションで構成されることもあります)。データ自体はかなり小さいですが、構造は非常に複雑です。簡単な例 (実際にはさらに多くのプロパティとコレクションがあります):
public class Parent
{
public int ParentId {get; set;}
public ICollection<Measurement1> MeasurementOnes {get; set;}
public ICollection<Measurement2> MeasurementTwos {get; set;}
public ICollection<Child> Children {get; set;}
public string PropertyOne {get; set;}
public string PropertyTwo {get; set;}...etc
}
public class Child
{
public int ChildrenId {get; set;}
public ICollection<Measurement3> MeasurementThrees {get; set;}
public string PropertyThree {get; set;}
}
上記の例は非常に単純化されていますが、構造の概要を示しています。すべての測定値は (外部 API によって) 毎分更新され、プロパティも変更される可能性があります。
この構造をデータベース (SQL Server を使用しています) から読み込み、最適化アルゴリズムに渡す必要があります。これは、すべての親に対して 30 分ごとに行う必要があります。データベースから構造をロードするのに約 1 秒かかります。つまり、特定の時間間隔で約 1800 の親しか最適化できません。
もちろん、クエリを最適化し、データベースにいくつかのインデックスなどを配置し、データベースからの取得時間を 1 秒から 0.7 秒に短縮することもできます。次に、最大で約 2500 の親を最適化できますが、要件は 10000 です (db アクセス時間は 0.18 秒未満である必要があります)。エンティティ フレームワークを使用する代わりにストアド プロシージャを記述した場合にパフォーマンスがどの程度向上するかはわかりませんが、すべてのデータを取得するにはデータベースへの複数のラウンドトリップが必要であるため、オブジェクト構造が本当の問題のようです。
親のデータは間隔ごとにかなり変更されるため、キャッシングが適切かどうかはわかりません。
データベースへのアクセス時間を 10 分の 1 に短縮するためにどのようにすればよいかについて、同様の問題の経験や提案はありますか?