최신 정보
대량 속성 업데이트를위한 가장 빠르고 안정적인 방법을 찾고 있습니다
속성 또는 제품에 대한 "대량 속성 업데이트"?
여러 속성을 업데이트하는 것은 이미 답변되었지만 제품의 경우 유용 할 수 있습니다 ...
컬렉션에서 제품을 업데이트하려면이 작업을 수행하지 않아야합니다 ...
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/676f3af77fec880bc64333403675d183e8639fae
/**
* 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/issues/16
Mage::getSingleton('catalog/product_action')->updateAttributes(...)
적어도 mutlistore 설정 및 플랫 테이블이 켜져 있지 않은 경우 가장 빠른 방법은 아닙니다 ...
saveAttribute()
$product = Mage::getModel('catalog/product')->load($productId);
$resource = $product->getResource();
$product->setData($attributeCode, $attributeValue);
$resource->saveAttribute($product, $attributeCode);
- 총계 월 시간 (마이크로 초) : 437,787 마이크로 초
- 총계 CPU (마이크로 초) : 423,600 마이크로 초
- 총계 MemUse (바이트) : 4,433,848 바이트
- 총계 PeakMemUse (바이트) : 4,395,128 바이트
- 함수 호출 수 : 25,711
updateAttributes()
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($productId),
array($attributeCode => $attributeValue),
$storeId
);
- 총계 월 시간 (마이크로 초) : 3,676,950 마이크로 초
- 총계 CPU (마이크로 초) : 3,122,064 마이크로 초
- 총계 MemUse (바이트) : 8,174,792 바이트
- 총계 PeakMemUse (바이트) : 8,199,192 바이트
- 함수 호출 수 : 150,132
updateAttributes()
(싱글 톤 리소스)
Mage::getResourceSingleton('catalog/product_action')->updateAttributes(
array($productId),
array( $attributeCode => $attributeValue),
$storeId
);
- 총계 월 시간 (마이크로 초) : 94,155 마이크로 초
- 총계 CPU (마이크로 초) : 48,568 마이크로 초
- 총계 MemUse (바이트) : 1,426,304 바이트
- 총계 PeakMemUse (바이트) : 1,370,456 바이트
- 함수 호출 수 : 2,221