Dotclear

Ticket #943 (closed defect: fixed)

Opened 15 years ago

Last modified 13 years ago

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:1 Changed 15 years ago by Tomtom33

Ç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?

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:7 Changed 15 years ago by xave

  • Milestone changed from 2.2 to 2.3

comment:8 Changed 14 years ago by bruno

  • Milestone 2.3 deleted

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:12 Changed 13 years ago by franck

  • Status changed from reviewing to onhold

comment:13 Changed 13 years ago by franck

  • Milestone set to 2.5

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
Note: See TracTickets for help on using tickets.

Sites map