当前位置: 首页 > news >正文

【Elasticsearch】`_refresh`和`_flush`的区别

在Elasticsearch中,`_refresh`和`_flush`操作虽然看似都与“刷新”有关,但它们的功能和作用范围有显著区别:

 

`_refresh`操作

- 目的:使索引操作(如新增、更新、删除文档)后的更改能够立即被搜索到。

- 工作原理:将内存缓冲区(in-memory buffer)中的数据写入到一个新的Lucene segment中,并将其加载到文件系统缓存(OS cache)中,此时文档可以被搜索到,但数据尚未写入磁盘。

- 触发方式:

  - 默认情况下,Elasticsearch每秒自动执行一次`_refresh`操作,但仅在最近30秒内有搜索请求的索引上执行。

  - 可以通过设置`index.refresh_interval`来调整刷新间隔,或者在索引操作时通过`?refresh=true`参数强制触发。

  - 当内存缓冲区达到一定大小(默认为节点堆内存的10%)时,也会触发`_refresh`。

- 特点:`_refresh`操作是同步的,会在操作完成前阻塞请求。

 

`_flush`操作

- 目的:将内存中的数据和事务日志(translog)中的操作永久写入磁盘,确保数据的持久性。

- 工作原理:

  - `_flush`操作会先执行`_refresh`,将内存缓冲区中的数据写入新的Lucene segment并加载到文件系统缓存中。

  - 然后,将这些segment从文件系统缓存强制刷入磁盘(通过`fsync`操作),并清空事务日志。

- 触发方式:

  - 默认情况下,Elasticsearch会在以下情况下自动触发`_flush`操作:

    - 每30分钟定时触发。

    - 当事务日志大小超过512MB时。

    - 在每次索引、批量、删除或更新操作完成后。

  - 也可以通过API手动触发`_flush`操作。

- 特点:`_flush`操作是异步的,不会阻塞请求。

 

主要区别

- 数据可见性:`_refresh`使数据在搜索中可见,而`_flush`主要用于数据的持久化,不影响数据的搜索可见性。

- 操作范围:`_refresh`操作主要涉及内存缓冲区和文件系统缓存,而`_flush`操作会将数据写入磁盘并清空事务日志。

- 性能影响:`_refresh`操作的开销相对较小,但频繁的`_refresh`可能会影响写入性能;`_flush`操作的开销较大,但可以通过调整参数优化性能。

 

总结来说,`_refresh`用于使新文档能够被搜索到,而`_flush`用于确保数据持久化到磁盘,两者在Elasticsearch的索引管理中各自扮演着重要的角色。

http://www.xdnf.cn/news/675775.html

相关文章:

  • vue3+vite+amfe-flexible+postcss-pxtorem 实现全分辨率自适应
  • AI工具的选择:Dify还是传统工具?
  • 【C++】封装哈希表实现 unordered_map、unordered_set
  • 【Harmony OS】组件自定义属性、事件和状态管理
  • 【Webtrees 手册】第 9 章 - 开发指南
  • Mobaxterm 连接到 Docker 容器
  • 查询端口占用情况的命令(windows、linux)
  • Flink Table API 编程实战详解
  • IoT/HCIP实验-1/物联网开发平台实验Part2(HCIP-IoT实验手册版)
  • 数字人教师:开启教育智慧革新之旅
  • Unity数字人开发笔记
  • YOLOv4:目标检测的新标杆
  • 流量红利的破局之道—深度解析OPPO应用商店 CPD广告运营
  • 自动驾驶规划控制算法教程:从理论到实践
  • 《计算机组成原理》第 10 章 - 控制单元的设计
  • CST基础八-TOOLS工具栏(一)
  • 如何将 PDF 文件中的文本提取为 YAML(教程)
  • 自动化测试入门:解锁高效软件测试的密码
  • 59、【OS】【Nuttx】编码规范解读(七)
  • 【Python中的self】Python中的`self`:从基础到进阶的实战指南
  • roo code调用手搓mcp server
  • Python filter()函数详解:数据筛选的精密过滤器
  • 在promise中,多个then如何传值
  • sqli_labs第二十九/三十/三十一关——hpp注入
  • 《计算机组成原理》第 6 章 - 计算机的运算方法
  • 大模型的参数高效微调;大模型的对齐
  • Linux显示进程状态——ps命令详解与实战
  • 用C#最小二乘法拟合圆形,计算圆心和半径
  • chrome打不开axure设计的软件产品原型问题解决办法
  • 尚硅谷redis7 41-46 redis持久化之AOF异常恢复演示