summaryrefslogtreecommitdiff
path: root/modules/exif/helpers/exif_task.php
diff options
context:
space:
mode:
authorBharat Mediratta <bharat@menalto.com>2009-05-11 03:53:44 +0000
committerBharat Mediratta <bharat@menalto.com>2009-05-11 03:53:44 +0000
commit977d0da9f3bac811793bffa7cf6b605599c9f871 (patch)
tree9dc028c3c0305d9747e12f655c45b4e2f985e67d /modules/exif/helpers/exif_task.php
parentb706cb69ac7737a550c8f7fff025a6abeb3cfcb6 (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.php14
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)));
}