Как мне импортировать товары в Magento, используя прямое соединение с базой данных - PullRequest
5 голосов
/ 21 октября 2010

У меня есть около 50.000 записей для импорта в магазине Magento. Что я уже тестировал: Файл составляет около 50 МБ.

  • Сплит-файлы
  • API
  • Magento Classes

Разделение файла не повышает скорость импорта товаров. Api очень медленные. Классы 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 для добавления нового продукта?

Ответы [ 4 ]

3 голосов
/ 06 декабря 2011

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

$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();
}
3 голосов
/ 21 октября 2010

Я настоятельно рекомендую избегать написания необработанного SQL любой ценой, почти наверняка вы потратите дни и дни на написание, чтобы сопоставить идентификаторы атрибутов и, возможно, ошибетесь.Это также обойдет все важные индексации и другие системные обновления, на которые опирается Magento.

Если скорость - ваша проблема, я предлагаю вам рассмотреть uRapidFlow от Unirgy.Применяются обычные заявления об отказе от ответственности, я не имею никакого отношения к Unirgy, но, по моим наблюдениям, качество этой работы превосходное.

HTH, JD

2 голосов
/ 21 октября 2010

Очень сложно создавать продукты, используя необработанные запросы SQL, потому что Magento использует шаблон EAV для хранения продуктов.

1 голос
/ 22 октября 2010

Иногда я замечал массовые вставки, которые работают, сначала создав шаблонную модель ...

$blankProduct = Mage::getModel('catalog/product');

... затем избегая создания модели для каждой записи ...

$newProduct = clone $blankProduct;
$newProduct->setIsMassupdate(true)
    ...
$newProduct->save();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...