From fdb2b7588e2326dc36823d7fac5f88ff8ebee2ec Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Tue, 5 Nov 2013 18:37:41 +0100 Subject: Actualize : évite d'ajouter les articles déjà connus MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- app/controllers/feedController.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'app/controllers/feedController.php') diff --git a/app/controllers/feedController.php b/app/controllers/feedController.php index 1131c3a7a..f14ed7997 100755 --- a/app/controllers/feedController.php +++ b/app/controllers/feedController.php @@ -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); } -- cgit v1.2.3