elasticsearch 基础之分布式存储(elasticsearch数据的存储结构)
对于任何数据存储工具,都应该清楚明了的知道其数据存储结构。下面说说ElasticSearch中数据存储的一些关键点
倒排索引倒排索引本质是哈希表,完成由搜索词到文档id的映射,这也是elasticsearch搜索比较快速高效的一个重要原因。
倒排索引
也就是说在存储数据的时候,先进行数据分析,完成可搜索的词条到文档的映射。
Doc Value完成文档到词项的映射,在索引数据与建立倒排索引时同时建立doc values。主要用于排序,聚合。
除了analyzed string字段之外,其他字段默认都会记录doc value。doc values的存储使用了一些压缩机制。对于数字类型字段,一般取最大公约数,然后只记录其倍数。如果没有合适的最大公约数,取最小的数值,然后记录其差值。
如果某个字段不需要这个功能呢,可以通过配置字段的属性:"doc_values": false 来禁用。
基于lucene的存储结构
Lucene是一个功能强大的搜索库,但是基于Lucene进行开发比较复杂。ElasticSearch是基于lucene开发的搜索引擎,提供了更简单易用的API。
索引实际上是lucene中的概念,一个索引由多个索引段构成,大部分的场景是写一次,读多次。当满足某些条件时,多个索引段会合并成一个更大的索引段。索引段的减少有助于搜索效率的提高(可能是lucene内部原理决定的),但是频繁的段合并会影响性能。
Elasticsearch中的每次刷新都会新创建一个段,新创建的段里面的数据在下一次刷新之前是不会被搜索到的。ES的段合并是在后台进行的。
存储数据时的数据流向
index buffer -> filesystem cache -> 磁盘
第一个过程是refresh操作,第二个过程称为flush操作。
如果读完这篇文章有很多疑惑之处,请阅读es系列之前的文章:
es系列:集群分布式架构及原理
ES系列:集群、索引、搜索配置优化方案
ES系列:elasticsearch的功能及Top 5大应用场景
ES系列:elasticsearch基础知识汇总及常见面试题(一)
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。