- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть скрипт который должен сформировать базу Джумлы, по сути обновляет таблицу контент + зависимости в таблицах assets и associations. Данные для обновления скрипт берет из соседней базы.
Так вот, все это запущено в ssd впс с 4 ядрами и 16 Г оперативки. И заканчивает работу скрипт за 10 часов !!!. (за это время он добалвяет примерно 20.000 записей)
Его работу мне нужно будет повторить еще 10 раз я не могу понять ПОЧЕМУ БЛИН ТАК ДОЛГО???
Думал медленные запросы, включил логирование.... ну да, был один запрос. Так как запросы АПТДЕЙТ, то удалил индексы с таблицы assets и запросы пропали, но все равно - в секунду добавляется 1 запись а то и меньше!!
Посмотрите плиз код в приложенном файле - что там может так тупить?
Dram,
Так-то у Вас определенно чертовски много запросов.
Не, понятно что все красиво, через АПИ и отдельные функции.
Но по факту Вы на каждый чих совершаете туеву хучу операций.
Вы даже 191 категорию и то не за один раз выбираете все, а на каждую отдельный запрос делаете.
Что уж говорить о тэгах, альясах, связях и т.д., по каждой отдельной у Вас проверка, создание, апдейт, запись.
Когда можно было бы выбирать "чохом" группу данных, а не по одиночке дергать.
По любому уменьшение количества запросов поможет.
Самый простой путь - выберите все категории, тэги, альясы или что там еще прямо в скрипт. Лишнего г-на не выбирайте, только необходимые данные (память жалко). При чем для этого понадобится буквально десяток запросов и Вы избавитесь от необходимости потом делать каждый раз новый запрос когда Вам понадобятся данные, они у Вас уже будут под рукой.
В остальном посоветовать что-то тяжело, Вам надо просто подебажить немного. Если нет возможности подключить внешний дебаггер который покажет где именно максимум времени выполнения (в каких функциях, с учетом количества раз вызова), понатычьте вместо этих pring pre кучу echo microtime и смотрите где уходит максимум времени - там и ищите проблему.
Но в любом случае, количество запросов надо уменьшать.
То что сейчас в скрипте - это годится для работы с единицами информации, для групповой работы надо писать так, что бы оно умело группово обрабатывать, а не каждую единицу отдельно.
p.s.: если у вас вдс, почему Вы коннектитесь через ИП:порт? Коннектитесь через сокеты, это быстрее, а при большом количестве запросов намного быстрее.
Есть скрипт .... ну да, был один запрос ... но все равно - в секунду добавляется 1 запись а то и меньше!!
В скрипте на первый взгляд 🍻 не видать того, что на 10 часов
А почему, кстати, 191 ( public function importProducts(){ for($g = 1; $g < 191; $g++){ ), а если их 291 или 2?
Вот тут намекают что можно как то так:
$a = array(
1=>array(':id'=>1),
2=>array(':id'=>2),
....
291=>array(':id'=>291),
)
$db->t('select `rowid`, `catid`, `name` from `cats` where `id` = :id ;', $a)->rows();
Дело только за тем, чтобы функция t($sql, $array) класса который скрывается за $db (вероятно надстройка над pdo или extends pdo) используя PDO->prepare ( string $statement [, array $driver_options = array() ] ) и еще несколько методов быстро вставила массив в базу данных. На sqlite, офигенный выигрыш, на mysql - "зависит".
В мануале нет прямой реализации, t() только лишь фантазия, которая успешно работает лет 5 наверное. Пиарю подготовленные запросы и прямую выгоду о этого
UP/ Выигрыш и "зависит" однозначно в плюс для запросов UPDATE, для других тоже неплохо.