अपडेट करें
मैं बड़े पैमाने पर विशेषता अद्यतन के लिए सबसे तेज़ और विश्वसनीय विधि की तलाश कर रहा हूं
विशेषताओं या उत्पादों के लिए "मास विशेषता अद्यतन"?
लगता है कि कई विशेषताओं को अद्यतन किया गया है, लेकिन इसका उपयोग उपयोगी हो सकता है ...
यदि आप संग्रह से उत्पादों को अद्यतन करना चाहते हैं, तो आपको ऐसा नहीं करना चाहिए ...
foreach ($collection as $product) {
$product->setSomeData(...);
# not here
$product->save();
}
यह घटनाओं को फिर से भेजेगा, प्रिस्क्रिप्शन और सूचकांकों का पुनर्निर्माण करेगा। इसके साथ कोई घटना (और कुछ अन्य चीजें) छोड़ दी जाती हैं और बहुत तेज होती हैं।
foreach ($collection as $product) {
$product->setSomeData(...);
}
$collection->save();
भविष्य के अद्यतन से बचने के लिए, आप जोड़ सकते हैं ...
$product->setIsMassupdate(true);
मक्खी पर रेनडेक्स को निष्क्रिय / सक्षम करने के लिए इस पर एक नज़र डालें ... https://github.com/Flagbit/Magento-ChangeAttributeSet/commit/676f3af77fec880bc64333n367536183e8639fae
/**
* Set indexer modes to manual
*/
private function _storeRealtimeIndexer()
{
$collection = Mage::getSingleton('index/indexer')->getProcessesCollection();
foreach ($collection as $process) {
if($process->getMode() != Mage_Index_Model_Process::MODE_MANUAL){
$this->_index[] = $process->getIndexerCode();
$process->setData('mode', Mage_Index_Model_Process::MODE_MANUAL)->save();
}
}
}
/**
* Restore indexer modes to realtime an reindex product data
*/
private function _restoreRealtimeIndexer()
{
$reindexCodes = array(
'catalog_product_attribute',
'catalog_product_flat'
);
$indexer = Mage::getSingleton('index/indexer');
foreach ($this->_index as $code) {
$process = $indexer->getProcessByCode($code);
if (in_array($code, $reindexCodes)) {
$process->reindexAll();
}
$process->setData('mode', Mage_Index_Model_Process::MODE_REAL_TIME)->save();
}
}
और बड़े पैमाने पर (उत्पाद) अद्यतन से पहले कैश फ्लशिंग भी प्रदर्शन को बढ़ा सकता है ...
Mage::app()->getCacheInstance()->flush();
डिबगिंग के कुछ नंबर यहां: https://github.com/Flagbit/Magento-ChangeAttributeSet//ues/16
Mage::getSingleton('catalog/product_action')->updateAttributes(...)
लगता है सबसे तेज़ तरीका नहीं है ... कम से कम नहीं म्यूटलिस्टोर सेटअप और फ्लैट टेबल चालू होने के साथ ...
saveAttribute()
$product = Mage::getModel('catalog/product')->load($productId);
$resource = $product->getResource();
$product->setData($attributeCode, $attributeValue);
$resource->saveAttribute($product, $attributeCode);
- टोटल इंक्ल। दीवार समय (microsec): 437,787 microsecs
- टोटल इंक्ल। CPU (microsecs): 423,600 microsecs
- टोटल इंक्ल। मेम्यूज़ (बाइट्स): 4,433,848 बाइट्स
- टोटल इंक्ल। पीकम्यूसे (बाइट्स): 4,395,128 बाइट्स
- फ़ंक्शन कॉल की संख्या: 25,711
updateAttributes()
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($productId),
array($attributeCode => $attributeValue),
$storeId
);
- टोटल इंक्ल। दीवार समय (microsec): 3,676,950 microsecs
- टोटल इंक्ल। CPU (microsecs): 3,122,064 microsecs
- टोटल इंक्ल। मेम्यूज़ (बाइट्स): 8,174,792 बाइट्स
- टोटल इंक्ल। पीकममूसे (बाइट्स): 8,199,192 बाइट्स
- फ़ंक्शन कॉल की संख्या: 150,132
updateAttributes()
(संसाधन सिंगलटन)
Mage::getResourceSingleton('catalog/product_action')->updateAttributes(
array($productId),
array( $attributeCode => $attributeValue),
$storeId
);
- टोटल इंक्ल। दीवार समय (माइक्रोसेक): 94,155 माइक्रोसैक
- टोटल इंक्ल। CPU (microsecs): 48,568 microsecs
- टोटल इंक्ल। मेम्यूज़ (बाइट्स): 1,426,304 बाइट्स
- टोटल इंक्ल। PeakMemUse (बाइट्स): 1,370,456 बाइट्स
- फ़ंक्शन कॉल की संख्या: 2,221