Projet

Général

Profil

Development #24239

Réduire le nombre de requêtes sur les cellules

Ajouté par Frédéric Péters il y a presque 6 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
02 juin 2018
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

Pour afficher une page on doit passer par tous les types de cellule et aujourd'hui ça fait déjà 36 tables.

Dans #17645 j'ai éliminé la piste de la transformation de CellBase en modèle concret mais dans sa description j'écrivais déjà « si au niveau d'une page on gardait un cache du type de cellules qui s'y trouvent, on réduirait drastiquement le nombre de requêtes. » et cette piste pourrait être reprise ici.

Je proposerais ici d'ajouter un related_cells = JSONField(…), et dans un premier temps de simplement y avoir un dictionnaire {'cell_types': […]}, (avec les get_cell_type_str); et simplement les signaux pre_save/pre_delete interceptés pour les cellules. (i.e. ne pas conserver une sérialisation des cellules dans l'objet Page, continuer à faire des requêtes sur les tables des cellules).

Modifier ensuite Page.get_cells et CellBase.get_cells pour se baser sur related_cells['cell_types'] plutôt que passer sur tous les modèles. (et si jamais cell_types n'existait pas, passer partout et l'écrire pour la fois suivante).


Fichiers


Demandes liées

Lié à Combo - Autre #24237: performance, analyse/amélioration requêtes SQLFermé02 juin 2018

Actions

Révisions associées

Révision 9e6adee4 (diff)
Ajouté par Frédéric Péters il y a presque 6 ans

general: keep cache of cell types used in a page (#24239)

Historique

#1

Mis à jour par Frédéric Péters il y a presque 6 ans

  • Lié à Autre #24237: performance, analyse/amélioration requêtes SQL ajouté
#2

Mis à jour par Frédéric Péters il y a presque 6 ans

  • Assigné à mis à Frédéric Péters
#3

Mis à jour par Frédéric Péters il y a presque 6 ans

Branche brouillon postée en wip/24237-sql-reduction.

#4

Mis à jour par Frédéric Péters il y a presque 6 ans

#5

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

Je trouve que l'imbrication entre Page.get_cells et CellBase.get_cells rend le truc un peu confus.

Page.get_cells a la responsabilité de maintenir le cache à jour (en plus des cell_post_save et cell_post_delete, tu essaies de palier à un problème éventuel problème sur les signaux c'est ça ?), mais pour se faire Page.get_cells se repose sur CellBase.get_cells qui justement utilise le cache ...

Bref pas très constructif mes remarques. J'ai essayé de goupiller une adaptation plus simple pour donner du corps à mon propos mais j'arrive à rien.

#6

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

Seconde lecture, j'imagine un scénario catastrophe :

  • le cache d'une page n'est pas à jour (mais pas vide) à cause d'un plantage, whatever * le seul moyen de le mettre à jour est un appel à Page.get_cells * Page.get_cells appelle CellBase.get_cells qui lui renvoie une ensemble de cellules en se basant sur ce cache incomplet * Page.get_cells ne mettra pas le cache à jour parce que qu'elle compare le cache avec ce que lui renvoie CellBase.get_cells

Peut-être faire en sorte que le cache ne soit utilisé que pour du rendu de page et que lorsque l'on modifie une page où une cellule, le cache soit supprimé puis recréé de zéro ?

#7

Mis à jour par Frédéric Péters il y a presque 6 ans

Peut-être faire en sorte que le cache ne soit utilisé que pour du rendu de page et que lorsque l'on modifie une page où une cellule, le cache soit supprimé puis recréé de zéro ?

J'ai poussé une nouvelle version simplifiée ainsi, post_save/post_delete d'une cellule, le cache est entièrement recalculé.

#8

Mis à jour par Emmanuel Cazenave il y a presque 6 ans

  • Statut changé de Solution proposée à Solution validée

okay

#9

Mis à jour par Frédéric Péters il y a presque 6 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit 9e6adee4f9153bd838f20670b3195db38929f5fd
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Sat Jun 2 15:08:57 2018 +0200

    general: keep cache of cell types used in a page (#24239)
#10

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF