MST
星途 面试题库

面试题:ElasticSearch中refresh值对数据可见性和性能的影响

在ElasticSearch中,refresh值有哪些常见设置,这些设置如何影响数据的可见性以及系统性能?请举例说明不同设置场景下的情况。
35.5万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

常见设置及影响

  1. refresh = true
    • 数据可见性:文档一旦索引(index)操作完成,立即对搜索可见。这意味着新写入的数据可以马上被查询到,数据可见性几乎是实时的。
    • 系统性能:频繁的刷新操作会带来较大的性能开销。因为每次刷新都会创建新的段(segment)并将其合并到现有的索引结构中,涉及磁盘I/O和内存操作,会降低索引写入速度。
    • 举例:在实时监控系统中,如网络流量监控,需要立即看到新产生的流量数据,就可以设置refresh = true,以便及时发现异常流量。但由于性能开销大,不适用于大量数据写入场景。
  2. refresh = false
    • 数据可见性:文档索引操作完成后,不会立即刷新到索引,数据对搜索不可见。直到手动执行刷新操作或满足默认的刷新周期,数据才会可见。这导致数据有一定的延迟才会在搜索结果中出现。
    • 系统性能:由于减少了自动刷新的次数,写入性能会得到显著提升。因为避免了频繁的段创建和合并操作,降低了磁盘I/O和内存压力。
    • 举例:在日志收集系统中,对于历史日志的批量导入,对数据实时可见性要求不高,此时可以设置refresh = false,提高导入效率。后续可以通过手动执行刷新操作,使数据可见。
  3. 设置具体时间,如refresh = 5s
    • 数据可见性:文档索引操作完成后,会在设置的时间间隔(这里是5秒)后刷新到索引,使数据对搜索可见。这在实时性和性能之间做了一定的平衡,数据可见延迟为设置的时间。
    • 系统性能:相比refresh = true,性能有所提升,因为刷新频率降低;但相比refresh = false,性能会略有下降,因为仍有定期的刷新操作。
    • 举例:在电商系统的商品库存更新场景中,如果不需要实时看到库存更新,但希望5秒内更新的数据能在搜索中体现,就可以设置refresh = 5s。既保证了一定的实时性,又不至于因频繁刷新影响系统性能。

Elasticsearch默认设置

Elasticsearch默认refresh_interval为1秒,即文档索引后大约1秒会对搜索可见。这个默认设置在大多数情况下能兼顾数据可见性和系统性能,但在不同应用场景下,可能需要根据实际需求调整refresh相关设置。