MST

星途 面试题库

面试题:ElasticSearch中GET API实时性特性在文档更新场景下的表现

在ElasticSearch中,当使用GET API获取文档时,若刚刚对该文档进行了更新操作,从实时性角度分析,GET API获取到的文档状态可能有哪些情况?请结合ElasticSearch的内部机制进行解释。
49.5万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

可能情况及分析

  1. 获取到更新后的文档
    • Elasticsearch 采用近实时的索引机制。在更新操作完成后,新版本的文档会尽快写入内存中的段(Segment)。如果 GET API 在更新操作后较短时间内执行,并且此时更新已经被刷新到了内存中的段,且搜索时能够命中该段,那么就可以获取到更新后的文档。例如,在默认配置下,索引操作每 1 秒自动执行一次 refresh 操作,将内存中的数据刷新到段中。如果更新操作在 refresh 之后不久执行,且 GET API 在下次 refresh 之前执行,并且更新的数据已经在内存段中,就可以获取到更新后的文档。
  2. 获取到旧版本的文档
    • 虽然更新操作执行了,但由于 Elasticsearch 的近实时特性,更新操作可能还没有被刷新到内存中的段。Elasticsearch 的索引写入是先写入到 translog(事务日志)中,以保证数据不丢失,然后会定期或在特定条件下将数据从 translog 刷新到内存中的段。如果 GET API 在更新操作之后,且更新尚未被刷新到内存段时执行,此时搜索会从当前已有的段中获取数据,就可能获取到旧版本的文档。例如,更新操作刚执行完,还未到自动 refresh 的时间间隔,或者手动设置了较长的 refresh 间隔,在这段时间内执行 GET API 就可能出现这种情况。