MST
星途 面试题库

面试题:ElasticSearch中search_after与scroll在数据一致性上的表现

在ElasticSearch环境下,当数据不断更新时,search_after和scroll这两种分页方式在保证数据一致性方面分别有哪些特点和局限性?如何根据业务需求选择合适的方式来确保数据一致性?
18.1万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

search_after

  • 特点:基于上一次查询结果的最后一条数据的排序值进行下一页查询,每次查询都实时从索引中获取数据。这意味着它能反映出查询瞬间索引中数据的最新状态,对于数据一致性保证较好,因为每次查询都是基于最新的数据状态进行分页。
  • 局限性:由于每次查询都需要依赖上一次查询的结果,在分布式环境下,如果上一次查询的最后一条数据在后续查询时发生了更新,可能会导致数据一致性问题。例如,在高并发更新场景中,当上一次查询的最后一条数据在本次查询前刚刚被更新,可能会导致数据的重复或遗漏。

scroll

  • 特点:在首次查询时,Elasticsearch会创建一个快照,后续的分页查询都基于这个快照。这保证了在整个滚动过程中,数据的一致性,无论数据在索引中如何更新,滚动查询返回的数据集合是固定的。
  • 局限性:创建的快照会占用额外的资源,长时间的滚动查询可能导致资源耗尽。而且由于它基于快照,在滚动过程中无法反映出索引中数据的实时更新,可能返回的数据不是最新的,对于需要实时数据一致性的场景不太适用。

选择方式

  • 实时性要求高:如果业务需要实时获取最新数据,并且对数据一致性要求相对宽松(即允许在高并发更新场景下有极小的数据不一致概率),应选择search_after。例如在实时监控系统中,虽然数据不断更新,但能获取到接近实时的最新数据更重要。
  • 数据一致性要求严格:当业务对数据一致性要求极高,不允许在分页过程中有数据更新导致的不一致情况,且对数据实时性要求不高时,scroll是更好的选择。例如在生成财务报表等场景,需要确保整个报表数据基于同一时间点的一致性数据。