6.6 ElasticSearch分布式特性之分片详解

1.倒排索引的不可变更性
倒排索引一旦生产,便不能更改,其中的利弊如下。

  • 不用考虑并发性问题,杜绝锁机制带来的性能问题
  • 由于文件不再更改,可以充分利用文件系统缓存,只需要载入一次,只要内存足够,对文件的读取都会从内存读取,性能高
  • 利于对文件进行压缩存储,节省磁盘和内存存储空间
  • 坏处为需要写入新文档时,必须重新构建倒排索引文件,然后替换老文件后,新文档才能被检索,导致文档开销大和实时性差

2.文档搜索实时性
lucene便是采用了下图所示的这种方案,它构建的单个倒排索引称为segment,合在一起称为index,与elasticsearch中的index概念不同。elasticsearch中的一个分片shard对应一个lucene index。lucene会有一个专门的文件来记录所有的segment信息,称为commit point。
在这里插入图片描述

3.文档搜索实时性之refresh
(1).简介
segment写入磁盘的时候依然很耗时,可以借助文件系统的缓存特性,先将segment在缓存中创建并开放查询来进一步提升实时性(先内存后磁盘),该过程在elasticsearch中被称为refresh。
在refresh之前,文档会先存储在一个buffer中,refresh时将buffer中的所有文档清空并生成segment。
elasticsearch默认每1秒执行一次refresh,因此文档的实时性被提高到1秒,这也是elasticsearch被称为近乎实时的原因。

(2).refresh发生的时机

  • 间隔时间到达,通过index.settings.refresh_interval来设定,默认是1秒
  • index.buffer占满时,其大小是通过indices.memory.index_buffer_size设置,默认为jvm堆的10%,所有分片共享
  • flush发生时也会发生refresh

4.文档搜索实时性之translog
(1).问题
如果在内存中的segment还没有写入磁盘前发生宕机,其中的文档就无法恢复了,那么elasticsearch是如何解决这个问题的呢?

(2).解决方案
elasticsearch引入translog机制来解决上面问题的。写入文档到buffer时,同时将该操作写入translog。
translog文件即时写入磁盘,6.x以后版本默认每个请求都会写入磁盘,可以修改为每5秒写一次,这样的风险便是丢失5秒内的数据,相关配置为index.translog.*。elasticsearch启动时会检查translog文件,并从中恢复数据。
在这里插入图片描述

5.文档搜索实时性之flush
(1).简介
flush负责将内存中的segment写入磁盘,主要工作流程如下。

  • 将translog写入磁盘
  • 将index buffer清空,其中的文档生成一个新的segment,相当于refresh操作
  • 更新commit point并写入磁盘
  • 执行写操作,将内存汇总的segment写入磁盘
  • 删除旧的translog文件
    在这里插入图片描述

(2).flush发生的时机

  • 间隔时间到达时,默认是30分钟,5.x以后版本无法修改
  • translog占满时,其大小可以通过index.translog.flush_threshold_size控制,默认是512m,每个index有自己的translog

6.删除与更新文档
(1).问题
segment一旦生成就不能更改,那么如果要删除文档该如何操作?

(2).解决方案
lucene专门维护一个.del的文件,记录所有已经删除的文档,注意.del上记录的是文档在lucene内部的id,在查询结果返回前会过滤掉.del中的所有文档。更新文档首先先删除文档,然后再创建新文档。
在这里插入图片描述

7.Segment Merging
随着segment的增多,由于一次查询的segment数增多,查询速度会变慢,elasticsearch会定时在后台进行segment merge的操作来减少segment数量,通过force_merge这个API可以手动强制elasticsearch做segment merge操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值