ajax自动完成性能问题以访问数据库或过滤预先cahced的结果

本文关键字:过滤 cahced 结果 数据库 访问 性能 问题 ajax | 更新日期: 2023-09-27 17:59:16

在我现有的asp.net应用程序中,我有一个ajax自动完成控件,它使用web方法来获取实习生命中存储过程的自动完成结果。但是,由于每次访问数据库都很昂贵,而且是一个性能问题,我们希望缓存大约45000行的所有查找结果,并使用cahced数据来过滤和获取数据。

我们使用linq查询进行过滤,使用contains方法检查前缀。但是,如果我使用缓存的数据过滤,它比每次访问数据库的原始实现花费的时间要长得多。

你有什么方法可以建议我,当用户在UI中键入数据时,可以更快地检索结果集吗。

我知道,保持45k的行数和过滤将是一个真正的痛苦。达到数据库将是更好的方法。

由于我们面临一些性能问题,请让我知道任何更好的方法。

用Jquery自动完成插件替换Ajax自动完成有什么不同。。?

代码:就像任何其他ajax自动完成代码一样:

<ajaxToolkit:AutoCompleteExtender 
    runat="server" 
    ID="autoComplete1" 
    TargetControlID="myTextBox"
    ServiceMethod="GetUserList"></ajaxToolkit:AutoCompleteExtender>
[WebMethod]
public string[] GetUserList(string prefix)
{
return UserManager.GetUserNamesBySearch(prefix);
}
public string[] GetUserNamesBySearch(string prefix)
{
List<User> userCollection=UserServiceMgr.GetUserList(prefix);
var filteredUsers=from user in userCollection
              Where user.FirstName.contain(prefix)
              select user.FirstName.
filterdUsers.ToArray(); 
}

提前感谢

Suri

ajax自动完成性能问题以访问数据库或过滤预先cahced的结果

IMO,45k+条记录太多,无法尝试创建缓存策略。

假设"缓存键"是一个部分字符串,那么您将在缓存中处理重复的结果。

我们还在ASP.NET MVC应用程序中使用自动完成(jQuery),数据库中有数百万条记录。

我们使用存储过程,全文搜索覆盖后端的索引视图。

考虑到数据量,它的性能相当不错。

因此,我建议使用FTS提供程序,如SQL Server或Lucene来优化后端,而不是使用ASP.NET缓存。

FTS天生适合自动完成,因为它内置了噪音词和词库等智能功能。

如果您的底层数据源不会经常更改,您可以考虑将结果存储在应用程序的缓存中,并建立刷新数据的超时。如果数据每隔一段时间更改一次,则可以在源表上设置依赖项,以便在修改表的数据时使缓存对象无效,然后重新构建缓存对象。如果数据经常更改,那么我建议您完全按照现在的做法进行操作。

当我说"重建"缓存对象时,应用程序有责任测试缓存对象的存在,并重建它,如果不存在,则在缓存中重建它。

请记住,如果要使用SqlDependency,则必须为其设置数据库。aspnet_regsql.exe能够设置数据库。此外,如果您的应用程序依赖于保证数据准确的事实,那么我也会像您现在所做的那样,或者使用SqlDependency。

缓存示例

SqlDependency

aspnet_regsql.exe