diff options
author | Bharat Mediratta <bharat@menalto.com> | 2009-05-11 03:53:44 +0000 |
---|---|---|
committer | Bharat Mediratta <bharat@menalto.com> | 2009-05-11 03:53:44 +0000 |
commit | 977d0da9f3bac811793bffa7cf6b605599c9f871 (patch) | |
tree | 9dc028c3c0305d9747e12f655c45b4e2f985e67d /modules/exif/helpers/exif_task.php | |
parent | b706cb69ac7737a550c8f7fff025a6abeb3cfcb6 (diff) |
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.
Diffstat (limited to 'modules/exif/helpers/exif_task.php')
-rw-r--r-- | modules/exif/helpers/exif_task.php | 14 |
1 files changed, 7 insertions, 7 deletions
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))); } |