.NET vs SQL Server - 重复搜索的最佳实践

时间:2011-10-24 12:45:59

标签: asp.net .net sql-server sql-server-2005

我的客户要求将基于“建议”的查找添加到特定表单字段中。 换句话说,当您开始在字段中输入时,应该有一个“Google风格”弹出窗口,提示可供选择的结果。将有“数万”可能的建议 - 这是我目前对数量的最佳估计。

使用AJAX发送/检索结果,我的问题是在.NET缓存中存储所有建议并在那里处理是否更好,或者是否最好在SQL Server上为每个请求运行基于存储过程的查询?

这将使用.NET 2.0和SQL Server 2005

4 个答案:

答案 0 :(得分:3)

每次面对这样的任务时,我都会使用一个技巧。不要在每次按键时都这样做。将搜索的启动置于滑动超时。

此处的目的是仅在用户暂停键入时启动搜索。通常我将超时设置为.1到.2秒。在心理上它仍然是瞬间的,但它大大减少了你将用于搜索的任何负担

答案 1 :(得分:1)

当我在SQL Server环境中看到“在键入时建议”类型搜索时,我看到了使用某种缓存机制的最佳性能,通常是分布式方法 - 通常是memcached。即使你的代码得到了很好的优化,你的数据库也能很好地调整,你的查询只需要一个< = 10ms来调用它,进行处理和返回,它们输入时仍然是10ms。

答案 2 :(得分:1)

您的瓶颈将数据从服务器传输到浏览器。您几乎可以在几乎任何时间轻松地从数据库中生成大量结果,但返回浏览器需要花费很长时间。

您必须找到一种方法来限制服务器返回的结果,这样您才能获取用户现在必须看到的内容。

当您将数据流量降至合理水平时,您可以开始考虑优化服务器部分。一些缓存和逻辑应该是容易的,考虑到当用户键入结果时通常是先前结果的子集,例如, “hat”的匹配是“ha”匹配的子集。

答案 3 :(得分:0)

这取决于物品的数量。如果你可以在.NET进程中缓存这些项目而不会耗尽内存,那么这种方法肯定会更快。

但如果无法做到这一点,那么您将无法在每次请求时访问数据库。存储过程是一种很好的方法。

但是有一些设计模式可以指导你。我在开发类似于你正在做的事情时使用了以下两个。