再次优化的写入流程
    image

    1. 数据写入buffer缓冲和translog日志文件
    1. 每隔一秒钟,buffer中的数据被写入新的segment file,并进入os cache,此时segment被打开并供search使用
    1. buffer被清空
    1. 重复1~3,新的segment不断添加,buffer不断被清空,而translog中的数据不断累加
    1. translog长度达到一定程度的时候,commit操作发生
      5.1. buffer中的所有数据写入一个新的segment,并写入os cache,打开供使用
      5.2. buffer被清空
      5.3. 一个commit ponit被写入磁盘,标明了所有的index segment
      5.4. filesystem cache中的所有index segment file缓存数据,被fsync强行刷到磁盘上
      5.5. 现有的translog被清空,创建一个新的translog

    基于translogcommit point,如何进行数据恢复
    fsync+清空translog,就是flush,默认每隔30分钟flush一次(时间间隔可以设置),或者当translog过大的时候(文件大小可设置),也会flush
    POST /my_index/_flush,一般来说别手动flush,让它自动执行就可以了
    translog,每隔5秒被fsync一次到磁盘上。在一次增删改操作之后,当fsync在primary shardreplica shard都成功之后,那次增删改操作才会成功
    但是这种在一次增删改时强行fsync translog可能会导致部分操作比较耗时,也可以允许部分数据丢失,设置异步fsync translog
    image

    1. PUT /my_index/_settings
    2. {
    3. "index.translog.durability": "async",
    4. "index.translog.sync_interval": "5s"
    5. }