搜索引擎中cache的使用

来源:互联网 发布:linux线程安全退出 编辑:程序博客网 时间:2024/05/18 03:46

1、静态(static)和动态(dynamic)模型

搜索引擎中使用cache对减少查询响应时间和提高系统吞吐量有很大帮助。搜索引擎的cache模型可以分为静态和动态两种。静态模型使用存储在查询日志中的历史数据,将其中访问频率最高的项目加入cache中。这通常用在cache预取中。文献表明,静态策略对小容量cache提高命中率更有帮助,动态策略在大容量cache中表现的更好。动态模型则用来将最近最经常被访问的项目加入内存中,为容量有限的cache淘汰不不被经常访问的项目,移出cache。


2、cache存储方式

cache中存储的有两种方式,一种是直接存查询结果文件,另一种存储要查询的文件ID。直接存查询结果文件的cache叫做result cache,它存储了需要返回的查询结果的文件摘要和其他一些数据,包含HTML页面,标题,URL等,用户请求时可以快速返回。存储查询文件ID的cache只存储了文件的地址,这样可以节省大量cache空间存放更多项目,提高了cahce的命中率,但是每次查询cache命中时,都要重新计算寻找文件,提高了响应时间。权衡了两者优缺点,还提出了混合两种存储方式的使用方法。

有文献提出了一种五级静态cache结构(a five-level static cache architecture),将cache分成了HTML产生页面,文件ID产生,倒排记录表,交叉倒排记录表和文件五种。(原文:separate caches for HTML result pages, docID results, posting lists, intersections of posting lists, and documents)

文献[2]提出了一种混合策略,大意是利用文件ID cache给予即将被淘汰出cahce的项目第二次“生存”的机会。文章提出将cache分为存储HTML页面和文件ID两部分,分别存放一个项目的HTML和文件ID两部分记录。当收到一个查询Q时,如果两部分cache中有一部分缺少Q的记录时,都将有关Q的项目,或者是HTML,或者是文件ID补齐到cache中。当有一查询项目将要被淘汰时,先淘汰缓存在HTML cache中的记录,而保留存在文件ID cache中的记录,这样就相当于给这个查询项目第二次机会。如果该查询再次到来时,在HTML cache中将会miss,但是在文件ID cache中将会hit,这样提高了命中率,也保证了响应速度。在文件ID cache中命中后,将会补全这个查询在HTML cache中的记录。

文章进一步提到,在查询日志中,有接近一半的查询是孤立的,也就是说,有大量的查询是不会重复出现在不久的未来中的,所以如果把这部分查询加入到两部分cache中是一种浪费,占用了cache空间。为了减少这个问题,文章提出要先用特征提取的方法对查询词进行预测,如果预测到查询词是“孤立”出现的,那么只讲它的记录添加到文件ID中。虽然预测无法准确,但是能提高一些查询效率。

3、cache策略

为了提高cache命中率,动态cache策略通常由许可策略(admission policy)和驱逐策略(eviction policy)组成。许可策略将访问频率最高的项目移进cache,或者说将不久的未来最有可能重复访问的项目移进内存。驱逐策略用于识别最不可能重新访问的项目,并把它移出cache,维持未来最有可能重复访问的项目继续驻留cache,提高命中率。下面具体来看看有哪些算法。[1] 搜索引擎CACHE策略研究

3.1、常见算法

(1) LRU( Least Recently Used):最近最少使用策略
基本假设:最近很少被重复访问的缓存记录在最近的将来也不会被访问。这是最简单的一种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

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

3.2、预取策略

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

比如,当搜索引擎收到<Q,i>这样的一个请求时,表示要返回给用户查询词Q的第i个页面。这是搜索引擎先将和查询词Q相关的F个界面<Q,i+1>,<Q,i+2>,......,<Q,i+F>主动的移入cache。有文献表明,这个工作将会提高cache命中率。但是这也会增加服务器后端的负担。为了给预取的项目腾出足够的空间,还有可能将原本处于cache中将会被用到的项目移出cache。

为了改善预取策略,有一些有意思的结论被提出来了。比如说有人发现,如果一个查询条件在请求第一页的查询结果时,cache就Miss了,那么用户需要第二页查询结果的概率大约只有10%。如果第一页查询结果在cache中命中的话,需要第二页的查询结果就提升到了50%。因此,预取的项目数量F是要根据查询条件确定的而不是固定的。

基于特征的cache策略:通过提取几种查询词的特征(比如查询的长度和频率特征),决定哪些查询词可以进入cache,哪些又将被淘汰出去。

4、幂律分布(power law distribution)

在互联网上,80%的链接指向15%的网页,有很少的节点占据大量的连接,就好像20%的人拥有80%的财富。科学家研究的几乎所有网络都是幂律分布。富人会越来越富,拥有连接越多网站会获得越多的连接。这在对搜索引擎计算网页排名和提高检索效率是一个重要的观察结论。一百万个用户查询中大约 63.7% 的用户查询只出现过一次。另外一方面,25 个高频查询大约占总查询的 1.23%-1.5%. 。幂律分布的图像大致如下图所示,查询词排名越高,用户的检索次数也越大。基于幂率分布来设计cache策略,能够有效提高cache命中率。


5、搜索引擎体系结构

[3] 为了支持高查询吞吐量,商业搜索引擎采用平行的架构。用户请求的查询消息由代理接受,再由代理将查询任务分配到服务器处理。另外这些平行的服务器还要采用多副本体系结构,文件集合和倒排索引都要复制到多个服务器的cache 。像谷歌和百度就把完整的倒排索引复制到每个服务器上。这样,每个服务器都可以在本地处理任务,而不需要有通讯的代价,提高了系统查询的吞吐率。有实验证明,这种平行、多副本的体系结构比分布式结构要更好,相比之下分布式结构没有使用多副本。下图即为平行、多副本的搜索引擎结构图。





参考资料:[1] 搜索引擎CACHE策略研究

                    [2] Second Chance: A Hybrid Approach for Dynamic Result Caching and Prefetching in Search Engines

                    [3] Diversified Caching for Replicated Web Search Engines

0 0
原创粉丝点击