Ok để cắt ngắn báo cáo_viewed_product_index


12

Tôi đã đọc qua danh sách các bảng có thể cắt ngắn ( /programming/12205714/list-of-tables-to-safely-truncate-in-magento ) và tôi đã không thấy

report_viewed_product_index

Bảng này rất lớn và phải mất một thời gian rất dài để khôi phục cơ sở dữ liệu. Có an toàn để cắt bớt dữ liệu này hoặc ít nhất là loại bỏ dữ liệu cũ nhất?


1
Câu hỏi thú vị, btw. Tôi đã tự hỏi tương tự một thời gian trước đây :)
Anna Völkl

Câu trả lời:


17

Theo như tôi có thể thấy / biết bảng này được bao gồm trong sự kiện log_log_clean_after.

Nếu bạn xem dưới tệp app/code/core/Mage/Reports/etc/config.xmlbạn sẽ thấy đoạn trích sau.

<events>
    <log_log_clean_after>
        <observers>
            <reports>
                <class>reports/event_observer</class>
                <method>eventClean</method>
            </reports>
        </observers>
    </log_log_clean_after>
</events>

Phương pháp này chỉ đơn giản là làm sạch tất cả các sự kiện báo cáo và sau đó các sản phẩm được xem và so sánh các bảng.

public function eventClean(Varien_Event_Observer $observer)
{
    /* @var $event Mage_Reports_Model_Event */
    $event = Mage::getModel('reports/event');
    $event->clean();

    Mage::getModel('reports/product_index_compared')->clean();
    Mage::getModel('reports/product_index_viewed')->clean();

    return $this;
}

Nếu bạn chắc chắn rằng bạn đã thiết lập cron logClean thì các báo cáo cũng sẽ được xóa sạch với nó.


Câu trả lời hay, David :)
Anna Völkl

12

Tôi đã đặt một số nghiên cứu trong thời gian này trước đây vì chúng tôi cũng có vấn đề với bảng đó. report_viewed_product_indexđược sử dụng cho các sản phẩm được xem gần đây. Nếu bạn không sử dụng tính năng này: Đi và cắt ngắn :-)

Nếu bạn sử dụng chức năng xem sản phẩm gần đây, hãy kiểm tra xem cron của bạn đã được thiết lập đúng chưa. Các mục nhập cho khách truy cập không còn tồn tại trong log/visitorbảng nên được xóa tự động tại log_log_clean_aftersự kiện.

Phương pháp sạch được kế thừa Mage_Reports_Model_Resource_Product_Index_Viewedtừ Mage_Reports_Model_Resource_Product_Index_Abstractnơi điều này xảy ra.

/**
 * Clean index (visitor)
 *
 * @return Mage_Reports_Model_Resource_Product_Index_Abstract
 */
public function clean()
{
while (true) {
    $select = $this->_getReadAdapter()->select()
        ->from(array('main_table' => $this->getMainTable()), array($this->getIdFieldName()))
        ->joinLeft(
            array('visitor_table' => $this->getTable('log/visitor')),
            'main_table.visitor_id = visitor_table.visitor_id',
            array())
        ->where('main_table.visitor_id > ?', 0)
        ->where('visitor_table.visitor_id IS NULL')
        ->limit(100);
    $indexIds = $this->_getReadAdapter()->fetchCol($select);

    if (!$indexIds) {
        break;
    }

    $this->_getWriteAdapter()->delete(
        $this->getMainTable(),
        $this->_getWriteAdapter()->quoteInto($this->getIdFieldName() . ' IN(?)', $indexIds)
    );
}
return $this;
}

không quá tệ một câu trả lời cho chính mình;)
David Manners

Hmm, chúng tôi có rất nhiều hồ sơ với visitor_id là NULL trong báo cáo_viewed_product_index - có vẻ như những hồ sơ này sẽ không bị xóa
Jiří Chmiel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.