elasticsearch(10) es内核:写入原理

本文详细解析了Elasticsearch的数据写入流程,包括文档如何从内存缓冲区写入到磁盘,以及刷新和同步机制。同时,探讨了基于translog和commitpoint的数据恢复过程,解释了删除原理和merge操作,为理解Elasticsearch内部工作提供深入视角。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.document先写入导内存buffer中,同时写translog日志,每隔一秒钟把buffer中的数据刷入index segment file中,index segment file中的数据会立马进入os cache中,内存buffer被清空,此时,segment 中的文件就可以呗搜索了,这就意味着document从被写入到可以被搜索需要一秒种,如果要更改这个属性,可以执行以下操作

PUT /my_index
{
  "settings": {
    "refresh_interval": "30s" 
  }
}
segment file会越来越多,os cache中积累了很多segment file,translog日志也会越来越多,当translog日志大小大于一个阀值时候,会出发flush操作。flush操作先会执行commit操作,commit操作先会把buffer中现有的文件全部写入到segment中,然后会有一个叫commit point被写入到磁盘上,这个表明有哪些segment。然后就把os cache中的数据强行刷到磁盘上(fsync),现有translog日志文件清空。此时数据已经被持久化

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

我们也可以用_flush命令手动执行

translog每隔5秒回被写入磁盘。在一次增删改操作之后只有在replica和primary shard都成功才会成功,如果要提高操作速度,可以设置成异步的

PUT /my_index
{
  "settings": {
    "index.translog.durability": "async" ,

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

2.基于translog和commit point的数据恢复

在磁盘上会有一个上次持久化的commit point,translog上有一个commit point,根据这两个commit point,会把translog中的变更记录进行回放,重新执行之前的操作

3.删除原理,

删除的数据会被标记为del,放倒一个专门的segment中

4.merge操作

由于没秒会把buffer刷到segment中,所以segment会很多,为了防止这种情况出现,es内部会不断把一些相似大小的segment合并,并且物理删除del的segment,

当然也可以手动执行

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值