MST
星途 面试题库

面试题:ElasticSearch中refresh参数在常见写入场景下的作用

在ElasticSearch中,当我们向索引写入数据时,refresh参数有不同的取值方式。请描述refresh = true、refresh = false以及默认情况下,对数据写入和搜索可见性的影响,并举例说明在哪些常见的业务写入场景下,会选择不同的refresh取值。
18.0万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

refresh = true

  • 对数据写入影响:写入操作完成后,立即执行刷新(refresh)操作,这会将内存中的数据段(segment)刷新到磁盘上,使得新写入的数据可以被搜索到。但这会增加写入操作的开销,因为刷新操作涉及I/O操作,可能会影响写入性能。
  • 对搜索可见性影响:新写入的数据在写入操作完成后,马上就可以被搜索到,保证了数据的实时可见性。
  • 常见业务场景举例:实时日志监控场景,例如在监控系统中,需要立即看到新产生的日志记录,以便及时发现和处理问题,此时就可以使用refresh = true

refresh = false

  • 对数据写入影响:写入操作完成后,不会执行刷新操作,数据会先保存在内存缓冲区中。这样可以提高写入性能,因为减少了I/O操作。
  • 对搜索可见性影响:新写入的数据在写入操作完成后,不会马上被搜索到。需要等待Elasticsearch内部的刷新机制(默认每隔1秒自动执行一次刷新),数据才会被搜索到。
  • 常见业务场景举例:批量数据导入场景,比如导入大量历史订单数据,对数据实时可见性要求不高,更注重导入效率,此时可以设置refresh = false

默认情况(refresh = wait_for)

  • 对数据写入影响:写入操作会等待,直到相关的分片被刷新,确保数据可以被搜索到才返回。这种方式在性能和数据可见性之间取得了平衡。
  • 对搜索可见性影响:写入操作完成后,数据就可以被搜索到,保证了数据在写入完成时的可见性。
  • 常见业务场景举例:金融交易记录场景,每一笔交易记录写入后,需要确保后续的查询操作能够立即获取到该记录,同时也希望有较好的性能,这种场景下默认的refresh = wait_for比较合适。