ElasticSearch-分片及其生命周期

什么是ES的分片?

  • ES中最小的工作单元,是一个Lucene的index

 

一些问题:

  • 为什么ES的搜索是近实时的(1秒后被搜到)
  • ES如何保证在断电时数据也不会丢失
  • 为什么删除文档,并不会立刻释放空间

 

Lucene Index

 

 

  • 在Lucene中,单个倒排索引文件被称为Segment。Segment是自包含的,不可变更的。多个Segment汇总在一起,称为Lucene的Index,对应ES中的Shard
  • 当有新文档写入时,会生成新的Segment,查询时会同时查询所有的Segments, 并且对结果汇总,Lucene中有一个文件,用来记录所有Segments信息,叫做Commit Point
  • 删除的文档信息,保存在“.del”文件中

 

什么是Refresh

 

 

 

  • 将Index buffer写入segment的过程叫Refresh
  • Refresh频率,默认1秒发生一次,可通过index.refresh_interval配置。Refresh后,数据就可以被搜索到了。这也是为什么ES被称为近实时搜索
  • 如果系统由大量的数据写入,那就回产生很多的Segment
  • index buffer被占满时,会触发Refresh,默认值是JVM的10%

 

什么是Transaction Log

 

 

 

  • Segment写入磁盘的过程相对耗时,Refresh时,先将Segment写入缓存以开放查询
  • 为了保证数据不丢失,所以在index文档时,同时写transaction log,高版本开始,transaction log默认落盘。每个分片都有一个transaction log
  • 在ES Refresh时,Index Buffer被清空,Transaction log不会清空

 

什么是FLUSH

 

 

 

ES Flush & Lucene Commit

  • 调用Refresh, index buffer清空并且Refresh
  • 调用fync,将缓存中的Segments写入磁盘
  • 清空Transaction Log
  • 默认30分钟调一次

 

Merge

  • Segment很多,需要定期被合并
    • 减少Segments / 删除已经删除的文档
  • ES和Lucene会自动进行Merge操作

 

posted @ 2020-11-19 18:09  下山打老虎i  阅读(228)  评论(0)    收藏  举报