Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте.
Задача примитивная, и сам вопрос не от том "как это сделать", а о том, хватит ли памяти.
Есть дамп в xml. размер ~4 мб (50к товаров). Собираюсь скормить этот дамп simplexml-ю. А затем, полученный массив в цикле занести в базу. Что то типо
foreach($xmlDump as $item)
{
Model::create([
'name' => $item['name'],
'tags' => $item['tags'],
...
]);
}
На сервере всего 512 мб оперативы. Памяти хватит для этого?
Не в сети
Память для акселераторов PHP - 128 мб
--
1с пульнул на сервер import и offers c ~9 000 товарами. Правда xml-ники эти весят каждый по ~15мб. (У вас почему-то меньше)
Далее...
set_time_limit(0); // На всякий случай
$xml = simplexml_load_file(import/offers);
....
foreach ($xml->Каталог->Товары->Товар as $product) {
$data['name'] = (string)$product->Наименование;
...
Product::updateOrCreate(
['1c_id' => (string)$product->Ид],
$data
);
}
Полет нормальный...
--
Фиг знает, что будет с 50к товарами.
Если не прокатит, то можно попробовать порциями загружать.
Бежать по xml и хранить в сессии номер итерации.
Допустим, на 1000 итерации или по max_execution_time обрывать скрипт, запускать заново и вставлять записи в базу начиная с сохраненной итерации.
Не в сети
Память для акселераторов PHP - 128 мб
--
1с пульнул на сервер import и offers c ~9 000 товарами. Правда xml-ники эти весят каждый по ~15мб. (У вас почему-то меньше)Далее...
set_time_limit(0); // На всякий случай $xml = simplexml_load_file(import/offers); .... foreach ($xml->Каталог->Товары->Товар as $product) { $data['name'] = (string)$product->Наименование; ... Product::updateOrCreate( ['1c_id' => (string)$product->Ид], $data ); }
Полет нормальный...
--
Фиг знает, что будет с 50к товарами.Если не прокатит, то можно попробовать порциями загружать.
Бежать по xml и хранить в сессии номер итерации.
Допустим, на 1000 итерации или по max_execution_time обрывать скрипт, запускать заново и вставлять записи в базу начиная с сохраненной итерации.
Спасибо за подробный ответ. В дампе 5к товаров, а не 50. Это я очепятку сделал) буду пробовать.
Не в сети
Страницы 1