Elasticsearch 写入原理详解|refresh|translog|flush|merge |commit point

1、refresh操作:buffer快满时或到一定的时间,默认一秒钟,会将buffer的数据生成为新的segment文件(os cache之中),
    只要buffer中的数据被refresh到OS cache之中,就代表这个数据可以被搜索到了。当然可以通过restful api 和Java api实现refresh,
    官网提示:尽管刷新是比提交轻量很多的操作,它还是会有性能开销。当写测试的时候, 手动刷新很有用,但是不要在生产环境下每次索引一个文档都去手动刷新。 
              相反,你的应用需要意识到 Elasticsearch 的近实时的性质,并接受它的不足。
    修改buffer的refresh时间。
        官网提示:
        refresh_interval 需要一个 持续时间 值, 例如 1s (1 秒) 或 2m (2 分钟)。 一个绝对值 1 表示的是 1毫秒 --无疑会使你的集群陷入瘫痪。
2、translog日志事物文件的作用:为防止故障时,数据还在内存中的buffer与内存中的segment的数据时丢数据的日志文件,
    2.1、每5秒钟将translog的内存文件入到translog磁盘,也可以直接fsync到磁盘,但是性能会比较差
         因为内存中会存处5秒钟的translog日志文件,所有如果出现故障会丢失5秒钟的数据
3.1、flush(commit)操作:
     触发条件:
        每30分钟或translog文件大到阀值,
     执行过程:
         1、将buffer内存数据生成新的segment文件(OS cache之中)将OS cache中的所有segment 文件merge为一个新segment文件(内存中),将新的segment文件写入到磁盘,并记录commit point文件。
                说明:提交(Commiting)操作会有一个新segment到磁盘需要一个 fsync 来确保段被物理性地写入磁盘,这样在断电的时候就不会丢失数据。 但是 fsync 操作写到磁盘的代价很大;所以segment会在内存中合并并写入磁盘。        
         2、translog进行commit(flush),新启一个translog文件(无数据),清空旧的translog文件,
4、ES删除数据:将一个document标记为delete状态,
5、ES更新数据:就是讲原来的doc标识为delete状态,然后重新写入一条数据。
6、merge 操作:
    说明:merge发生在内存中,buffer每次更新一次,就会产生一个segment file(OS cache之中) 文件,所以在默认情况之下,就会产生很多的segment file 文件。不会中断索引和搜索。
    触发条件:
        会定期执行merge操作,或segment file到一定的数量
    执行过程:
        1、合并的时候会将那些旧的已删除文档清除,被删除的docment不会被拷贝到新的segment中
        2、将内存中的segment file合并后新的segment被刷新(flush)到了磁盘。 
        3、写入新的segment file的commit point,排除了旧的和较小的segment file。
        4、删除旧的segment file.
4、commit point文件,记录了merge时包含哪些segment file文件,
    4.1、记录commit point文件的节点:        
        1、translog文件commit(flush)时,因为发生的merge,记录了包含哪些segment
        2、segment file 文件merge的时候,更新commit point文件,记录了包含哪些segment
5、segment file就是倒排索引的文件,最终的ES文件,会存在于内存、磁盘当中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值