【发布时间】:2014-11-26 21:12:34
【问题描述】:
我正在开始重写现有应用程序。当前的性能瓶颈之一是将用户生成的员工列表保存到静态列表中,以便他们以后可以返回并查看相同的员工列表。
下面是我正在寻找的功能的一个简单示例。生成的列表将由比示例中更复杂的查询生成。
场景: 用户搜索所有上夜班的员工,并希望保存此列表以供以后加载。他们希望列表始终返回结果,因为这是他们第一次运行搜索。 IE。如果一个新员工被添加到夜班,他们不应该出现在名单上。
我尝试过的:
目前,将结果列表中的所有 ID 作为字符串数组存储,然后使用这些 ID 重新构建查询的解决方案非常糟糕。这是非常低效的,并且会导致具有太多参数的大型列表出现问题。
我也尝试过从保存的 ID 数组构建一个表,然后加入,但是,这在大型列表(20,000 多名员工)上非常慢,并且经常导致超时。
我目前的想法是为每个列表创建一个新表,然后在该表和 Employee 表上调用 JOIN。但是,如果 100 个用户每人保存 10 个大型列表(20,000 多名员工),它很快就会成为存储和表管理的噩梦。
我认为这是一个相当普遍的问题的解决方案。但是,我找不到任何关于如何存储静态列表的示例或最佳实践(我可能正在寻找错误的东西)。有人对如何最好地处理此类用例场景有任何一般概念吗?
更新: 我想我之前尝试过以下设置,但由于某种原因无法正常工作,这是几年前的事了;但回首往事,似乎最有意义。我认为我遇到的问题是 NHibernate 在 Linq 中存在子选择问题。但是,这不再是限制。
我想我有一个StaticSavedLists 的表和一个索引表,该表将人员(上一个示例中的员工)链接到多对多映射中的员工列表。
c# 中的类如下所示:
public class StaticSavedList : BaseModel
{
public string Name { get; set; }
public IList<StaticSavedListPersonIdx> PersonsIdx { get; set; } //Has many persons
}
public class StaticSavedListPersonIdx : BaseModel
{
public StaticSavedList StaticSavedList { get; set; }
public Person Person { get; set; }
}
【问题讨论】:
标签: c# sql entity-framework tsql search