【Elasticsearch】调用_flush api会调用_refresh 吗?

调用 `_flush` API 时会隐式地执行 `_refresh` 操作。

 

为什么 `_flush` 会执行 `_refresh`?

在 Elasticsearch 中,`_flush` 操作的目的是将内存中的数据和事务日志(translog)中的操作持久化到磁盘。为了确保数据的一致性和完整性,在 `_flush` 操作开始之前,Elasticsearch 会先执行 `_refresh` 操作,将内存缓冲区中的数据写入到新的 Lucene segment 中并加载到文件系统缓存中。这样可以确保在将数据持久化到磁盘之前,所有的数据都已经处于可搜索的状态。

 

`_flush` 的具体流程

1. 执行 `_refresh`:

   - 将内存缓冲区中的数据写入到新的 Lucene segment 中。

   - 将新的 segment 加载到文件系统缓存中。

   - 此时,数据已经可以被搜索到。

2. 持久化到磁盘:

   - 将文件系统缓存中的 segment 强制写入磁盘(通过 `fsync` 操作)。

   - 清空事务日志(translog),释放内存和存储空间。

 

总结

调用 `_flush` API 时,Elasticsearch 会先执行 `_refresh` 操作,以确保数据在持久化到磁盘之前已经处于可搜索的状态。因此,`_flush` 操作不仅确保了数据的持久性,还间接保证了数据的搜索可见性。

 

如果你只需要确保数据的搜索可见性,而不需要立即持久化数据,可以单独调用 `_refresh` API。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值