Actualize : évite d'ajouter les articles déjà connus

Dans la plupart des cas, évite d'ajouter les articles déjà présents dans
la base de données, en faisant une pré-requête (une par flux, pas une
par article).
Par exemple, si un flux RSS fournit 20 articles, alors la pré-requête
charge une liste d'exclusion de 20+2 identifiants d'articles.
Ce patch réduit considérablement le nombre de requêtes et la charge de
la base de données durant les mises à jour, et en particulier le trafic
réseau entre PHP et la base de données.
Les mises à jour sont du coup aussi plus rapides.
This commit is contained in:
Alexandre Alapetite
2013-11-05 18:37:41 +01:00
parent fb0c0868a4
commit fdb2b7588e
2 changed files with 14 additions and 2 deletions

View File

@@ -150,14 +150,18 @@ class feedController extends ActionController {
$feed->load ();
$entries = $feed->entries ();
//For this feed, check last n entry IDs already in database
$existingIds = array_fill_keys ($entryDAO->listLastIdsByFeed ($feed->id (), count($entries) + 2), 1);
// ajout des articles en masse sans se soucier des erreurs
// On ne vérifie pas que l'article n'est pas déjà en BDD
// car demanderait plus de ressources
// La BDD refusera l'ajout de son côté car l'id doit être
// unique
foreach ($entries as $entry) {
if ($entry->date (true) >= $date_min ||
$feed->keepHistory ()) {
if ((!isset ($existingIds[$entry->id ()])) &&
($entry->date (true) >= $date_min ||
$feed->keepHistory ())) {
$values = $entry->toArray ();
$entryDAO->addEntry ($values);
}