ASP.NET超快速数据搜索自动完成,请指导我

时间:2010-12-15 06:42:06

标签: c# asp.net search autocomplete

感谢您的时间和关注。

我有ajaxtookit自动完成和需求是让它超级快。目前,数据位于数据库中,并且每次请求都会获取数据并来自数据库。这些数据是联系人和地址,通常会在表格中添加新记录。有三种解决方案可供考虑。请指导我你的建议和你认为最好的。

  1. 让数据库中的数据进行索引,如果可能的话,进行一些连接轮询,以便节省连接建立时间。

  2. 在应用程序服务器中缓存数据。使用Linq查询。

  3. 搜索某个文件中的已排序数据。

  4. 请指导和帮助我。

    由于

2 个答案:

答案 0 :(得分:3)

如果您的数据不经常更改,我会选择server-side caching

答案 1 :(得分:1)

以下是一些提示:

  • 使用存储过程进行数据库工作 - 尽可能合理地优化它(使用索引,提示,视图等)。 使用存储过程将允许执行计划在数据库引擎中“缓存”,因此不必每次都重新计算。不要使用LINQ或ADO.NET--这些是在这种特定情况下你无法承受的提供者转换开销 - 直接使用本机SQL。使用存储过程意味着你从get get中编写本机SQL,而不是到LINQ-SQL / LINQ-Entities,其中表达式树需要转换为本机SQL。你负担不起这个开销(你不需要)。当然,根据你的ORM(如果你有的话),有一些步骤可以反作用,例如实体框架中的编译查询

  • 缓存选项#1 - “最近查询”。我们有一个“SearchQuery”缓存表。我们跟踪搜索,并保留与之匹配的“匹配”记录。 (所以“纽约”可能有“纽约”,“纽约”,“纽约”,“纽约”都与之相关)。这样,我们就不必继续“搞清楚”自动完成用户查询的匹配记录(无论如何,无论是SQL Server FTS,T-SQL LIKE还是基本的LINQ /字符串操作) )。这可以为您节省大量时间。您可以在内存中缓存“最后100次搜索”以增加一些奖励速度。

  • 缓存选项#2 - “数据”。在Web服务器上缓存数据库调用的结果。缓存键应该与存储过程的参数匹配。

  • 缓存选项#3 - “输出(JSON / XML)”。我假设您使用的是ASP.NET Web窗体,而不是MVC。所以我猜你有一个ASMX / WCF Web服务响应你的自动完成调用。您可以在 addition 中缓存此Web方法调用的输出以缓存实际数据。请注意,如果未能有效处理到期,合并的输出/数据缓存可能会导致“陈旧”数据。

HTH