面试题答案
一键面试refresh = true
- 对数据写入影响:写入操作完成后,立即执行刷新(refresh)操作,这会将内存中的数据段(segment)刷新到磁盘上,使得新写入的数据可以被搜索到。但这会增加写入操作的开销,因为刷新操作涉及I/O操作,可能会影响写入性能。
- 对搜索可见性影响:新写入的数据在写入操作完成后,马上就可以被搜索到,保证了数据的实时可见性。
- 常见业务场景举例:实时日志监控场景,例如在监控系统中,需要立即看到新产生的日志记录,以便及时发现和处理问题,此时就可以使用
refresh = true
。
refresh = false
- 对数据写入影响:写入操作完成后,不会执行刷新操作,数据会先保存在内存缓冲区中。这样可以提高写入性能,因为减少了I/O操作。
- 对搜索可见性影响:新写入的数据在写入操作完成后,不会马上被搜索到。需要等待Elasticsearch内部的刷新机制(默认每隔1秒自动执行一次刷新),数据才会被搜索到。
- 常见业务场景举例:批量数据导入场景,比如导入大量历史订单数据,对数据实时可见性要求不高,更注重导入效率,此时可以设置
refresh = false
。
默认情况(refresh = wait_for)
- 对数据写入影响:写入操作会等待,直到相关的分片被刷新,确保数据可以被搜索到才返回。这种方式在性能和数据可见性之间取得了平衡。
- 对搜索可见性影响:写入操作完成后,数据就可以被搜索到,保证了数据在写入完成时的可见性。
- 常见业务场景举例:金融交易记录场景,每一笔交易记录写入后,需要确保后续的查询操作能够立即获取到该记录,同时也希望有较好的性能,这种场景下默认的
refresh = wait_for
比较合适。