Published signals

De 10 minutes à 1 seconde : Une optimisation en trois rounds pour la pagination profonde avec sauts de page arbitraires dans Elasticsearch

Score: 8/10 Topic: Elasticsearch deep pagination optimization with search_after and Redis caching

Cet article détaille une optimisation en trois rounds par l'équipe serveur internet de vivo pour permettre des sauts de page arbitraires dans la pagination profonde d'Elasticsearch, réduisant le temps de requête de 10 minutes à 1 seconde. La solution utilise search_after combiné à un cache d'ancres multi-niveaux Redis, répondant à une limitation clé d'ES. Elle offre une approche pratique et évolutive pour les environnements de production nécessitant un accès aléatoire à des ensembles de résultats profonds.

Les méthodes de pagination natives d'Elasticsearch, comme from/size, deviennent prohibitivement lentes pour les pages profondes en raison de la nécessité de récupérer et de jeter de grands ensembles de résultats. Cet article présente une solution novatrice de l'équipe serveur internet de vivo qui réduit le temps de requête de pagination profonde de 10 minutes à 1 seconde. L'approche utilise une optimisation en trois rounds : premièrement, le préchauffage segmenté d'un cache Redis ; deuxièmement, le positionnement du point d'ancrage le plus proche combiné à search_after ; et troisièmement, une stratégie de cache d'ancres multi-niveaux. L'idée clé est de mettre en cache des points d'ancrage à intervalles réguliers (par exemple, tous les 1000 documents) et d'utiliser search_after pour sauter vers l'ancre mise en cache la plus proche, puis de scanner vers l'avant jusqu'à la page exacte. Cela évite la surcharge du défilement profond tout en prenant en charge les sauts de page arbitraires. L'article comprend des benchmarks de performance détaillés et des compromis, tels que les stratégies d'invalidation de cache et les considérations de mémoire. Pour les équipes d'ingénierie traitant de la recherche à grande échelle ou de l'analyse de logs, cela fournit un modèle prêt pour la production qui équilibre vitesse, cohérence et utilisation des ressources.