Jump to content
покупайте без комиссии
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Поиск товаров с потерянными изображенями.


Recommended Posts

Все првиет!
А подскажите в каком направлении думать, для реализации скрипта вытаскивающего все товары у которых потеряны изображения. Т.е. файлов нет на диске. 
Перебирать product и product_image и проверять наличие файла на диске это решение задачи в  лоб.
И наверное будет не быстро если товаров ~ n*10000. Может быть уже есть красивые решения?  

Сейчас смотрю логи ngnix - может быть искать сообщения с no_image?
Какие есть идеи?
 

Link to post
Share on other sites

Я когда-то решал вопрос с помощью этого скрипта, только дорабатывал его. Это заготовка, попробуйте дописать под свои нужды

fixit.php

Изначально он писался для удаления товаров  без картинок или пустых записях о картинках если самой картинки не существует. Но можно переделать и под ваши потребности

Link to post
Share on other sites

8 минут назад, Einshtein сказал:

Я когда-то решал вопрос с помощью этого скрипта, только дорабатывал его. Это заготовка, попробуйте дописать под свои нужды

fixit.php

 Einshtein, спасибо за скрипт. ) У меня почти такой же, только на PDO. По моим подсчетам если за 1 секунду проверять 10 файлов ( что очень оптимистично ), а записей в product_image ~180 тыс. то получается ~5 часов.
После этих расчетов я задумался об альтернативном решении. 

Link to post
Share on other sites

Сейчас пытаюсь реализовать такую схему - забрать имена файлов изображений в mySQL и потом уже сравнивать с product и product_image.
 

Edited by Pirks
Link to post
Share on other sites

А почему Вы думаете что будет проверять 10 файлов в секунду? Что-то как-то маловато.
Скрипту не нужно каждый раз прогонять весь список фото, он просто обращается по пути из базы к нужному файлу и если не находит его - добавляет запись в список, это очень быстро. 
Я не спец по мускулу, но мне кажется в таком случае можно организовать какую-нибудь многопоточность. 

То есть по сути получается что одна запись об изображении = 1 запрос, причем не тяжелый, даже очень легкий

Либо можно одним запросом вытащить все записи в массив и потом уже перебирать сам массив.

Я уже не помню сколько времени у меня это заняло, но я проверял порядка 4к товаров, по 5-10 изображений у каждого и не помню чтобы были какие-то проблемы

Link to post
Share on other sites

Если сделать доп проверку наличия фото в контроллере продукта?
Т.е. фото нет - обновили данные по товару

Боты ведь ходят по страницам

Link to post
Share on other sites

1 минуту назад, thentru сказал:

Если сделать доп проверку наличия фото в контроллере продукта?
Т.е. фото нет - обновили данные по товару

Боты ведь ходят по страницам

Это если не требуется сиеминутное решение. Да и автору нужен полный список таких товаров, видимо чтобы удалить их или проставить фото. 
 

Link to post
Share on other sites

47 минут назад, Pirks сказал:

Перебирать product и product_image и проверять наличие файла на диске это решение задачи в  лоб.

Это самое быстрое и верное решение..
 

  • +1 1
Link to post
Share on other sites
52 минуты назад, Einshtein сказал:

А почему Вы думаете что будет проверять 10 файлов в секунду? Что-то как-то маловато.
Скрипту не нужно каждый раз прогонять весь список фото, он просто обращается по пути из базы к нужному файлу и если не находит его - добавляет запись в список, это очень быстро. 

 

Да вы правы, file_exists - быстро работает! )  Может быть я открывал и получил такое время. (
 

49 минут назад, Einshtein сказал:

Это если не требуется сиеминутное решение. Да и автору нужен полный список таких товаров, видимо чтобы удалить их или проставить фото. 
 

Мне надо получить их список и докачать через API с ресурсов поставщика. 

Всем спасибо, за участие. )

Link to post
Share on other sites

