Introduction
L'optimisation des requêtes de base de données est cruciale pour éviter les coûts excessifs liés à la sortie de données. Un exemple récent a montré comment une seule requête Supabase a généré 19 Go de données sortantes.
Contexte Technique
La requête en question utilisait la méthode select('*') pour récupérer toutes les colonnes d'une table, ce qui a entraîné une augmentation significative de la quantité de données transférées. De plus, la requête ne limitait pas le nombre de lignes, ce qui a encore augmenté les coûts.
La requête originale ressemblait à ceci : const { data } = await supabase.from('reports').select('*').eq('user_id', userId). Cette requête semblait innocente, mais elle a généré des coûts importants en raison de la quantité de données transférées.
Analyse et Implications
L'analyse de la requête a révélé que les problèmes étaient doubles : la requête récupérait trop de colonnes et ne limitait pas le nombre de lignes. La solution a consisté à rendre la requête explicite et bornée en utilisant select('id, created_at, status, title') et en limitant le nombre de lignes à 25 avec range(0, 24).
Cette optimisation a réduit la quantité de données transférées et a fait chuter les coûts de sortie de données. La leçon tirée de cette expérience est que les problèmes de coûts liés à la sortie de données sont souvent des problèmes de conception de requête déguisés.
Perspective
Il est essentiel de traiter chaque requête de tableau de bord comme une réponse d'API publique et de ne retourner que les données nécessaires. Cela permet de réduire la quantité de données transférées, de diminuer la latence et d'éviter les surprises de facturation. Il est également important de surveiller les coûts liés à la sortie de données et de les optimiser régulièrement pour éviter les coûts excessifs.