暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ES-写数据原理

董源龙 2021-10-02
503





流程-NTR

refresh:数据写入os cache并被打开供搜索的过程,默认是1秒/次。每隔一秒就会将buffer中的数据写入一个新的index segment file,先写入os cache中。所以,es是近实时的,数据写入到可以被搜索,默认是1秒。

POST my_index/_refresh,可以手动refresh,一般不需要手动执行,没必要,让es自己搞就可以了

比如说,我们现在的时效性要求,比较低,只要求一条数据写入es,一分钟以后才让我们搜索到就可以了,那么就可以调整refresh interval

PUT my_index

{

  "settings": {

    "refresh_interval": "30s" 

  }

}

数据写入buffer

写入os cache

只要segment写入os cache,那就直接打开供search使用,不立即执行commit

每隔一定时间,buffer中的数据被写入segment文件

2 流程

基于translog和commit point,如何进行数据恢复

fsync+清空translog,就是flush,默认每隔30分钟flush一次,或者当translog过大的时候,也会flush

POST my_index/_flush,一般来说别手动flush,让它自动执行就可以了

translog,每隔5秒被fsync一次到磁盘上。在一次增删改操作之后,当fsync在primary shard和replica shard都成功之后,那次增删改操作才会成功

但是这种在一次增删改时强行fsync translog可能会导致部分操作比较耗时,也可以允许部分数据丢失,设置异步fsync translog

PUT my_index/_settings

{

    "index.translog.durability": "async",

    "index.translog.sync_interval": "5s"

}


数据写入buffer缓冲+translog日志文件

buffer中的数据被写入新的segment file,并进入os cache

    间隔一秒

    此时segment被打开并供search使用

buffer被清空

重复1~3,新的segment不断添加,buffer不断被清空,而translog中的数据不断累加

当translog长度达到一定程度的时候,commit操作发生

-触发flush操作

    buffer中的所有数据写入一个新的segment,并写入os cache,打开供使用

    buffer被清空

    一个commit ponit被写入磁盘,标明了所有的index segment

    filesystem cache中的所有index segment file缓存数据,被fsync强行刷到磁盘上

    现有的translog被清空,创建一个新的translog



文件合并

    segment merge

        why

            每秒一个segment file,文件过多,而且每次search都要搜索所有的segment,很耗时

            默认会在后台执行segment merge操作,在merge的时候,被标记为deleted的document也会被彻底物理删除

        流程

            选择一些有相似大小的segment,merge成一个大的segment

            将新的segment flush到磁盘上去

            写一个新的commit point,包括了新的segment,并且排除旧的那些segment

            将新的segment打开供搜索

            将旧的segment删除

        手动执行

POST /my_index/_optimize?max_num_segments=1,尽量不要手动执行,让它自动默认执行就可以了

数据恢复

    查询disk数据

    查询translog

        只存储上一次flush(commit point)到现在的数据变更

    重新执行各种操作

        buffer中执行

        重新刷新每个segment到os cache

        等待下一次commit

更新

    删除旧doc

删除



文章转载自董源龙,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论