Здравствуйте. Мне нужно импортировать в записи большой json файл. Файл весит 500мб и в нем примерно 300 000 записей. Что бы не нагружать оперативную память использую для чтения https://github.com/halaxa/json-machine. Но столкнулся с проблемой, что на обычных хостингах недостаточно лимита на выполнения скрипта. Как можно импортировать такой объем данных в wordpress? Пробовал плагины для импорта по типу wp all import, но они зависают даже не загрузив этот файл. Можно было бы разделить файл и отдельными скриптами загружать эти данные, но этот файл мне нужно обрабатывать раз в неделю. Этот файл на стороннем сервере будет обновляться и должен каждый раз его загружать себе. Может нужно сделать разделение файла на мелкие части и создать так же для каждого json свой php скрипт который будет запускаться рекурсивно, что бы не попадать под лимит выполнения скрипта? Лимит 300 секунд на выполнение
так и сделал. Переехал на vps сервер и уже импортировал 60к записей. Только вот к 50к записей сервер начал работать медленно и перестал грузить сайт. Импорт делаю через wp функция wp_insert_post, он может как то сильно нагружать сервер?
veroni1337, честно никогда не работал на wordpress и вообще негде, всю жизнь только напрямую, база и сайты самописные, скрипты и тп. Остального избегал и всегда искал работу где нужно кодить своё.
По личному опыту импортировать в базу 500 мегабайт, скажем так с готового sql дампа задача очень легкая для любого железа. Если файл JSON который сначала скажем так php скриптом как-то обрабатывать и вставлять в базу по строке - тут зависит конечно, чтобы скрипт был написан человеком с руками из правильного места, иначе может и подвесить любой сервак.
То что переехали на VPS все равно хорошее решение, нет никаких лимитов, php ini можно настраивать.
veroni1337, если задача постоянная, нужно найти "правильного кодера" на фрилансе знакомого со структурой базы wordpress для написания скрипта импорта, так как по хорошему импортировать 300к записей должно быть очень просто. Лично я вижу это элементарной задачей которую выполнит любой карманный пк за несколько минут, но я не знаю как устроена база wordpress и где там что лежит. P.S. Это просто совет а не инструкция.
на шаредах всегда ограничены ресурсы, а WP любит еще и память есть
память вы порешали json-machine, но чудес-то не бывает - меньше памяти? значит - больше процессора
режьте на части, в идеале, если оно по API забирается - частями же и забирать, но тут исходите из ваших условий
т.е это норма что я буду плодить много json файлов, например по 1000 объектов в одном и столько же скриптов, который по выполнению одного будет запускать следующий скрипт файл? Мне кажется где то я не правильно рассуждаю(
Информация к размышлению: как правило у php-cli нет лимита на время выполнения, а у curl нет лимита на размер файла (у ОС - есть). Я так импортировал 2GB xml в базу mysql (правда от php в конце концов пришлось отказаться - тормоз жуткий). К сожалению, не всякий шаред-хостинг подпустит к шеллу.
забыл упомянуть. У меня доступ к консоли есть, но не ssh) Только в браузере могу открыть( Что бы выполнить через команду php, нужно же до выполнения скрипта держать терминал открытым, верно?
У php-cli по умолчанию нет ограничения max_execution_time. Но его, возможно, как-то можно установить, да так, чтобы юзер не смог снять это ограничение. Я не хостер, я не знаю их секретов отравления жизни юзеру. Мой скрипт на хостинге выполнялся больше 2-х часов, правда на выделенном сервере.
нужно же до выполнения скрипта держать терминал открытым, верно?
В общем случае - не обязательно. См. https://ru.wikipedia.org/wiki/Nohup Но опять же, не факт, что хостер не предпринял меры против злоупотреблений.
veroni1337, можете кроном дергать скрипт. Будет использоваться cli без лимитов. Можно предварительно забрать файл. Могу дать код, грузит файл не обращая на лимиты Как загрузить большой файл на сервер по ссылке? до 2 гб без проблем, даже на дёшевом хостинге
в итоге переехал на vps и запустил свой импорт записей на основе wp функции wp_insert_post, к 50к записей сервер начал тупить и выдавать ошибку 502. Вы делали импорт случайно не на wp? Может мой скрипт как то нагружает сильно? Через htop на сервере не заметил нехватки ресурсов, все было нормально
Да, я собирался делать всё на WP (привычка, знаете ли). Потом оценил масштаб и сделал импорт на голом php, отложив WP для передка. Но оно и без WP тормозило, и я переделал импорт на bash/curl/mysql. А потом одним нехорошим зимним утром вдруг стало совсем не до того.
Вордпресс уже давно не считается легким движком, увы :( Если импортируется не родная вордпрессовская таблица, то imho проще ее импортировать рядом, а в WP подтягивать на лету.
veroni1337, в последней версии, которая вообще без php, минут двадцать. С php — несколько часов. К сожалению, ни логов, ни исходников, чтобы повторить эксперимент, не сохранилось. Напомню, это миллионы записей.
да, в джсон массив объектов и объектов 300к. Только мне не подходит ручное разделение. Мне нужно сделать так, что бы скрипт полностью прошелся по массиву и каждый объект загнал в базу через функции вордпресса
Всем спасибо за ответы. В итоге переехал на vps сервер. Так же на wordpress установил плагин cavalcade https://github.com/humanmade/Cavalcade, для устойчивой работы с wp cron. Написал свой небольшой скрипт, который помощью библиотеки https://github.com/halaxa/json-machine читает файл с массивом объектов не нагружая оперативную память. Затем просто создаю запись на основе полученных данных