倒排表在磁盘上的布局

来源:互联网 发布:java mysql 驱动 编辑:程序博客网 时间:2024/04/30 00:37

由于倒排表的大小一般都很大,所以大部分搜索引擎都将倒排表保存在磁盘上。

下图是一个倒排表的总体结构布局:


磁盘是由一个个数据块(block,大小固定,例如64KB)组成的。倒排表中的一个列表(一个单词对应的列表)可能跨越多个block,开始于某个block中的某处,结束于另外一个block的某处。Block是从磁盘存取数据的最小单元,也是在内存中缓存倒排表的单位。

如图可见,每个block中包含很多个来自于一个或多个列表中的posting(posting是一个列表中的元素)。这些postings会继续被分成chunk。例如,我们可能将每个列表分割成chunk,其中每个chunk中有128个元素。每个block的开始包含了一些元数据(metadata),元数据记录了本block包含多少个倒排列表,它们的起始位置。大部分情况下每个chunk中分开保存128个文档ID、128个单词频率和位置信息。Chunk是我们进行压缩和解压缩的单位。(这样的组织,可以让我们首先解码文档ID,进而决定是否需要解压频率和位置信息)

下图是搜索引擎的两层缓存结构


原创粉丝点击