1 час назад, Einshtein сказал:

он просто обращается по пути из базы к нужному файлу и если не находит его

здесь вопрос о десятке тысяч товаров

Т.е. можно упереться просто во время выполнения скрипта и память

Для єтого создать временную таблицу
в которой записывать проверенііе id

SELECT product_id, t_product_id
FROM oc_product
LEFT JION oc_t_product ON product_id = t_product_id
WHERE t_product_id IS NULL

Link to post
Share on other sites
1 час назад, thentru сказал:

Если сделать доп проверку наличия фото в контроллере продукта?
Т.е. фото нет - обновили данные по товару

Боты ведь ходят по страницам

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

Edited by Pirks
Link to post
Share on other sites

9 минут назад, chukcha сказал:

здесь вопрос о десятке тысяч товаров
Т.е. можно упереться просто во время выполнения скрипта и память
Для єтого создать временную таблицу
в которой записывать проверенііе id

 

Так и планируется, только сразу имя файла писать, а не id. 
Другой скрипт будет по это таблице периодически скачивать по крону или этот же, после проверки.

 

А просто "пробежать" в консоли по  product с ~45000 записей проверяя  file_exists - 1 сек.
Конечно, с записью во временную таблицу будет дольше. 

Link to post
Share on other sites

13 минут назад, chukcha сказал:

здесь вопрос о десятке тысяч товаров

Т.е. можно упереться просто во время выполнения скрипта и память

Для єтого создать временную таблицу
в которой записывать проверенііе id

SELECT product_id, t_product_id
FROM oc_product
LEFT JION oc_t_product ON product_id = t_product_id
WHERE t_product_id IS NULL

это для того чтобы в случае обрыва - не с 0 стартовать, а от последней записи?
Идея хорошая, но я бы просто ипанул 300 секунд на выполенние скрипта и ждал :)
Учитывая что запросы не особо тяжелые - 10к товаров имхо не составило бы труда за это время проверить)
А если не уложился бы - охренел и разбил бы базу на несколько частей :)
Да-да, ваш покорный слуга еще тот говнокодер :D
 

Link to post
Share on other sites

Итак, все проверил, результаты:

Проход по   ~45000 записей в product с проверкой   file_exists и с занесением в таблицу mySQL ~1500 записей с именем файла  ~1 сек.

Все хорошо. )

Т.е все можно ставить в фоне по крону  и другим скриптом докачивать изображения. 

P.S. Тут еще идея появилась, прятать эти товары  с фронта, пока изображений нет. Ну это если кому надо. ) 

Edited by Pirks
  • +1 1
Link to post
Share on other sites

Мои поздравления :)
Спасибо что отписали, ждал результатов

Link to post
Share on other sites

26 минут назад, Einshtein сказал:

это для того чтобы в случае обрыва - не с 0 стартовать, а от последней записи?

Да..

@Einshtein решение в лоб хоть и не оптимальное, но явное и быстрое
А поиск оптимизации кода может занять недели :)

  • +1 1
Link to post
Share on other sites
10 минут назад, chukcha сказал:

Да..

@Einshtein решение в лоб хоть и не оптимальное, но явное и быстрое
А поиск оптимизации кода может занять недели :)

я в таких вопросах обычно рассуждаю следующим образом
if (нужно быстрое разовое решение) {

  выбираю решение быстрое, топорное, но чтобы быть уверенным что это сработает  в определенных сроках, как например в этом случае если бы был тяжелый запрос - разбил бы базу и все. Тут легко просчитать сколько времени уйдет на работу.
} else {

  сидим и думаем над элегантным решением. Но как ты правильно сказал - над задачей можно часто провозиться не один день и порой оно не нужно, но очень хочется сделать именно так, потому что "тыжпрограммист"

}

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

Link to post
Share on other sites

17 минут назад, Einshtein сказал:

Мои поздравления

Спасибо! )

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.