হালনাগাদ
আমি ভর বৈশিষ্ট্য আপডেটের জন্য দ্রুত এবং নির্ভরযোগ্য পদ্ধতিটি খুঁজছি
বৈশিষ্ট্য বা পণ্যগুলির জন্য "গণ গুণাবলী আপডেট"?
ভাবেন একাধিক বৈশিষ্ট্য আপডেট করার উত্তরে উত্তর দেওয়া হয় তবে পণ্যগুলির জন্য এটি দরকারী হতে পারে ...
আপনি যদি সংগ্রহ থেকে পণ্যগুলি আপডেট করতে চান তবে আপনার এটি করা উচিত নয় ...
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(...)
দ্রুততম পদ্ধতি বলে মনে হচ্ছে না ... কমপক্ষে মিউটলিস্টোর সেটআপ এবং ফ্ল্যাট টেবিল চালু না করে ...
saveAttribute()
$product = Mage::getModel('catalog/product')->load($productId);
$resource = $product->getResource();
$product->setData($attributeCode, $attributeValue);
$resource->saveAttribute($product, $attributeCode);
- মোট Incl। ওয়াল সময় (মাইক্রোসেকস): 437,787 মাইক্রোস্যাকস
- মোট Incl। সিপিইউ (মাইক্রোস্যাকস): 423,600 মাইক্রোসেকস
- মোট Incl। মেমুউজ (বাইটস): 4,433,848 বাইট
- মোট Incl। পিকমেমউস (বাইটস): 4,395,128 বাইট
- ফাংশন কলগুলির সংখ্যা: 25,711
updateAttributes()
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($productId),
array($attributeCode => $attributeValue),
$storeId
);
- মোট Incl। ওয়াল সময় (মাইক্রোসেকস): 3,676,950 মাইক্রোসেকস
- মোট Incl। সিপিইউ (মাইক্রোস্যাকস): 3,122,064 মাইক্রোস্যাকস
- মোট Incl। মেমুউজ (বাইটস): 8,174,792 বাইট
- মোট Incl। পিকমেমউস (বাইটস): 8,199,192 বাইট
- ফাংশন কলগুলির সংখ্যা: 150,132
updateAttributes()
(রিসোর্স সিঙ্গলটন)
Mage::getResourceSingleton('catalog/product_action')->updateAttributes(
array($productId),
array( $attributeCode => $attributeValue),
$storeId
);
- মোট Incl। ওয়াল টাইম (মাইক্রোসেকস): 94,155 মাইক্রোসেকস
- মোট Incl। সিপিইউ (মাইক্রোস্যাকস): 48,568 মাইক্রোসেকস
- মোট Incl। মেমুউজ (বাইটস): 1,426,304 বাইট
- মোট Incl। পিকমেমউস (বাইটস): 1,370,456 বাইট
- ফাংশন কলগুলির সংখ্যা: 2,221