搜索引擎的缓存机制

以前曾经提到过搜索引擎的缓存策略, 根据搜索引擎搜索的关键词的统计分布, 可以优化设计搜索引擎的缓存策略. 就普通的缓存策略上讲, 缓存是因为在一定的时间段内的搜索的关键词集中在一定的范围内, 并且这些搜索相对稳定. 例如每天搜索"美女"的人总有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 秒
一搜: 没有明显的缓存
中搜: 没有明显的缓存
博客搜索: 没有明显的缓存

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

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

搜索记录在以下位置:
http://www.wespoke.com/archives/download/se-buffer/baidu1.png
http://www.wespoke.com/archives/download/se-buffer/baidu2.png
http://www.wespoke.com/archives/download/se-buffer/google1.png
http://www.wespoke.com/archives/download/se-buffer/google2.png
http://www.wespoke.com/archives/download/se-buffer/tag1.png
http://www.wespoke.com/archives/download/se-buffer/tag2.png
http://www.wespoke.com/archives/download/se-buffer/yisou1.png
http://www.wespoke.com/archives/download/se-buffer/yisou2.png
http://www.wespoke.com/archives/download/se-buffer/zhongsou1.png
http://www.wespoke.com/archives/download/se-buffer/zhongsou2.png


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注