Skip to content

SQL : Maintenir une copie du nombre d'articles lus et non-lus par flux #268

@Alkarex

Description

@Alkarex

Plutôt que de recompter à chaque affichage de page le nombre d'articles lus et non-lus par catégorie, conserver cette information au niveau de la table feed pour éviter d'avoir à scanner la table entry (ce qui prend beaucoup de temps même avec un index, surtout qu'il faut une jointure avec un GROUP BY, etc.).

Actuellement, c'est en effet cette opération qui ralentit le plus FreshRSS.

Pour maintenir cette information à jour, une option est d'utiliser TRIGGER, disponible sur MySQL ainsi que SQLite :

Voir http://fr.openclassrooms.com/informatique/cours/triggers-et-vues-materialisees-mysql/les-triggers-en-action

Malheureusement avec MySQL, cela ne sera pas disponible sur beaucoup de serveurs mutualisés... :-/

Une autre option est d'inclure à la suite des quelques requêtes qui changent le nombre d'articles lus et/ou non lus une seconde requête d'incrémentation/décrémentation.

On pourrait même concaténer les deux requêtes pour réduire les risques d’inconsistances et améliorer les performances, mais cela requerrait apparemment PHP 5.4+ soit Ubuntu 12.10+ donc pas la LTS actuelle... :-/

Il est dans tous les cas possible de régulièrement assurer la cohérence de ces données, par exemple en fin de mise-à-jour des flux. Le nombre d'articles non-lus est par ailleurs naturellement mis à 0 plus souvent, par exemple lorsqu'on marque une catégorie comme lue.

Quoi qu'il en soit, cela devrait aussi bien aider pour les performances de SQLite #100

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions