Magento - 我应该在午夜进行大约 5k 的大规模更新还是在一天内多次分开



我正在使用magento EE 1.14.2.1.我在数据库中有大约50k个产品。我只是想要一些关于更新产品的有用建议。

正如我在标题中提到的,每天我都有大约 5k 产品需要更新库存和价格。所以,我应该在午夜做,然后一次重新索引它们,还是打开企业刷新索引cron并在一天内多次更新产品(每次约100个产品)。我协调的最重要的事情是网站性能和避免MySQL死锁。

这里有一个选项。我有一个import.php脚本,用于导入或更新大量产品及其属性。它将允许您根据SKU更新或创建产品。您必须检查常量以查看它们是否与您的Magento匹配。

这是社区版的脚本,因此您必须针对企业版进行测试。

<?php
include_once("app/Mage.php");
Mage::app();
umask(0);
Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));
$counter = 0;
function GetProduct($sku)
{
    global $counter;
    echo $sku;
    $p = Mage::getModel('catalog/product');
    $productId = $p -> getIdBySku($sku);       
    if($productId)
    {
        echo "!";
        $p -> load( $productId );
    }
    else
    {
        $p->setTypeId('simple');
        $p->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH); 
        $p->setStatus(1);
        $p->setTaxClassId(7);
        $p->setWebsiteIDs(array(1)); 
        $p->setStoreIDs(array(1)); 
        $p->setAttributeSetId(4);
        $p->setSku($sku);
    }
    echo "...";
    $counter++;
    echo " ".$counter;
    return $p;
}
function SaveProduct($p)
{
    try
    {
        if (is_array($errors = $p->validate()))
        {
            $strErrors = array();
            foreach($errors as $code=>$error)
            {
                $strErrors[] = ($error === true)? Mage::helper('catalog')->__('Attribute "%s" is invalid.', $code) : $error;
                echo $strErrors[0];
            }
            $this->_fault('data_invalid', implode("n", $strErrors));
        }
        $p->save();
        echo "n";
    }
    catch (Mage_Core_Exception $e)
    {
        $this->_fault('data_invalid', $e->getMessage());
    }
}

$product = GetProduct('SKU01'); $product->setData('upc', '013051388461'); SaveProduct($product); unset($product);
$product = GetProduct('SKU02'); $product->setData('special_price', null); $product->setData('special_from_date', null); SaveProduct($product); unset($product);
$product = GetProduct('SKU03'); $product->setData('cardboard_height_cm', 28.5); $product->setData('cardboard_width_cm', 37); SaveProduct($product); unset($product);

?>

我经常让 Excel 创建像 $product = GetProduct('SKU03'); $product->setData('cardboard_height_cm', 28.5); $product->setData('cardboard_width_cm', 37); SaveProduct($product); unset($product); 这样的行,然后复制并粘贴到脚本中。我可以在运行前进行编辑。

这比导入 CSV 快得多,它会调用所有正确的观察者。

只需从 SSH 外壳运行即可。

最新更新