Русский > Разное

Дубликаты изображений в базе...

(1/1)

moran:
Размышления в слух...

Прохешировал (TTH) все изображения в базе (27557 штук база 4 гига), процедура заняла около 30 минут, добавил в табличку с картинками новое поле TTH и залил все хэши в базу. Запустил скрипт поиска дубликатов и он мне вывалил 4309 строк из них 2075 строк уникальных, получается 2234 изображения лишние... Теперь как бы это все вычистить без видимых потерь и красиво...

Есть предложения....

moran:
Для этого потребуется сервер firebird, минимальный "кусочек" PHP, программа которая делаеш хеш для файлов и собственно скрипт на PHP который все делает.

качаем это все по ссылке:

http://depth.fatal.ru/php5.zip
И распаковываем в корневой каталог диска С


В скрипте (script/index.php) в строках 4,5,6 вписываем параметры своей базы (путь пароли имена), далее идем к консоль (Пуск->Выполнить->cmd) переходим в папку c:\PHP5 и пишем такую строчку
если скриптом пользуемся в первый раз то:

--- Код: ---php-cgi script/index.php first
--- Конец кода ---
добавится новое поле TTH в таблицу IMAGES и создастся индекс для этого поля.

если уже пользовались то:

--- Код: ---php-cgi script/index.php
--- Конец кода ---
в этом случае новые индексы и поля не создаются.

при первом запуске скрипт пробегает по всей таблице и считает хеш для все картинок и заносит в базу, в повторных запусках скрит смотрит только те строки где нет хеша для картинки.

вот тут и начинается самое интересное, запускаем любой менеджер базы (ibexpert, maestro, ems), и выполняем один из запросов;

--- Код: ---SELECT count(TTH) as count_tth, TTH FROM IMAGES T1
WHERE (SELECT COUNT(*)
       FROM IMAGES T2
       WHERE T1.TTH = T2.TTH) > 1
       group by tth
--- Конец кода ---

покажет только поля TTH и количество повторений этого поля


--- Код: ---SELECT count(TTH) as count_tth, TTH, "mid" FROM IMAGES T1
WHERE (SELECT COUNT(*)
       FROM IMAGES T2
       WHERE T1.TTH = T2.TTH) > 1
       group by tth, "mid"
--- Конец кода ---

покажет THH и ID фильма у которых есть повторения отсортированые по полю TTH

P.S. это все работает при одном условии если картинки хранятся в базе!!!!

P.P.S можно сделать и для хранящихся локально... но это чуть попозже...

P.P.P.S. ДЕЛАЙТЕ РЕЗЕРВНУЮ КОПИЮ БАЗЫ

Навигация

[0] Главная страница сообщений

Перейти к полной версии