ElasticSearch - 底层原理

本文探讨了Elasticsearch的正排索引与倒排索引的区别,强调doc_values作为正排索引的优势,指出其不会导致内存问题,且性能随着硬件提升而提升。文章还介绍了基于mget的批量查询和bulk的批量操作,并讨论了ES并发冲突的解决方案和写入原理,包括内存Buffer、Refresh和Flush操作,以及如何处理OS Cache数据丢失的问题。
摘要由CSDN通过智能技术生成

 

 

测试数据

"index": false 不生成倒排索引

"doc_values": false 不生成正排索引


正排索引(doc values )VS 倒排索引:

  1. 概念:从广义来说,doc values 本质上是一个序列化的 列式存储 。列式存储 适用于聚合、排序、脚本等操作,所有的数字、地理坐标、日期、IP 和不分析( not_analyzed )字符类型都会默认开启。
  2. 特点:倒排索引的优势 在于查找包含某个项的文档,相反,如果用它确定哪些项是否存在单个文档里。
  3. 优化es官方是建议,es大量是基于os cache来进行缓存和提升性能的,不建议用jvm内存来进行缓存,那样会导致一定的gc开销和oom问题,给jvm更少的内存,给os cache更大的内存。比如64g服务器,给jvm最多4~16g(1/16~1/4),os cache可以提升doc value和倒排索引的缓存和查询效率。

 


正排索引: doc_values VS fielddata

这两个概念源于ES , 除了强大的搜索功能外 , 还可以支持排序,聚合之类的操作

搜索需要用到倒排索引,而排序和聚合则需要使用 “正排索引”。说白了就是一句话,倒排索引的优势在于查找包含某个项的文档,而反过来确定哪些项在单个文档里并不高效。

doc_values和fielddata就是用来给文档建立正排索引的。他俩一个很显著的区别是,前者的工作地盘主要在磁盘,而后者的工作地盘在内存。

我整理了一个表格,从不同维度比较这哥俩。

维度 doc_values fielddata
创建时间 index时创建 使用时动态创建
创建位置 磁盘 内存(jvm heap)
优点 不占用内存空间 不占用磁盘空间
缺点 索引速度稍低</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值