Ich habe eine externe Datei mit Produktdetails. Ich durchlaufe diese Datei und muss für jedes Produkt in dieser Datei überprüfen, ob das Produkt bereits in Magento vorhanden ist.
Der Wert, der bewertet werden soll, ob das Produkt bereits vorhanden ist, ist ein Attributname und sein Wert.
Also überprüfe ich dies mit (pro Produkt)
$collection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('sku')
->addAttributeToSelect("$supplier_name")
->addAttributeToSelect('production_nr')
->addAttributeToSelect('sku_supplier')
->addAttributeToFilter($supplier_name,array('eq' => $suppliers_product_nr));
Diese Auswahl selbst scheint nicht viel Zeit in Anspruch zu nehmen:
echo 'check: ',round(microtime(true) - $time, 2) , "s<br/>\n";
meldet 0,00 s,
Die Überprüfung, ob es sich um eine leere Sammlung handelt (dh das Produkt in meiner Magento-Datenbank vorhanden ist, dauert ca. 0,34 bis 0,40 Sekunden
$collection->getSize()
In Anbetracht dessen, dass ich mehrere hunderttausend Produkte überprüfen muss. Dies wird sich schnell summieren. Sehr schnell. Ich hatte auf etwas gehofft, das zeitlich eher 0,01 oder weniger entspricht.
Daher suche ich nach dem schnellsten Weg, um zu überprüfen, ob ein Produkt vorhanden ist. Ich habe einiges an Freiheit beim Ändern und Implementieren des Codes. Wenn es also eine völlig andere Art gibt, dieses Problem zu lösen, würde ich gerne davon hören.
Aktualisieren:
Ich habe es leicht geändert, damit ich nicht mit Magento prüfe, ob ein Produkt Produkt für Produkt vorhanden ist, sondern stattdessen eine Reihe aller Produkte erhalte, für die das Attribut geprüft werden muss. Ich benutze dieses Array, um zu überprüfen, ob das Attribut, gegen das geprüft werden soll, existiert.
Dies ist viel schneller, aber ich befürchte, dass dies Auswirkungen auf den Overhead (hauptsächlich RAM oder CPU) haben wird, wenn die Menge der zurückgegebenen Produkte zu groß wird (wir haben ungefähr 40.000 Produkte in unserer Magento-Installation).