转自: 点击打开链接http://zhuanlan.51cto.com/art/201703/533480.htm
二、实时搜索引擎架构
大数据量、高并发量情况下的搜索引擎为了保证实时性,架构设计上的两个要点:
(1)索引分级
(2)dump&merge
索引分级
《深入浅出搜索架构(上篇)》介绍了搜索引擎的底层原理,在数据量非常大的情况下,为了保证倒排索引的高效检索效率,任何对数据的更新,并不会实时修改索引,一旦产生碎片,会大大降低检索效率。
既然索引数据不能实时修改,如何保证最新的网页能够被索引到呢?
索引分为全量库、日增量库、小时增量库。
如下图所述:
(1)300亿数据在全量索引库中
(2)1000万1天内修改过的数据在天库中
(3)50万1小时内修改过的数据在小时库中
当有修改请求发生时,只会操作最低级别的索引,例如小时库。
当有查询请求发生时,会同时查询各个级别的索引,将结果合并,得到最新的数据:
(1)全量库是紧密存储的索引,无碎片,速度快
(2)天库是紧密存储,速度快
(3)小时库数据量小,速度也快
数据的写入和读取都是实时的,所以58同城能够检索到1秒钟之前发布的帖子,即使全量库有300亿的数据。
新的问题来了:小时库数据何时反映到天库中,天库中的数据何时反映到全量库中呢?
dump&merge
这是由两个异步的工具完成的:
dumper:将在线的数据导出
merger:将离线的数据合并到高一级别的索引中去
小时库,一小时一次,合并到天库中去;
天库,一天一次,合并到全量库中去;
这样就保证了小时库和天库的数据量都不会特别大;
如果数据量和并发量更大,还能增加星期库,月库来缓冲。