From 977d0da9f3bac811793bffa7cf6b605599c9f871 Mon Sep 17 00:00:00 2001 From: Bharat Mediratta Date: Mon, 11 May 2009 03:53:44 +0000 Subject: Refactor the exif module to denormalize the stored data. This way we have a single exif_record for each item instead of 1 per key. It's about 5x faster to scan photos this way. --- modules/exif/helpers/exif_task.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'modules/exif/helpers/exif_task.php') diff --git a/modules/exif/helpers/exif_task.php b/modules/exif/helpers/exif_task.php index b6599395..3ca849f9 100644 --- a/modules/exif/helpers/exif_task.php +++ b/modules/exif/helpers/exif_task.php @@ -25,14 +25,14 @@ class exif_task_Core { $db->query( "DELETE FROM {exif_records} " . "WHERE {exif_records}.`item_id` NOT IN " . - "(SELECT `id` FROM {items})"); + "(SELECT `id` FROM {items} WHERE {items}.`type` = 'photo')"); // Insert missing exif_records $db->query( - "INSERT INTO {exif_records}(`item_id`) (" . - " SELECT {items}.`id` FROM {items} " . + "INSERT INTO {exif_records}(`item_id`) " . + "(SELECT {items}.`id` FROM {items} " . " LEFT JOIN {exif_records} ON ({exif_records}.`item_id` = {items}.`id`) " . - " WHERE {exif_records}.`id` IS NULL)"); + " WHERE {items}.`type` = 'photo' AND {exif_records}.`id` IS NULL)"); list ($remaining, $total, $percent) = self::_get_stats(); return array(Task_Definition::factory() @@ -53,9 +53,9 @@ class exif_task_Core { foreach (ORM::factory("item") ->join("exif_records", "items.id", "exif_records.item_id") ->where("exif_records.dirty", 1) - ->limit(10) + ->limit(100) ->find_all() as $item) { - if (microtime(true) - $start > 1) { + if (microtime(true) - $start > 1.5) { break; } @@ -82,7 +82,7 @@ class exif_task_Core { private static function _get_stats() { $missing_exif = ORM::factory("exif_record")->where("dirty", 1)->count_all(); - $total_items = ORM::factory("item")->count_all(); + $total_items = ORM::factory("item")->where("type", "photo")->count_all(); return array($missing_exif, $total_items, round(100 * (($total_items - $missing_exif) / $total_items))); } -- cgit v1.2.3