我有一个带有Auto Suggest功能的搜索模块,可以在ASP.Net中构建 搜索条件是Training Name,数据库中有一个存储培训的表。表中的大小将达到30,000个培训,因此我必须非常谨慎地选择方法,同时牢记性能。
可能有大约3000名用户同时登录系统。当用户开始键入训练名称时,系统应自动提示。
我想到的方法是
缓存对象 - 在用户键入3(例如saf)字符后会有数据库命中,系统会在活动表中搜索以saf开头的所有训练,并将缓存它们。其他请求将通过此缓存。 但是这种方法的问题在于,如果有3000个并发用户使用该系统,并且如果他们都搜索3个不同字母的不同组合,那么缓存就会受到影响。
客户端缓存 - 对此没有太多考虑。我在这里看到的唯一缺点是我们可能需要定期清除临时Internet文件夹。
使用会话 - 我认为完全排除这一点,因为我认为它会达到性能。
请您在此处提出我可以采取的最佳或其他不同方法。我正在寻找您对此有所了解的所有信息/想法。
非常感谢
迪帕。
答案 0 :(得分:1)
我最喜欢的jQuery插件(如果你打算使用jQuery)就是Flexbox。
它有一个非常令人印象深刻的功能列表。
答案 1 :(得分:0)
您可以使用内置缓存功能的jQuery Auto Complete plugin。
$(document).ready(function()
{
$(".landingpage").autocomplete('/AutoSuggestHandler.ashx',
{
minChars: 1,
matchSubset: 1,
autoFill: false,
delay: 10,
scroll: false
}).result(OnResultSelected);
}
此外,您可以在通用处理程序上指定outpu缓存,以满足跨用户缓存的需要。
答案 2 :(得分:0)
我认为你的第一种方法会奏效。
确保该字段上有索引 - 您可能不需要索引整个字段。这应该会给数据库带来不错的提升。您可能需要查看全文索引,具体取决于您的搜索工作方式,甚至使用像lucene这样的外部库来表示性能是一个问题。
从查询中缓存对象,甚至生成的xml / json,以提高性能。
您还应该设置http标头,以便浏览器也可以缓存xml / json。
答案 3 :(得分:0)
您的帖子确实包含两个问题:
我的回答......
1:我们发现ASP.NET AJAX AutoComplete Extender适用于所有现代浏览器,提供了流畅的用户体验,并且非常易于实现。
在您的Web应用程序中,您需要创建一个具有特定签名方法的Web服务(在上面链接的文档中有所介绍)。
2:您是否证明了您的项目这部分确实存在性能瓶颈?我建议设置一个测试工具并使用大量自动完成查询命中您的数据库以查看它可以花多少时间。警惕premature optimization。