在ASP.NET系统中缓存昂贵搜索结果的好设计是什么?用于ASP.NET应用程序中搜索结果的缓存体系结构
任何想法都会受到欢迎...特别是那些不需要发明我们自己的复杂基础设施的想法。
下面是相关问题的一些总体要求:以几百结果记录
- 每个搜索结果可以生产从零包括:(5-15秒在数据库中)
- 结果必须在客户端显示之前进行分页,以避免用户信息过载
- 用户希望能够在返回的结果中进行排序,过滤和搜索 个
- 用户期望能够在搜索页面之间快速切换导致
- 用户期望能够在任意数量的页面选择
- 用户期望比较精力充沛的表现一次搜索有多个项目(通过复选框)完成
我看到在哪里以及如何实现缓存一些可能的选项:
1.在服务器(在会话或应用程序缓存)的缓存,使用回传或Ajax的面板,以促进有效的分页,排序,过滤器ng和搜索。
- 的观光:从ASP.NET基础设施
- 缺点容易实现,体面的支持:在服务器上非常健谈,内存密集型,数据可以被缓存超过所需的时间;禁止负载平衡做法
2.缓存在服务器(如上所述),但使用的是被移出的存储器的一段时间后,以减少在服务器上存储的压力可序列化结构
- PROS:高效使用服务器内存;使用负载平衡扩展的能力;
- CONS:.NET基础结构的有限支持;当数据结构发生变化时可能很脆弱;给数据库增加额外的负载;显着更复杂
3.在客户端缓存(使用JSON或XML序列化),使用客户端JavaScript进行分页,排序,筛选和选择结果。
- 的观光:用户体验可以接近 “富客户端” 的水平;大多数浏览器可以本地处理JSON/XML - 体面库操纵存在(例如jQuery的)
- CONS:初始请求可以采用很长的时间来下载;客户端机器上占用大量内存;将需要的手工制作的Javascript在一定程度上实现使用的数据的压缩/编码表示在客户机上
4.缓存 - 回调到服务器切换时的页面,排序,过滤和搜索解码。
- PROS:服务器最小化存储器的影响;只要客户需要,州就可以生存;在客户端略有改善存储器使用超过JSON/XML
- CONS:大型数据集的客户端/服务器之间来回移动;与使用JSON/XML的纯客户端缓存相比,性能降低(由于网络I/O);更为复杂的实施 - 从.NET /浏览器
5.一些替代缓存方案我还没有考虑有限的支持...
建议:对您的原始标题“搜索结果缓存”进行一些搜索。只在你的场景中进行缓存,是自己动手做的。去过也做过;搜索很困难。只是在说。 – jro 2009-10-22 16:49:43
就数据库查询而言,5-15秒是很长的时间。也许你应该把重点放在改进数据库查询(使用“内部连接”而不是“外部连接”,使用“内部连接”而不是“where”过滤器)上。另请考虑使用全文索引。 – 2009-10-26 08:48:43