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