[Google Search] 的 post list 存储

老师说这个用big table存储比较好。我有个问题,如果posting list非常的大,假设有几个GB,key 就是word,value就是posting list。那这么大的posting list作为value是怎么存储下来的?

对于一般的数据库,肯定不能支持那么大的entry。对于big tale这种结构,如果posting list的size比的SSTable要大,这个怎么处理? 存在多个SSTable里面吗?如果是这样,那么posting list再大也没关系了?

但是文中之前又提到了放在内存里,这里有一些搞不明白了。那放在内存里是怎么放的呢?

这个问题问得很好,从概念上来说,BigTable 用 SSTable 可以如你所说,把数据分到多个 SSTable 里面,这样可以支持每个entry 很大的数据量,是可以没有上限的。从实践来说,Cassandra 和 Cloud BigTable 都不支持这么大的,所以在应用层可以分到多个 key。

内存里是按照 document partition 的,所以可以控制 posting list 的大小。这个视频里有 cover.

谢谢老师的回答,我一点我还是不太明白,老师可以解释一下应用层分到多个key具体是什么意思吗?这里还是不太理解。

我又看了一遍,我觉得我之前说的不太对,我觉得我觉得一个词的posting list可能是存在GFS里面的,我们一般是使用term-based partition,BigTable的key就是word,value可能就是GFS中posting list的address,我觉得这个解释更make sense。这么看来BitTable可能只是存了索引的meta data?

本来是 key->posting list,分成 key_part1 → post list_part1, key_part2 → posting list_part_2

不用那么麻烦,bigtable underlying 的 sstable 就是存在 GFS 里面的,从 Bigtable 这个抽象来看,这个 value 就是数据本身。这个数据存在 SStable, SSTable 存在 GFS。