-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
SQL : Maintenir une copie du nombre d'articles lus et non-lus par flux #268
Description
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 :
- http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html
- http://www.sqlite.org/lang_createtrigger.html
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... :-/
- http://stackoverflow.com/questions/6346674/pdo-support-for-multiple-queries-pdo-mysql-pdo-mysqlnd
- http://dev.mysql.com/downloads/connector/php-mysqlnd/
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