Je me suis confronté à un petit soucis de performance récemment et je pense avoir une solution qui pourrait vous être utile.
Je fais une application de liste de cadeaux partagées. Dans cette application, je récupère des fichiers csv qui contiennent des produits venant de différentes boutiques et je me retrouve avec une base de données produits d’un peu moins de 8 millions de lignes.
Dans l’application, je propose à mes utilisateurs de faire une recherche sur ces données par code barre et par nom du produit.
Avec 8 millions de produits, une requête du type :
select * from produit where produit.nom like '%maRecherche%'
prend un temps beaucoup trop long.
J’ai trouvé une méthode sur YouTube qui permet d’améliorer grandement cela et la voici
En la suivant, j’obtiens les résultats de ma recherche en 153ms sur un peu moins de 8 millions de produit et sans à avoir à créer moi même un index.
4 « J'aime »
excellente vidéo merci @jmjoary ! Du coup tu as créé un endpoint spécifique dans ton directus pour exécuter ta requête SQL ?
Une autre solution peut être de créer une autre base séparée de ta base principale via Meilisearch (https://www.meilisearch.com/) ou équivalent)
Tu peux t’en servir pour tout ce qui doit être « recherchable » et y associer tes vrais ID pour ensuite faire le lien avec ta base à toi.
C’est plus simple que de customiser tes requêtes SQL mais ça devient une nouvelle dépendance. A voir si ça vaut le coup
Oui tout a fait. J’ai du mettre 1 heure à mettre en place et tester. Même la génération des index a été rapide vu le nombre de ligne dans la table. Le plus long a été de connecter mon extension à la base de données.
C’est plus simple que de customiser tes requêtes SQL mais ça devient une nouvelle dépendance. A voir si ça vaut le coup
Firebase m’a vacciné
donc j’évite autant que possible les dépendances dont je ne gère pas les mises à jour.
1 « J'aime »
Je ne l’ai pas précisé mais meilisearch est open source, c’est comme un directus que tu peux installer sur tes propres serveurs. J’hésite à l’utiliser pour certains projets
1 « J'aime »