Einzelnen Beitrag anzeigen
Alt 21.07.2010, 13:17  
timo_peschka
Neuer Benutzer
 
Registriert seit: 07.08.2009
Beiträge: 17
PHP-Kenntnisse:
Fortgeschritten
timo_peschka befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Speicherproblem bei Massenimport

Hallo!

Ich habe folgendes Problem:

Ich lese aus einer Datenbank ca. 70k Kundendaten aus und füge sie in einen Magentoshop wieder ein. Wer sich ein bisschen mit Magento auskennt, wird die Schreibweise wiedererkennen:
PHP-Code:
$customer Mage::getModel('customer/customer');
... 
Daten setzen
$customer
->save(); 
Das Problem ist nur, dass $customer mit jedem Schleifendurchlauf größer wird und ich die Variable auf Grund von Beziehungen in beide Richtungen mit unset() nicht löschen kann.

Den Speicher erhöhen möchte bzw. kann ich nicht.

Was für alternativen habe ich?

Bereits nach dem 6000. Kunden ist der Speicher voll.


Einmal das ganze Skript
PHP-Code:
$result mysql_query("
    SELECT
        customers_firstname, customers_lastname, customers_email_address,
        customers_password, customers_newsletter
    FROM
        customers"
) or die(mysql_error());

//Magento vars
$storeId Mage::app()->getStore()->getId();

$inserts 100;

$i 0;
$start time();

$x 0;
while (
$row mysql_fetch_assoc($result)) {
    if (
$x <301) {
    if (
$i $inserts) {
        
$customer Mage::getModel('customer/customer');

        
$customer->setFirstname($row['customers_firstname']);
        
$customer->setLastname($row['customers_lastname']);
        
$customer->setEmail($row['customers_email_address']);

        
//Password
        
$customer->setPasswordHash($row['customers_password']);

        
//Newsletter
        
$customer->setIsSubscribed($row['customers_newsletter']);

        
$customer->setStoreId($storeId);
        
$customer->setWebsiteId(1);
        
$customer->setGroupId(1);
        
$customer->setCreatedIn('Admin');

        try {
            
//Ein paar ifs und das customer->save()
        
}
        catch (
Exception $e) {
            
//echo $e->getMessage() . "<br />";
        
}
    }
    else {
        
$i 0;
        
$end time()-$start;
        echo 
"Zeit für " $inserts " Inserts: <strong>" $end "</strong> ";
        echo 
"Memory: " memory_get_usage() . "<br />";

        
$start time();
    }

    
$i++;
    
//print_r($customer);
    
echo memory_get_usage() ."-";
    unset(
$customer); <= kein Effekt
    
echo memory_get_usage()."<br>";
    
set_time_limit(120);
    
flush();

timo_peschka ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten