2012-07-05 25 views
5

Tôi đang đọc một tấn tài liệu về API của Magento, Mô hình của Magento và các cuộc gọi SQL trực tiếp. Như tôi đã đọc, kết luận đầu tiên là các cuộc gọi sql trực tiếp sẽ nhanh hơn nhưng tôi phải đặc biệt quan tâm đến bảo mật và việc sử dụng các mô hình giúp phát triển nhanh hơn và dễ dàng hơn nhưng mặt khác, nó mất hiệu suất thao tác rất lớn danh mục.Cách tốt nhất để xuất danh mục Magento lớn

Tôi sẽ phải xử lý một cửa hàng với khoảng 50k sản phẩm & lưu lượng truy cập lớn và tôi phải xuất chúng sang máy chủ khác với phân cấp danh mục, sku, mô tả, hình ảnh, product_name, url_path một lần và sau khi chỉ nhận được cập nhật những người một lần một giờ. Cách tiếp cận tốt nhất sẽ là với các cuộc gọi sql trực tiếp, nhưng nó sẽ là một vụ tự tử để làm cho nó với các mô hình? Và bạn có nghĩ rằng việc tích hợp nó với API SOAP sẽ là một vụ tự sát khác, và tôi nên tạo nó trong một PHP riêng biệt để làm điều này?

Siêu cảm ơn trước, tôi đang rất mất tại này, và xin lỗi vì xấu của tôi Anh Vinicius

+0

"nó sẽ là một vụ tự sát" - Tôi thấy bạn cũng đã có kinh nghiệm với Magento rồi! : D – dmp

+0

cũng đừng quên hình ảnh! – dmp

Trả lời

1

Có nhiều cân nhắc ở đây. Tôi đang nói về điều này bởi vì tôi có một vấn đề tương tự. Tôi hiện đang sử dụng SQL để lấy dữ liệu từ cửa hàng magento đến xml. Thật không may, bằng cách sử dụng sql có thể làm cho nó nhanh hơn CHỈ nếu bạn biết các thuộc tính bạn đang tìm nạp. ví dụ. nếu sản phẩm của bạn có 15 thành viên, điều đó có nghĩa là 50k x 15 thuộc tính sử dụng sql. Nhưng ít nhất bạn sẽ được miễn phí từ các vấn đề phiên bản bởi vì bạn đang sử dụng câu lệnh sql.

Mặt khác ... sử dụng các mô hình và API cung cấp rất nhiều vấn đề về phiên bản đặc biệt nếu bạn đang phát triển cho một số phiên bản Magento. Một vấn đề khác nữa là về các thuộc tính tùy chỉnh của Magento. Ví dụ. Nếu tôi thêm một thuộc tính khác gọi là 'US SPECIAL SHIPPING', nó trở nên khá khó khăn với API.

Nếu bạn không phiền ... bạn chỉ cần thực hiện cuộc gọi sql trực tiếp đến tất cả các thuộc tính của bạn và lưu chúng vào xml. Điều đó có nghĩa là bạn cần máy rất nhanh để làm điều này.

Có phần mở rộng trên kết nối Magento phục vụ các công cụ so sánh. Nó có thể phù hợp với của bạn xuất khẩu neeeds. thử nó. 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

Cảm ơn câu trả lời của bạn! Tôi đã thử nghiệm các chi phí máy chủ và nó sẽ là quá tài nguyên ăn để làm điều đó tất cả cùng một lúc, như máy chủ đã có một truy cập nặng mọi lúc.Ý tưởng của tôi là tạo kịch bản bằng cách sử dụng các mô hình như người khác đã đề cập, vì việc thực hiện các cuộc gọi sql trực tiếp sẽ khó khăn vì tôi cần phải giải quyết rất nhiều phiên bản Magento khác nhau và tôi muốn làm việc đó với tương lai tiếp theo cập nhật mà không phải lo lắng quá. Vì vậy, tôi sẽ làm cho nó tương tác hơn bằng cách chỉ nhận dữ liệu mà tôi sẽ sử dụng vào thời điểm đó, và sau đó lưu nó vào máy chủ của bên thứ ba và chỉ khi nó hết hạn –

+0

Tôi sẽ yêu cầu lại dữ liệu này cho máy chủ. –

+0

Giải pháp tuyệt vời! Làm thế nào tôi sẽ đi về để làm cho điều này vào một tập tin CSV? – Ismailp

1

1) xà phòng api trên máy chủ trực tiếp cho sản phẩm 50K sẽ rất chậm.
2) cuộc gọi sql trực tiếp sẽ rất cồng kềnh để viết vì cấu trúc EAV
3) để ngăn chặn việc hogging máy chủ trực tiếp, đọc bản sao của cơ sở dữ liệu, sử dụng nó để cài đặt magento trên máy chủ cục bộ/máy chủ khác. và làm việc trên đó.

+0

Tôi đã ghi nhớ điều này, và tôi sẽ sử dụng các mô hình trong một PHP riêng biệt để thay thế. Cảm ơn! –

1

Tôi gặp sự cố tương tự khi xuất sản phẩm Magento của mình sang Google Mua sắm. Nó luôn luôn hết thời gian (có lẽ do có quá nhiều sản phẩm trong nguồn cấp dữ liệu của tôi).

Sau khi thực hiện một số nghiên cứu vào magento exporting, tôi đã cố gắng thay đổi cài đặt php.ini của tôi để các giá trị:

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

và nó làm việc một cách hoàn hảo!

Các vấn đề liên quan