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

ES中数据刷新策略refresh

在 Elasticsearch 中,插入数据时的 refresh 参数控制文档在写入后何时对搜索可见,其行为直接影响数据可见性和系统性能。以下是 refresh 参数的三个可选值(truefalsewait_for)的详细说明及适用场景:

1. refresh=true

  • 行为
    立即触发一次 强制刷新(Refresh),将当前写入操作涉及的数据从内存缓冲区(In-memory Buffer)刷新到新的 Lucene Segment,使文档立即可被搜索 。
     
  • 特点
    • 实时可见性:写入后数据即刻对搜索可见,适用于需要实时反馈的场景(如测试环境或低频写入)。
    • 性能开销:频繁强制刷新会导致生成大量小 Segment,增加后续合并(Merge)和搜索的开销 。
    • 并发影响:可能干扰其他正在进行的刷新操作,增加系统负载。
  • 适用场景
    • 单条写入后需立即搜索的调试或测试场景。
    • 低频写入但高实时性要求的业务(如关键配置更新)。
  • 示例
    POST /index/_doc/1?refresh=true
    { "field": "value" }


2. refresh=false(默认值)

  • 行为
    不主动触发刷新,依赖 Elasticsearch 的 自动刷新机制(默认每秒一次)将数据刷入 Segment。
  • 特点
    • 延迟可见:写入后需等待下一次自动刷新(通常 1 秒)后文档才可搜索。
    • 高效性:减少 I/O 操作,适合批量写入或高吞吐场景。
  • 适用场景
    • 批量数据导入(如日志采集、ETL 流程)。
    • 对搜索可见性延迟不敏感的高频写入业务。
  • 优化建议
    批量写入时可临时关闭自动刷新以提升性能:
    PUT /index/_settings
    { "index.refresh_interval": "-1" }


3. refresh=wait_for

  • 行为
    当前写入请求 阻塞等待,直到下一次自动刷新完成后再返回响应,确保写入操作完成后文档对搜索可见,但 不主动触发刷新。
  • 特点
    • 平衡性能与可见性:避免因强制刷新产生过多小 Segment,同时保证写入后数据在下次自动刷新时可见。
    • 请求延迟:写入操作的响应时间取决于自动刷新间隔(默认最多等待 1 秒)。
  • 适用场景
    • 需要确保数据变更后搜索可见,但允许短暂延迟的业务(如订单状态更新)。
    • 避免高频强制刷新导致性能波动的场景。
  • 示例
    POST /index/_doc/1?refresh=wait_for
    { "field": "value" }


参数对比与选型建议

参数数据可见性性能影响适用场景
true立即可见高(频繁 I/O)测试、低频关键写入
false延迟约 1 秒批量导入、高频写入
wait_for下次自动刷新后可见中等(请求阻塞)需保证可见性但避免主动刷新的业务

注意事项

  1. 自动刷新间隔调整
    通过 index.refresh_interval 可修改自动刷新频率,但过短的间隔会增加系统负载。
  2. Segment 合并优化
    频繁使用 refresh=true 会导致小 Segment 过多,需定期执行 _forcemerge 合并分段。
  3. 事务日志(Translog)
    即使未刷新,数据仍通过 Translog 保证持久性,故障恢复时可通过重放 Translog 恢复数据。

通过合理选择 refresh 参数,可以在数据可见性、写入性能和系统稳定性之间取得最佳平衡。


http://www.kler.cn/a/572957.html

相关文章:

  • 【Flask与Echarts结合的Web开发与数据可视化项目】
  • PHP之Cookie和Session
  • 【C语言】数组篇
  • AI提示语-前端开发
  • deepseek在pycharm 中的配置和简单应用
  • 基于遗传算法的无人机三维路径规划仿真步骤详解
  • 代码随想录算法训练营第五十七天| 图论03
  • 《基于 LIME 的低照度图像处理》开题报告
  • 备份docker下的mysql的表结构,视图,函数 以及 指定表的数据
  • 【代码分享】基于IRM和RRT*的无人机路径规划方法详解与Matlab实现
  • 阿里云 linux centos7安装nacos
  • GitLab Pages 托管静态网站
  • 试过了,多模态大模型Qwen/Qwen2.5-VL-3B-Instruct需要21G显存,我还是太天真啊!
  • 【Azure 架构师学习笔记】- Azure Databricks (15) --Delta Lake 和Data Lake
  • Java8-Stream流介绍和使用案例
  • 腾讯云账号获取SecretId和SecretKey及混元模型调用
  • Dify 开源大语言模型应用开发平台使用(一)
  • 快速开始React开发(一)
  • 【练习】【二叉树】力扣热题100 543. 二叉树的直径
  • Sourcetrail 代码分析工具