搜索引擎CACHE策略研究

一.关于 索引 用 户查询得出的结论:

(1)      用户查询有很大比例的重复性。有 30 % 到 40 %的用户查询是重复查询。

(2)       大多数重复的用户查询会在较短的间隔时间被再次重复访问。

(3)       大多数用户的查询是短查询,大约包含 2 5 个单词。

(4)       用户一般只查看返回结果的前三个页面(前 30 个 返回结果)。 58 %用户只查看第一个页面( TOP 10 ,15% 用户查看第二个页面,不超过 12 %的 用户会查看第三个页面以后的检索结果。

(5)       关于用户查询差异程度。有比较大的查询程度,一百万个用户查询中大约 63.7% 的用户查询只出现过一次。另外一方面,集中的重复查询也非常集中: 25 个高频查询大约占总查询的 1.23%-1.5%.

二. CACHE 的基本策略

(1)       LRU: 最近最少使用策略

基本假设:最近很少被重复访问的缓存记录在最近的将来也不会被访 问。这是最简单的一种 CACHE 策略。将用户查询按照最近使用时间进行排序,淘汰策略将最老的查询淘汰出 CACHE

 

(2)       FBR: 不仅考虑时间也考虑引用计数的问题。

FBR LRU 策略的基础上将 CACHE 分为三个不同的部分: NEW,OLD,MIDDLE

NEW: 存储最近被访问过的记录;

OLD :存储最近最少使用的一批记录;

MIDDLE: 存储介于 NEW OLD 之间的一批记录;

引用计数的时候不考虑 NEW 区 域的记录,只考虑 OLD MIDDLE 两个区域的记录引用计 数增加,在替换记录的时候从 OLD 区域选择引用计数最少的那个记录进行替换。

 

(3)       LRU/2 :对于 LRU 的改进,计算第二次到最后 一次被访问总的 LRU ,将老的记录淘汰。

(4)       SLRU:

CACHE 被分为两个部分:非保护区域和保 护区域。每个区域的记录都按照最近使用频度由高到低排序,高端叫做 MRU , 低端叫做 LRU 。如果某个查询没有在 CACHE 找 到,那么将这个查询放入非保护区域的 MRU 端;如果某个查询在 CACHE 命 中,则把这个查询记录放到保护区的 MRU 端;如果保护区已满,则把记录从保护区放入非保护区的 MRU ,这样保护区的记录最少要被访问两次。淘汰的机制是将非保护区的 LRU 淘汰。

(5)       LandLord 策略

将一个记录增加到 CACHE 的时候,给予这个记录一个值( DEADLINE , 如果需要淘汰记录的时候,选择 CACHE 里 面 DEADLINE 最小的那个淘汰,同时将 CACHE 里 面其它所有记录减去这个被淘汰的记录的 DEADLINE 值,如果一个记录被命中,则将这个记录的 DEADLINE 放大到一定值。

 

(6)       TSLRU Topic based SLRU: SLRU 策略相同,不过不是按照查 询调整替换策略,而是按照查询所属主题进行调整。

(7)       TLRU: Topic based LRU

基本策略和 LRU 相 同,区别在于保留查询的主题( TOPIC )信息,对于某个查询来说,不仅该主题的检索结果进入 CACHE ,而且原先在 CACHE 里 面的相同主题的查询及其结果也调整时间,更新为最新进入 CACHE 。可以看作是主题 LRU ,而 LRU 是查询 LRU

 

(8)       PDC (probability driven cache) :针对用户的浏览行为建立概率模型,然后调整 CACHE 里面的记录优先级别,针对某个查询,将用户浏览数目比较多的文档在 CACHE 里 面的级别提高。

(9)       预取策略

         所谓预取,就是系统预测用户在很短时间内的行为,然后将该行为涉及到的数据预先存储在 CACHE 里面。存在不同的预取策略,比如预取策略:因为一般用户在查看完第一页检索结果后会翻看第二页结果, 所以将该用户查询的第二页结果首先预取到 CACHE 里面,这样可以减少存取时间。

 

(10)   二级 CACHE

有两级 CACHE ,一级是查询结果 CACHE ,保留了原始查询以及相关文件;第二级 CACHE 是倒排文档列表 CACHE ,也就是查询中某个单词在索引中的倒排列表信息,这个 CACHE 主要减少了磁盘 I/O 时 间。替换策略采取 LRU ,结果证明该方法提高 30 %的 性能。

 

(11)   三级 CACHE

是对二级 CACHE 的一种改进策略,除了 二级 CACHE 里面保留的两个 CACHE , 另外增加一个 CACHE ,这个 CACHE 记录了两个单词查询的 倒排文档交集记录,这样一个是省去了磁盘 I/O 时间,另外一个减少了计算交集的操 作,有效的减少了计算量。

 

 

三. CACHE 方法性能分析与比较

(1)       LRU 适合存储比较小的记录效果才好。

(2)       中等大小的 CACHE 能够满足很大一部分重复用户查询。(大约 20 % 的查询能够在中等大小 CACHE 找到)

(3)       将时间因素和命中次数结合起来的缓存策略好于只考虑时间因素的策略。实验表明 FBR/LRU2/SLUR 性能总是好于 LRU 策 略。

(4)       对于小 CACHE 来说,静态 CACHE 策略要好于动态 CACHE 策 略,命中率要高些。

(5)       对于 LRU 来说,大 CACHE 的重复命中率大约占 30 %。

(6)       对于大 CACHE 来说, TLRU 略微好于 LRU ,但是差别不太大。对于小 CACHE , 结论正好相反。

(7)       随着 CACHE 逐步增大,命中率逐渐增 加,对于 SLRU 来说,其性能跟两个分区划分大小无关。

(8)       PDC 的命中率高于 LRU 变 形算法 ,大约 有 53 %命中率,不过计算复杂度高。

 

 

以前曾经提到过搜 索引擎的缓存策略, 根据搜索引擎搜索的关键词的统计分布, 可以优化设计搜索引擎的缓存策略. 就普通的缓存策略上讲, 缓存是因为在一定的时间段内的搜索的关键词集中在一定的范围内, 并且这些搜索相对稳定. 例如每天搜索"美女"的人总有10万,20万, 而结果在这段时间相对稳定, 因此没有必要每次去检索索引文件, 而将上一个人搜索的结果直接返回便可以了.
     搜索引擎缓存策略也同搜索引擎的算法密切相连, 除了搜索缓存, 索引缓存也是一个好方法. 独立或者分布一些权重较高的文档也是一种提高效率的方法. 例如我们有1000万的网页的权重(可以简单的理解为pagerank)比较高, 那么这些网页的排序相比另外一些权重较低的网页相对较为稳定, 就不妨独立出来进行相对独立的索引缓存.

     关于缓存的分布, 一般的小型搜索引擎不会用到, 但是如果每天处理上亿次的搜索, 缓存的分布就应当有一定的分布规划, 例如根据提交的关键词构成hash table, 然后对应于不同的搜索服务器, 实现缓存的分布.

     让我们看看实际例子吧, 我们拿百度, google, yisou, 中搜, tag.bokee.com 进行简单的测试:

     因为测试, 要搜索一些在过去7天没有人搜索过的关键词, 或者组合词. 为了保证没有人搜索过, 我选择在各个搜索引擎里搜索"a s d f v g h" , 这是我在键盘上随机打出的一些组合, 相信这世界上在7天没有人相同搜索, 这样保证我的第一次的搜索是 fresh search, 就是一定需要搜索引擎去检索索引文件, 而不是通过缓存策略.

以下是结果:
百度: 0.279秒
google: 0.24 秒
一搜: 0.24 秒
中搜: 0.001秒(无结果!!!!)
博客搜索: 0.041 秒

下面是第二次搜索的结果:
百度: 0.001秒
google: 0.05 秒
一搜: 0.09 秒
中搜: 0.002秒(无结果!!!!)
博客搜索: 0.019 秒



     经过简单的测试, 可以看出缓存机制只有在Baidu和google搜索引擎里都有, 但是各自效率不一样, 如下是简单的比例:

百度: 100
google: 5
一搜: 没有明显的缓存
中搜: 没有明显的缓存
博客搜索: 没有明显的缓存

     而在缓存效率上百度要远远大于google, 这点大概是因为google的gfs本身的分布效率已经相当不错, 因此进行缓存也不会有数量级的提升.

     而百度, 根据测试可能是集中方式的数据存储, 但是根据搜索进行hash分布, 因此才会在缓存上有显著的提升. (这个属于猜测)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值