#1 2024-11-26 14:06:06

IxeYgrek
Membre
2024-09-09
16

Liste d'amélioration orientées vers les très larges galeries

Bonjour,

Voici une liste d'amélioration que je trouve nécessaire, surtout pour les galeries comprenant énormément de photos.

_ Passage sur le moteur de base de données InnoDB. Pour ma part, convertir toutes les tables en InnoDB m'a apporté un énorme gain de performance.

_ Synchronisation en arrière-plan. Lorsque l'on synchronise un dossier avec des centaines de milliers de photos, ça se termine systématiquement en timeout a moins de changer le paramètre max_execution_time de PHP sur 15 minutes... Actuellement, le script PHP ne se termine pas tant que la requête SQL ne s'est pas terminée. Il serait préférable de lancer la requête SQL en arrière-plan, de sortir du script PHP et ajouter une barre de progression sur la page synchronisation ou au moins afficher si la requête est toujours en cours ou non.

_ Tâche planifiée pour le calcul des info de la page d'accueil. Sauf erreur de ma part, à chaque chargement de la page d'accueil de l'administration, une nouvelle requête SQL est faite pour chaque métrique : nombre de photos, stockage utilisé, nombre d'albums etc etc.
Je pense qu'il serait utile de créer une tâche planifiée afin de faire ces requêtes une fois toutes les heures / 2 heures / jour (à définir) et de stocker les résultats en base de données. Ensuite, lors du chargement de la page d'accueil seuls les résultats calculés par la tâche planifiée sont affiché, réduisant drastiquement le temps de réponse de cette page.
Avec actuellement 2,5 millions de photos, cette page met entre 10 et 12 secondes à charger malgré le passage en InnoDB.

_ Amélioration de la gestion par lot . Actuellement, pour la gestion par lot, il n'est pas possible de faire plusieurs actions en même temps. Si je veux ajouter des tags + ajouter un auteur + régler un droit d'auteur, je dois faire 3 actions différentes sur le même lot. Il serait extrêmement pratique de pouvoir sélectionner plusieurs actions.

Je mettrais cette page régulièrement à jour avec de nouvelles idées dés qu'elles me viennent en tête !

Version de Piwigo: 15.1.0
Version de PHP: 8.3.6
Version de MySQL: 8.0.40-0ubuntu0.24.04.1
URL Piwigo: https://universe-photo-archive.eu/gallery/

Dernière modification par IxeYgrek (2024-11-26 14:20:10)

Hors ligne

#2 2024-11-26 23:04:32

plg
Équipe Piwigo
Nantes, France, Europe
2002-04-05
12672

Re: Liste d'amélioration orientées vers les très larges galeries

Bonjour IxeYgrek,

IxeYgrek a écrit:

_ Passage sur le moteur de base de données InnoDB. Pour ma part, convertir toutes les tables en InnoDB m'a apporté un énorme gain de performance.

Cela paraît trop beau pour être vrai. On doit faire des tests. Je dis "trop beau" parce qu'il "suffit" de travailler au niveau de la base, pas de code SQL à réécrire ou de cache à mettre en place...

IxeYgrek a écrit:

_ Synchronisation en arrière-plan.

On commence à avoir des statistiques sur l'utilisation de la synchronisation pour ajouter des photos. Voyons voir. Sur 14660 installations de Piwigo dont on a les stats générales, seules 1884 ont des photos ajoutées par synchro dans les 2 dernières années, soit 13%.

Ajoutons un petit filtre sur les galeries de plus de 100k photos. Là on passe à 84 installations sur 179, soit 47%. D'évidence, la synchro est utilisée sur les grosses galeries, moins de façon générale.

Alors oui la solution ultime pour avoir une synchro qui ne plante pas à cause d'un timeout, c'est de travailler en petits blocs et de faire une barre de progression. Un peu comme sur la gestion par lot avec la synchro des métadonnées.

Autre solution qui pourrait plaire aux utilisateurs ayant une casquette "administrateur système" : avoir un script de synchro en ligne de commande. On ne serait alors plus limité par les 30 secondes d'execution maximum.

J'avoue que ce n'est pas trop ma priorité personnelle. Pour moi l'ajout par synchro c'est la méthode d'ajout "historique", mais certainement pas le présent ou l'avenir. Autant j'ai dû réécrire 3 ou 4 fois l'algo les premières années, autant je n'y ai pas retouché depuis 10 ans au moins. Et pourtant il y a des choix que je ne suis pas sûr d'assumer totalement.

IxeYgrek a écrit:

_ Tâche planifiée pour le calcul des info de la page d'accueil. Sauf erreur de ma part, à chaque chargement de la page d'accueil de l'administration, une nouvelle requête SQL est faite pour chaque métrique : nombre de photos, stockage utilisé, nombre d'albums etc etc.

Faudrait regarder en détail mais pour ce genre de sujet, j'aurais tendance à regarder du côté du PersistentCache (comme j'ai fait pour la 15 avec le contenu des filtres de recherche).

IxeYgrek a écrit:

_ Amélioration de la gestion par lot . Actuellement, pour la gestion par lot, il n'est pas possible de faire plusieurs actions en même temps. Si je veux ajouter des tags + ajouter un auteur + régler un droit d'auteur, je dois faire 3 actions différentes sur le même lot. Il serait extrêmement pratique de pouvoir sélectionner plusieurs actions.

Ah ça, c'est marrant. On a eu une telle demande de la part d'un "parc national" bien connu. On a proposé de développer un plugin spécifique pour cela. Avec une action spéciale de la gestion par lot qui regrouperait les champs.

Cela pourrait ressembler à ça.

https://sandbox.piwigo.com/i?/uploads/4/y/1/4y1zzhnrnw//2024/10/24/20241024095216-69c600d9-xx.png

Ca reste une maquette, ça reste spécifique parce que chaque administrateur va vouloir mettre sa liste préférée de champs et l'idée n'est pas de "tout mettre" non plus.


Les historiens ont établi que Pierrick était le premier utilisateur connu de Piwigo.

Hors ligne

#3 2024-11-27 11:40:57

IxeYgrek
Membre
2024-09-09
16

Re: Liste d'amélioration orientées vers les très larges galeries

Bonjour et merci pour la réponse.

_Concernant InnoDB, j'ai clairement un gain de performance, mais je n'ai malheureusement pas de métriques pour le prouver. J'ai également gagné en stabilité, en effet avec MyISAM je me retrouvais très souvent avec des tonnes de requêtes en attente de levé de verrou (probablement dû au fait que MyISAM verrouille la table entière et non pas row par row comme InnoDB). C'est évidemment un retour d'expérience personnel qui ne reflète pas forcément la majorité et je n'ai pas poussé l'analyse plus loin.

_Un script de synchro en ligne de commande serait vraiment appréciable si celle intégré à l'interface d'administration n'est pas revue. En effet pour ma part je récupère régulièrement des photos par centaines de milliers en passant par une API de la NASA directement sur le serveur qui héberge le site, je ne peux donc pas les ajouter autrement. Mais bon ce n'est pas bloquant vu que via l'interface Web la synchro fonctionne très bien à partir du moment où on augmente la valeur de max_execution_time, même si c'est pas l'idéal.

_L'utilisation d'un cache est aussi une excellente idée. Pour les besoins de mon site j'ai utilisé la méthode de la tâche planifiée pour récupérer les info régulièrement, ça donne ça et l'affichage est du coup instantané : https://universe-photo-archive.eu/stats.html

_Alors ça c'est chouette. La maquette est parfaite elle contient tous les champs dont j'ai le plus besoin (tags, auteur, copyright)

Hors ligne

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact