Aller au contenu

Besoin d'aide pour optimisation d'un script très lourd


Sujets conseillés

Posté (modifié)

Bonjour,

J'ai besoin d'avis et conseils pour un développement PHP sur lequel je travaille actuellement.

Je dispose d'une base de données d'articles scindée en plusieurs tables identiques.

Chacune de ces tables pèse environ 250Mo et contient entre 100 000 et 350 000 enregistrements... pour un total dépassant le million.

J'ai l'obligation, quotidiennement, d'effectuer un traitement relatifs à ces articles ce qui m'oblige à effectuer une boucle sur la totalité de mes articles.

J'ai X (petites) requêtes SQL (disons une bonne dizaine en moyenne) à faire par articles lors de cette mise à jour.

Avant de me lancer dans un développement lourd j'aimerai avoir vos avis et conseils pour avoir toutes les cartes en main pour mettre en place un script optimisé.

D'avance merci pour vos réactions

Rémi

Modifié par aiepepito
Posté

Hello,

déjà, qu'est ce qui t'oblige à passer par une "boucle PHP" ? Ne peux tu pas faire directement ces X requêtes en indiquant tes tables "articles" en sous requête ?

Posté

Bonjour,

Il faudrait nous donner le détail des requêtes que tu souhaites faire... Le top serait de pouvoir demander au SGBD de se débrouiller tout seul, mais ça dépend vraiment de ce que tu veux y faire. Sur un de mes projets, j'avais des calculs PHP à faire sur chacun des tuples, donc je ne pouvais pas faire une requêtes super optimisée. Ce script dépassait d'ailleurs le time_limit par défaut.

Mais après, tout dépend ce que tu veux faire... :)

Posté (modifié)
Hello,

déjà, qu'est ce qui t'oblige à passer par une "boucle PHP" ? Ne peux tu pas faire directement ces X requêtes en indiquant tes tables "articles" en sous requête ?

Bonjour Kioob,

Non c'est hélas impossible.

J'ai une expression régulière présente dans cette boucle et cette expression régulière évolue quotidiennement (d'où le besoin de MAJ ma bdd).

Grosso modo j'ai besoin de stocker dans une table les identifiants de mes articles qui ont le mot clef football dans leur contenu. (et demain basket ou golf..., chaque jour de la semaine sera assimilé à un sport différent).

J'ai chaque jour plusieurs centaines de nouveaux articles dans ma base et la liste des sports est évolutive semaine après semaine (d'où l'obligation de vérifier la totalité de mes articles à nouveaux, même mes archives...)

Je pensai donc effectuer mon expression régulière sur chacun de mes articles puis stocker dans une table de correspondance les identifiants des articles liés au sport du jour.

J'espère être assez clair.

Bonjour,

Il faudrait nous donner le détail des requêtes que tu souhaites faire... Le top serait de pouvoir demander au SGBD de se débrouiller tout seul, mais ça dépend vraiment de ce que tu veux y faire. Sur un de mes projets, j'avais des calculs PHP à faire sur chacun des tuples, donc je ne pouvais pas faire une requêtes super optimisée. Ce script dépassait d'ailleurs le time_limit par défaut.

Mais après, tout dépend ce que tu veux faire... :)

Bonjour sarc,

c.f mon message ci-dessus mes requetes seront (je pense) uniquement des INSERT pour lier mes articles avec les sports voulus.

Modifié par aiepepito
Posté

Je ne vois pas en quoi ça empêche de tout faire au niveau SQL?

insert into tableresultat (select idarticle from table1 where texte regexp $expression union select idarticle from table2 where text regexp $expression)

L'autre solution c'est probablement de faire un index full text de tous tes articles, comme ça tu n'as rien à faire...

Jacques.

Posté

Tu peux pas prélever tous les noms de sports à la création de cet article, et les stocker quelque part ? Ca te permettrait de répartir la charge sur chaque création au lieu d'avoir une requête monstre tous les jours... Et tous les jours, après, il te suffit de chercher dans ta table de stockage sur le sport qui t'intéresse. (Enfin, tu as peut-être pris le sport comme exemple bateau, et peut-être que ta liste de mots-clefs n'est pas finie...)

Posté

Je suis d'accord avec Sarc : l'unique solution pour moi est d'associer un Tag a chacun des articles et de mettre a jour que les articles modifies ou cree.

Fait un search global tel que tu le souhaites tuera ta base un jour ou l'autre, lorsque le nombre d'article sera trop grand.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...