我的客户要求将基于“建议”的查找添加到特定表单字段中。 换句话说,当您开始在字段中输入时,应该有一个“Google风格”弹出窗口,提示可供选择的结果。将有“数万”可能的建议 - 这是我目前对数量的最佳估计。
使用AJAX发送/检索结果,我的问题是在.NET缓存中存储所有建议并在那里处理是否更好,或者是否最好在SQL Server上为每个请求运行基于存储过程的查询?
这将使用.NET 2.0和SQL Server 2005
答案 0 :(得分:3)
每次面对这样的任务时,我都会使用一个技巧。不要在每次按键时都这样做。将搜索的启动置于滑动超时。
此处的目的是仅在用户暂停键入时启动搜索。通常我将超时设置为.1到.2秒。在心理上它仍然是瞬间的,但它大大减少了你将用于搜索的任何负担
答案 1 :(得分:1)
当我在SQL Server环境中看到“在键入时建议”类型搜索时,我看到了使用某种缓存机制的最佳性能,通常是分布式方法 - 通常是memcached。即使你的代码得到了很好的优化,你的数据库也能很好地调整,你的查询只需要一个< = 10ms来调用它,进行处理和返回,它们输入时仍然是10ms。
答案 2 :(得分:1)
您的瓶颈将数据从服务器传输到浏览器。您几乎可以在几乎任何时间轻松地从数据库中生成大量结果,但返回浏览器需要花费很长时间。
您必须找到一种方法来限制服务器返回的结果,这样您才能获取用户现在必须看到的内容。
当您将数据流量降至合理水平时,您可以开始考虑优化服务器部分。一些缓存和逻辑应该是容易的,考虑到当用户键入结果时通常是先前结果的子集,例如, “hat”的匹配是“ha”匹配的子集。
答案 3 :(得分:0)
这取决于物品的数量。如果你可以在.NET进程中缓存这些项目而不会耗尽内存,那么这种方法肯定会更快。
但如果无法做到这一点,那么您将无法在每次请求时访问数据库。存储过程是一种很好的方法。
但是有一些设计模式可以指导你。我在开发类似于你正在做的事情时使用了以下两个。