Tous les articles
Ingénierie

Le predicate pushdown, expliqué simplement

Comment rapprocher les filtres du stockage a fait passer une requête de 90 secondes à 8 — sans acheter le moindre serveur supplémentaire.

9 min de lecture#Databases#Performance#Rust
Le predicate pushdown, expliqué simplement

La donnée la moins chère à traiter est celle qu’on ne lit jamais. Le predicate pushdown est la discipline qui consiste à décider quoi ignorer le plus tôt physiquement possible.

Où passe réellement le temps

Dans un entrepôt de données en colonnes, l’essentiel du temps d’une requête est consacré à déplacer des octets depuis le disque et à travers le réseau. Si un filtre peut éliminer un row group avant même qu’il soit lu, c’est du coût économisé à l’état pur.

Parquet stocke des statistiques min/max par row group et par page. Une requête sur les commandes supérieures à 1 000 $ peut ignorer tout bloc dont le maximum est sous ce seuil — souvent la majeure partie du fichier.

Pousser le filtre au fond de la pile

L’astuce consiste à apprendre à chaque couche — planificateur, scanner, stockage — à honorer le prédicat au lieu de le revérifier au sommet. Chaque couche qui élimine des lignes tôt réduit le travail de tout ce qui se trouve au-dessus.

  • Planificateur : réécrire la requête pour que les filtres se lient aux scans.
  • Scanner : utiliser les statistiques pour ignorer row groups et pages.
  • Exécution : évaluer les filtres restants de façon vectorisée, par lots.

Le résultat

Sur un entrepôt de 4 Po, le pushdown a fait passer une requête de tableau de bord représentative de 90 secondes à moins de 8 — avec exactement le même matériel.