У меня около 50 000 записей для импорта в магазине Magento. Что я уже тестировал: файл составляет около 50 МБ.
Разделение файла не улучшает скорость импорта продуктов. Апи очень медленные. Классы Magento медленны.
Это отлаженный код с использованием классов Magento:
// Build the product $product->setIsMassupdate(true) ->setExcludeUrlRewrite(true) ->setManufacturer($this->addManufacturers(utf8_encode($record[4]))) ->setSku($record[3]) ->setAttributeSetId($this->attribute_set)# 9 is for default ->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE) ->setName(utf8_encode($record[5])) ->setCategoryIds($this->getCategories(array($record[0], $record[1], $record[2]))) # some cat id's, ->setWebsiteIDs(array(1)) # Website id, 1 is default ->setDescription(utf8_encode($record[6])) ->setShortDescription($this->shortText(utf8_encode($record[6]), 150)) ->setPrice($price) # Set some price ->setSpecialPrice($special_price) ->setWeight($record[12]) ->setStatus( Mage_Catalog_Model_Product_Status::STATUS_ENABLED ) ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) ->setTaxClassId(2) // default tax class ->setPixmaniaimg($record[10]) ->setStockData(array('is_in_stock' => $inStock, 'qty' => $qty)) ->setCreatedAt(strtotime('now')); $product->save(); $ID = is_numeric($productID) ? $productID : $product->getId();
Таким образом, вышеуказанный метод является правильным, но он тратит около 5 часов, чтобы вставить только 2300 записей!
Какие простые вставки SQL, которые я должен выполнить в БД Magento, чтобы добавить новый продукт?
Я настоятельно рекомендую вам избегать написания необработанного SQL любой ценой, вы почти наверняка потратите дни и дни на запись, чтобы сопоставить идентификаторы атрибутов и, вероятно, ошибаетесь. Он также обходит все важные индексирования и другие обновления системы, на которые опирается Magento.
Если скорость ваша проблема, я предлагаю вам рассмотреть uRapidFlow от Unirgy. Обычные заявления об отказе от ответственности применяются, я не имею отношения к Unirgy, но, по моим наблюдениям, качество этой работы превосходно.
HTH, JD
Если вы отключите индексатор во время загрузки, а затем снова включите и запустите его, он должен улучшить время загрузки.
$indexer = Mage::getSingleton('index/indexer'); $indexer->lockIndexer(); // ... run your processing ... $indexer->unlockIndexer(); // Reindex everything $processes = $indexer->getProcessesCollection(); foreach ($processes as $process) { // echo 'Processing: ' . $process->getIndexerCode() . "n"; $process->reindexEverything(); }
Очень сложно создавать продукты с использованием необработанных SQL-запросов, поскольку Magento использует шаблон EAV для хранения продуктов.
Иногда я заметил массивные вставки, которые работают, сначала создавая модель шаблона …
$blankProduct = Mage::getModel('catalog/product');
… затем избегайте создания модели для каждой записи …
$newProduct = clone $blankProduct; $newProduct->setIsMassupdate(true) ... $newProduct->save();
Это немного более эффективно, но, вероятно, недостаточно, чтобы получить этот массовый импорт в разумные сроки.