ElasticSearch实战-Skip List 跳表算法(文档定位跳跃算法)
Posted 张志翔ۤ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch实战-Skip List 跳表算法(文档定位跳跃算法)相关的知识,希望对你有一定的参考价值。
ElasticSearch在对索引内存块地址进行分割,通过Skip List来快速定位内存块地址,这里形象的举个例子。
打个比方这里有一个很长的posting list,比如:
[1,3,13,101,105,108,255,256,257]
我们可以把这个list分成三个block:
[1,3,13] [101,105,108] [255,256,257]
然后可以构建出skip list的第二层:
[1,101,255]
1,101,255分别指向自己对应的block。这样就可以很快地跨block的移动指向位置了。
Lucene自然会对这个block再次进行压缩。其压缩方式叫做Frame Of Reference编码。
考虑到频繁出现的term(所谓low cardinality的值),比如gender里的男或者女。如果有1百万个文档,那么性别为男的posting list里就会有50万个int值。用Frame of Reference编码进行压缩可以极大减少磁盘占用。这个优化对于减少索引尺寸有非常重要的意义。当然mysql b-tree里也有一个类似的posting list的东西,是未经过这样压缩的。
因为这个Frame of Reference的编码是有解压缩成本的。利用skip list,除了跳过了遍历的成本,也跳过了解压缩这些压缩过的block的过程,从而节省了cpu。
到此Skip List 跳表算法(文档定位跳跃算法)介绍完成。
以上是关于ElasticSearch实战-Skip List 跳表算法(文档定位跳跃算法)的主要内容,如果未能解决你的问题,请参考以下文章
Elasticsearch 5.4.3实战--Java API调用:搜索
Keras深度学习实战(25)——使用skip-gram和CBOW模型构建单词向量