C# 搜索引擎逻辑与分页,与大结果集的工作

C# 搜索引擎逻辑与分页,与大结果集的工作,c#,asp.net,C#,Asp.net,我有一个带有内部搜索引擎的网站,搜索具有特定参数的用户,如年龄、身高。。。。有成千上万的用户,所以我决定使用高级CTE,以便每次检索10条记录,以减少MSSQL服务器上的负载 在这个CTE中,我按页面(即每页10条记录)获取结果,同时按用户的上次访问进行排序 问题是,我不能使用默认的asp.net内置的寻呼机控件,所以我做了我的,这很好,但每次生成搜索时,我需要获得整个结果集中的页数,因此我首先得到结果集,然后是最大记录数,这样我就可以将它除以10,得到最新的页码,以便在我的寻呼机控制器中使用

我有一个带有内部搜索引擎的网站,搜索具有特定参数的用户,如年龄、身高。。。。有成千上万的用户,所以我决定使用高级CTE,以便每次检索10条记录,以减少MSSQL服务器上的负载

在这个CTE中,我按页面(即每页10条记录)获取结果,同时按用户的上次访问进行排序

问题是,我不能使用默认的asp.net内置的寻呼机控件,所以我做了我的,这很好,但每次生成搜索时,我需要获得整个结果集中的页数,因此我首先得到结果集,然后是最大记录数,这样我就可以将它除以10,得到最新的页码,以便在我的寻呼机控制器中使用

所以每次页面加载时,都会进行两次db调用,而我希望在用户切换具有相同搜索参数的页面时避免不必要的记录量


您建议如何做?

缓存结果总数,例如,通过分配一些(依赖于用户的)令牌,并在用户分页时将其传回服务器?您也可以这样缓存结果集本身。

添加、更新和删除“最大行”缓存的触发器是什么?所有结果集都是50000条记录,并且增长速度很快,因此缓存所有记录不是一个选项。根据其增长速度以及新结果相关的可能性有多大,您可能会有不同的策略。一种选择是在用户不活动一段时间后缓存过期时使用超时。另一个选项是计算新获取的结果集(前几页)的校验和,如果它与前一个结果不同,但发生了更改,并且您希望使缓存过期,那么计算新获取的结果的校验和是什么意思?指纹。哈希代码。任何可以告诉您刚获取的结果(无论如何都要获取)是否与具有缓存值的结果不同的内容。如果它是一样的,那么你可能不在乎尾巴是否真的变了。如果不同,则可能需要重新计算max rows的缓存值