2012-07-05 11 views
5

Estoy leyendo una tonelada de documentos sobre API de Magento, modelos de Magento y llamadas directas de SQL. Mientras lo leía, la primera conclusión es que las llamadas directas a SQL serían mucho más rápidas, pero debo prestar especial atención a la seguridad, y el uso de modelos hace que el desarrollo sea más rápido y más fácil, pero por otro lado, pierde rendimiento manipulando enormemente. catálogos.Cuál es la mejor manera de exportar grandes catálogos de Magento

Tendré que ocuparme de alrededor de 50k de productos & de mucho tráfico, y debo exportarlos a otro servidor con categoría jerarquía, sku, descripción, imagen, nombre del producto, url_path una vez y después de obtener solo la actualización unos una vez por hora. El mejor enfoque sería con llamadas sql directas, pero ¿sería un suicidio hacerlo con modelos? ¿Y crees que integrarlo con la API de SOAP será otro suicidio, y debería hacerlo en un PHP separado para hacer esto?

Súper gracias de antemano, estoy muy perdido en esto, y lo siento por mi mala Inglés Vinicius

+0

"¿Será un suicidio?" - ¡Ya veo que ya tienes experiencia en magento! : D – dmp

+0

¡no te olvides de las imágenes también! – dmp

Respuesta

1

Aquí hay muchas consideraciones. Estoy hablando de esto porque tengo un problema similar. Actualmente estoy usando SQL para obtener los datos de magento store en xml. Realmente, usar sql puede hacerlo más rápido SÓLO si conoce los atributos que está buscando. p.ej. si sus productos tienen 15 atributos, eso significa 50k x 15 atributos usando sql. Pero al menos estarás libre de problemas de versión porque estás usando sentencias SQL.

Por otro lado ... el uso de modelos y API ofrece una gran cantidad de problemas de versión, especialmente si está desarrollando varias versiones de magento. Otro problema también es sobre los atributos personalizados de magento. P.ej. Si agrego otro atributo llamado 'ENVÍO ESPECIAL DE EE. UU.', Se vuelve bastante difícil con la API.

Si no te importa ... simplemente haz una llamada directa a sql a todos tus atributos y guárdalos en xml. Eso significa que necesita una máquina muy muy rápida para hacer esto.

Hay una extensión en magento connect que sirve para motores de comparación. Puede ajustarse a sus necesidades de exportación. intentalo. price comparison script

<?php 

set_time_limit(3000); 
ini_set('memory_limit', '-1'); 
include_once 'app/Mage.php'; 
umask(0); 
Mage::app(); 
$products = Mage::getModel('catalog/product')->getCollection(); 
$products->addAttributeToSelect('*'); 
$products->load(); 
$baseUrl = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);      
    $output = '<?xml version="1.0" encoding="utf-8"?> 
    <products>'; 
if (count($products)): 

    foreach ($products as $id => $product): 

    $url = $product->getProductUrl(); 
    $output .= ' 
    <product> 
    <id>'. $product['entity_id'].'</id> 
    <name><![CDATA['. $product['name'] .']]></name> 
    <sku>'. $product['sku'] .'</sku> 
    <description><![CDATA['. $product['description'] .']]></description> 
    <shortdescription><![CDATA['. $product['short_description'] .']]></shortdescription> 
    <price><![CDATA['. $product['price'] .']]></price> 
    <minimalprice>'. $product['minimal_price'] .'</minimalprice> 
    <weight><![CDATA['. $product['weight'] .']]></weight> 
    <categories><![CDATA['. $product['categories'] .']]></categories> 
    <color><![CDATA['. $product['color'] .']]></color> 
    <condition><![CDATA['. $product['condition'] .']]></condition> 
    <availability><![CDATA['. $product['availability'] .']]></availability> 
    <shipping><![CDATA['. $product['shipping'] .']]></shipping> 
    <url><![CDATA['. $url.']]></url> 
    <meta><![CDATA['. $product['meta_keyword'] .']]></meta> 
    <metadescription><![CDATA['. $product['meta_description'] .']]></metadescription> 
    <manufacturer><![CDATA['. $product['manufacturer'] .']]></manufacturer> 
    <brand><![CDATA['. $product['brand'] .']]></brand> 
    <upc><![CDATA['. $product['upc'] .']]></upc> 
    <mpn><![CDATA['. $product['mpn'] .']]></mpn> 
    <image><![CDATA['. $baseUrl ."media/catalog/product". $product['image'] .']]>  </image>'; 
    if (isset($attributes[$product['entity_id']])) { 
    $output .= ' 
    <attributes>'; 
    foreach ($attributes[$product['entity_id']] as $attribute => $values) 
    $output .= ' 
    <attribute> 
    <name>'. $attribute .'</name> 
     <values>'. join(', ', $values) . '</values> 
    </attribute>'; 
    $output .= ' 
</attributes>'; 
    } 

$output .= ' 
</product>'; 
endforeach; 
endif; 
header ("Content-Type: text/xml; charset=ISO-8859-1"); 
print $output .= ' 
</products>'; 
?> 
+0

¡Gracias por tu respuesta! Estaba probando la sobrecarga del servidor y sería muy fácil consumir recursos para hacerlo todo a la vez, ya que el servidor ya tiene un gran acceso cada vez.Así que mi idea era hacer un guión usando modelos como el otro tipo mencionado, porque hacer llamadas directas a SQL será difícil ya que tendré que lidiar con muchas versiones diferentes de Magento y quiero que funcione con el próximo futuro actualizaciones sin tener que preocuparse también. Así que lo haré más interactivo al obtener solo los datos que usaré en ese momento, y luego lo almacenaré en el servidor de terceros y solo cuando caduque –

+0

Volveré a solicitar estos datos al servidor. –

+0

¡Gran solución! ¿Cómo voy a hacer esto en un archivo CSV? – Ismailp

1

1) API SOAP a través de servidor en vivo para 50K productos será muy lenta.
2) las llamadas sql directas serían muy engorrosas de escribir debido a la estructura EAV
3) para evitar acaparar el servidor activo, tomar una réplica de lectura de la base de datos, usarla para instalar magento en local/otro servidor. y trabaja en eso.

+0

Lo tomé en cuenta, y usaré modelos en un PHP separado en su lugar. ¡Gracias! –

1

que tenían el mismo problema al exportar mis productos de Magento a Google Shopping. Siempre se agotó el tiempo de espera (probablemente debido a tener demasiados productos en mi alimentación).

Después de hacer algunas investigaciones en magento exporting, He intentado cambiar mi configuración de php.ini a estos valores:

ini_set(’max_execution_time’,’1800’); 
ini_set(’memory_limit’,’1024M’); 

y funcionó perfectamente!

Cuestiones relacionadas