Ticket #943 (closed defect: fixed)
Optimisation des traitements dans posts_actions et comments_actions
Reported by: | bruno | Owned by: | dcteam |
---|---|---|---|
Priority: | normal | Milestone: | 2.5 |
Component: | module:core | Version: | 2.1 |
Severity: | normal | Keywords: | |
Cc: |
Description
Le traitement "par lot" des commentaires ou des billets dans l'administration n'est pas optimal. Par exemple, pour supprimer certains billets cochés dans la page posts.php, dans $POST[] contient la liste des IDs des billets, posts_actions.php déroule l'algorithme :
- Récupération des billets concernés : "SELECT [...] from dc_post where post_id in ([liste]) and [contraintes]"
- Boucle sur le $rs sortant, et exécution de $core->blog->delPost sur chaque id
donc autant de requêtes qu'il y a de billets cochés.
Si on envisage l'évolution #849, ou tout simplement si on veut supprimer beaucoup de billets on risque de vite tomber en timeout avec de traitement
Un raccourci serait de faire un $core->blog->delPosts($params), qui ferait un DELETE FROM dc_post WHERE post_id in ([liste]) and [contraintes]
Change History
comment:2 Changed 15 years ago by JcDenis
La plupart des actions d'effacement d'enregistrement se font une par une, c'est la même chose dans beaucoup de classes, une des principales raisons est de bien identifier ce que l'on souhaite définitivement effacer. Maintenant si tu veux faire un delPosts() il faut alors le blinder soit par de js de confirmation avant soit par de nombreuses limitations. (if type+id+...)
comment:3 follow-up: ↓ 4 Changed 15 years ago by bruno
JdDenis?: Pas sûr de comprendre : faire un SELECT [] from dc_post where [conditions] suivi d'une itération sur tous les résultats et d'un effacement 1 à 1 est strictement identique à un DELETE from dc_post where [même conditions]. Dans l'implémentation actuelle, il n'y a pas de demande de confirmation entre le select et les delete...
comment:4 in reply to: ↑ 3 Changed 15 years ago by JcDenis
Replying to bruno: Hum, aussi oui, dans ce cas la j'aurai mieux fait de me taire.
comment:5 Changed 15 years ago by xave
Ué, ça paraît bien. À qui pourrait-on assigner ce ticket ? Ah, au même que le #849, tiens. :)
comment:6 Changed 15 years ago by Tomtom33
Pareil. Du coup, ce sera plus simple avec cette structure pour gérer le #849 ;)
comment:9 Changed 14 years ago by bruno
- Owner changed from xave to dcteam
- Status changed from new to reviewing
comment:10 Changed 14 years ago by Tomtom33
Bon, comme je l'ai dit dans mon premier commentaire, je suis pour implémenter ça.
comment:11 Changed 14 years ago by xave
Ça va être nécessaire au moment où on va vraiment changer le mode de fonctionnement des listes, non ?
comment:14 Changed 13 years ago by JcDenis
(In [ad4942bddbdb]) Enhance mass posts actions by reducing SQL queries, addresses #943
comment:15 Changed 13 years ago by JcDenis
Et c'est encore pire que ce que je croyais, en effet pour chaque commentaire modifié, la fonction triggerComment() ajoute encore 3 requêtes...
comment:17 Changed 13 years ago by JcDenis
(In [ffd8fd14003c]) Enhance mass comments actions by reducing SQL queries, addresses #943
comment:18 Changed 13 years ago by JcDenis
(In [40fe2ee5bdbd]) Enhance mass use of triggerComment() by reducing SQL queries, addresses #943
comment:16 Changed 13 years ago by franck
- Status changed from onhold to closed
- Resolution set to fixed
Ça me parait être une très bonne idée. Pourquoi à la base, cela a été codé comme ça? Pour vérifier qu'un ID existe bien?