elasticsearch 基础之分布式存储(elasticsearch数据的存储结构)

对于任何数据存储工具,都应该清楚明了的知道其数据存储结构。下面说说ElasticSearch中数据存储的一些关键点

倒排索引

倒排索引本质是哈希表,完成由搜索词到文档id的映射,这也是elasticsearch搜索比较快速高效的一个重要原因。

elasticsearch 基础之分布式存储(elasticsearch数据的存储结构)(1)

倒排索引

也就是说在存储数据的时候,先进行数据分析,完成可搜索的词条到文档的映射。

Doc Value

完成文档到词项的映射,在索引数据与建立倒排索引时同时建立doc values。主要用于排序,聚合。

除了analyzed string字段之外,其他字段默认都会记录doc value。doc values的存储使用了一些压缩机制。对于数字类型字段,一般取最大公约数,然后只记录其倍数。如果没有合适的最大公约数,取最小的数值,然后记录其差值。

如果某个字段不需要这个功能呢,可以通过配置字段的属性:"doc_values": false 来禁用。

elasticsearch 基础之分布式存储(elasticsearch数据的存储结构)(2)

基于lucene的存储结构

Lucene是一个功能强大的搜索库,但是基于Lucene进行开发比较复杂。ElasticSearch是基于lucene开发的搜索引擎,提供了更简单易用的API。

索引实际上是lucene中的概念,一个索引由多个索引段构成,大部分的场景是写一次,读多次。当满足某些条件时,多个索引段会合并成一个更大的索引段。索引段的减少有助于搜索效率的提高(可能是lucene内部原理决定的),但是频繁的段合并会影响性能。

Elasticsearch中的每次刷新都会新创建一个段,新创建的段里面的数据在下一次刷新之前是不会被搜索到的。ES的段合并是在后台进行的。

elasticsearch 基础之分布式存储(elasticsearch数据的存储结构)(3)

存储数据时的数据流向

index buffer -> filesystem cache -> 磁盘

第一个过程是refresh操作,第二个过程称为flush操作。

如果读完这篇文章有很多疑惑之处,请阅读es系列之前的文章:

es系列:集群分布式架构及原理

ES系列:集群、索引、搜索配置优化方案

ES系列:elasticsearch的功能及Top 5大应用场景

ES系列:elasticsearch基础知识汇总及常见面试题(一)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。