2.2 倒排序索引概要
2.2.1 模式描述
倒排序索引模式经常被用作MapReduce分析的示例。
目的
产生一个数据集的索引以提供更快的搜索或数据丰富能力。
动机
对大的数据集建立一个关键字的索引通常可以方便通过指定关键字搜索到其包含特定值的对应记录。尽管创建倒排索引的过程需要预先进行额外的处理,但花费时间做预处理可以极大地缩减查询时所需要的时间。
搜索引擎通过创建索引来提高搜索性能。
适用场景
倒排索引通常用在需要快速搜索查询响应的场景。可以对一个查询的结果进行预处理并存储在一个数据库中。
结构
如何使用MapReduce框架建立倒排序索引的基本结构。MapReduce各个流程的详细解释如下:
- mapper输出索引所需要的字段作为键,全局唯一的标识符作为值。
- 如果仅使用identity reducer,则可省略combiner,因为在这样的场景下,combiner起不到任何作用。某些实现会将一个分组对应的值连接起来,然后输出到文件系统上。在这样的场景下,可以使用combiner。它不会像其他莫斯那样对字节计数的输出有明显的影响,但也算是一种优化。
- partitoner的职责是确定同一个键的值会被reducer复制到哪里从而最终输出。如果中间键不是非常分散的话,可以通过定制partitioner来得到更有效的负载均衡。
- reducer将收到由输入键映射到的一组唯一的记录标识符的集合。标识符可以通过使用统一的分隔符连接起来对每一个分组产生一个输出键/值对,也可以像identity reducer中实现的那样将每一个输入值和对应的输入键一起输出。
结果
最终的输出结果是一系列的文件,每个文件包含的是字段值到一系列包含这些字段值的记录的唯一ID映射。
性能分析
建立一个倒排序索引的新年歌主要由以下几个指标决定:mapper端内容解析的计算成本;需要索引的键的基数;每一个键对应的内容标识符的数目。