弹性搜索的最大可滚动时间

Max scrollable time for elasticsearch

滚动搜索可以设置的最大滚动时间是多少?

文档: https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/api-reference.html#api-scroll

如果你问这种问题,你可能没有按预期在 ES 中使用 Scroll。当您确定需要 return ALL 匹配记录时,您想使用滚动。

Scroll 的绝佳用例

我想从 ES 中提取 1,000,000 条记录写入 CSV 文件。这是滚动的完美用例。您需要 return 1M 行,但您不想 return 它们都作为数据库中的 1 个块。相反,您可以将它们分成约 1000 个记录块,将块写入 CSV 文件,然后获取下一个块。你的滚动保持活动可以设置为 1 分钟,你不会有任何问题。

Scroll 的错误用例

用户正在查看前 50 条记录,在未来的某个时间,他们可能想要也可能不想查看接下来的 50 条记录。

对于这样的用例,您想使用 Search After API

最大滚动时间没有 one-value-fits-all 值。

Scan & Scroll 用于分块扫描大量记录。每个块的最大值必须通过增量增加来获得,直到你遇到突破,因为它取决于你的集群资源、网络延迟和集群负载。

我们有一个包含大约 10 亿条记录和 1 TB 数据的 3 节点测试设置。我能够以滚动大小 5000 和超时 5m 滚动浏览整个索引。但是,这些值有很多超时。从我们的分析中,我们观察到滚动超时严重依赖于 cluster loadnetwork latency。所以我们最终确定了 3500 大小和 4m 超时。

所以我会推荐以下内容-

  • 逐渐增加大小和超时值以获得网络的最大值。
  • 获得最大值后,将其降低一个档次以适应由于集群负载和延迟引起的故障