5

我正在阅读大量关于 Magento 的 API、Magento 的模型和直接 SQL 调用的文档。当我读到的时候,第一个结论是直接 sql 调用会非常快,但我必须特别注意安全性,模型的使用使开发更快更容易,但另一方面,它会损失大量的性能操作目录。

我将不得不处理一个拥有大约 50k 产品和大量流量的商店,我必须将它们导出到另一个具有类别层次结构、sku、描述、图像、产品名称、url_path 的服务器,然后每小时只获取一次更新的. 最好的方法是直接调用 sql,但是用模型来实现它会是自杀吗?您是否认为将其与 SOAP API 集成将是另一种自杀,我应该在单独的 PHP 中进行此操作吗?

提前超级感谢,我对此感到非常迷茫,并为我糟糕的英语维尼修斯感到抱歉

4

3 回答 3

1

1)50K产品的实时服务器上的soap api会很慢。
2) 由于 EAV 结构,直接 sql 调用编写起来非常麻烦
3) 为了防止实时服务器的占用,获取数据库的只读副本,使用它在本地/另一台服务器上安装 magento。并为此努力。

于 2012-07-05T12:10:41.550 回答
1

这里有很多考虑。我说这个是因为我有类似的问题。我目前正在使用 SQL 将数据从 magento 存储到 xml。确实,只有在您知道要获取的属性的情况下,使用 sql 才能使其更快。例如。如果您的产品有 15 个属性,这意味着使用 sql 有 50k x 15 个属性。但至少您不会遇到版本问题,因为您使用的是 sql 语句。

另一方面...使用模型和 API 会带来很多版本问题,特别是如果您正在为多个 magento 版本进行开发。另一个问题也是关于 magento 自定义属性的。例如。如果我添加另一个名为“US SPECIAL SHIPPING”的属性,API 会变得非常困难。

如果您不介意...您只需对所有属性进行直接 sql 调用并将它们保存到 xml。这意味着您需要非常非常快的机器来执行此操作。

magento connect 上有一个扩展,它服务于比较引擎。它可能适合您的出口需求。尝试一下。价格比较脚本

<?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>'; 
?> 
于 2012-07-05T12:22:29.130 回答
1

将 Magento 产品导出到 Google 购物时,我遇到了完全相同的问题。它总是超时(可能是由于我的提要中有太多产品)。

在对magento exporting进行了一些研究后,我尝试将 php.ini 设置更改为以下值:

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

它工作得很好!

于 2014-06-26T23:39:28.727 回答