1

我有一个应用程序,它针对以“星型模式”组织的数据量执行复杂查询。黄金拥有者不断添加新的“轴”来执行搜索,结果随着时间的推移性能变得更差。目前,执行搜索操作,使用存储过程在 SQL 服务器上完成所有工作,大约需要 2 秒,这不符合金主希望代码具有交互性的愿望(<0.1 秒响应时间) )。查看 SQL Server 查询分析器,搜索是 IO 绑定的,对 100,000 条记录的 9 次表扫描,然后进行残酷的连接。由于我需要执行的查询的性质和 SQL 的限制,这无法改进。

无奈之下,我重写了查询处理器,使其在应用程序启动时将 100,000 条记录吸入缓存,然后对缓存的内存执行复杂的查询。从数据库加载所有记录大约需要 12 秒。我重写的查询处理器减轻了这种昂贵的初始负载。它现在只需要对记录进行一次扫描,响应时间为 0.02 秒。

黄金拥有者发现填充缓存的 12 秒命中每一个小时左右都会发生一次,这使这个好消息受到污染。我目前将数据存储在 ASP.NET 应用程序状态中,如Application["FactTable"]. 在 ASP.NET 应用程序空闲超过十分钟左右后,似乎正在重置应用程序状态。

如果我将 100,000 条记录移动到 ASP.NET 应用程序缓存中,我是否会经常遇到这些驱逐,或者我是否可以依靠内存中剩余的数据进行更长时间的快速检索?如果 ASP.NET 缓存也是应用程序重置的受害者,我应该使用什么其他机制?我想到了一个托管我的数据库缓存实例的单独应用程序域,但我不想走这条路,除非我的其他选项被关闭。

4

1 回答 1

1

我意识到你有很多数据和处理,你必须尝试一些事情来加速这个场景,但是使用由 IIS 管理的应用程序状态将是不稳定的......

您是否考虑过在另一个进程中运行您的计算等,即创建一个定期运行查询以组织您的数据并将“平面”数据保存到数据库缓存的 Windows 服务。当用户请求数据时,他们只会获得最后一个数据库缓存结果......然后通过将这些结果保持在应用程序状态来进一步加快速度,如果它被破坏,它可以自行刷新?

于 2013-05-02T10:00:39.200 回答