我正在使用实体框架来检索由属性和集合组成的复杂对象(这些集合也可以由集合组成)。数据本身很小,但结构很复杂。一个简单的例子(实际上有更多的属性和集合):
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)并将其传递给优化算法。必须每半小时为所有家长做一次。从数据库加载结构大约需要一秒钟,这意味着我只能在给定的时间间隔内优化大约 1800 个父母。
当然,我可以尝试优化查询,在数据库中添加一些索引等,并将从数据库中检索的时间从 1 秒降低到 0.7 秒。那么我最多可以优化2500个Parents左右,但要求是10000个(db访问时间必须小于0.18秒)。我不知道如果我不使用实体框架编写存储过程,性能会提高多少,但对我来说,对象结构似乎是真正的问题,因为为了检索所有数据,需要多次往返数据库。
由于 Parent 的数据在每个间隔之间发生了很大变化,我不知道缓存是否是要走的路。
有没有人对类似问题有任何经验或对我应该如何做以将数据库访问时间减少 10 倍的任何建议?