ตกลงเพื่อตัดทอนรายงาน _viewed_product_index


12

ฉันอ่านรายชื่อของตารางที่สามารถตัดทอนได้ ( /programming/12205714/list-of-tables-to-safely-truncate-in-magento ) และไม่เห็น

report_viewed_product_index

ตารางมีขนาดใหญ่มากและใช้เวลานานในการกู้คืนฐานข้อมูล ปลอดภัยไหมที่จะตัดทอนข้อมูลนี้หรือลบข้อมูลที่เก่าที่สุดอย่างน้อยที่สุด?


1
คำถามที่น่าสนใจ btw ฉันสงสัยในเวลาเดียวกัน :)
Anna Völkl

คำตอบ:


17

เท่าที่ผมเห็น / log_log_clean_afterไม่ทราบว่าตารางนี้จะรวมอยู่ในเหตุการณ์

หากคุณดูใต้ไฟล์app/code/core/Mage/Reports/etc/config.xmlคุณจะเห็นตัวอย่างต่อไปนี้

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

วิธีนี้จะล้างข้อมูลเหตุการณ์ทั้งหมดจากนั้นดูผลิตภัณฑ์และเปรียบเทียบตาราง

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;
}

หากคุณแน่ใจว่าคุณมีการตั้งค่า cC logClean แล้วรายงานควรได้รับการทำความสะอาดด้วย


คำตอบที่ดีเดวิด :)
Anna Völkl

12

ฉันทำการวิจัยบางอย่างในช่วงเวลาที่ผ่านมาเนื่องจากเรามีปัญหากับตารางนั้น report_viewed_product_indexใช้สำหรับผลิตภัณฑ์ที่ดูล่าสุด หากคุณไม่ได้ใช้คุณสมบัตินี้: ไปและตัดทอน :-)

หากคุณใช้ฟังก์ชั่นการดูผลิตภัณฑ์เมื่อเร็ว ๆ นี้ตรวจสอบว่า cron ของคุณตั้งค่าถูกต้องหรือไม่ รายการสำหรับผู้เยี่ยมชมที่ไม่มีอยู่ในlog/visitorตารางควรถูกลบโดยอัตโนมัติในlog_log_clean_afterเหตุการณ์

วิธีทำความสะอาดนั้นสืบทอดมาMage_Reports_Model_Resource_Product_Index_ViewedจากMage_Reports_Model_Resource_Product_Index_Abstractจุดที่เกิดเหตุการณ์นี้ขึ้น

/**
 * 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;
}

คำตอบไม่ได้แย่เกินไป;)
David Manners

อืมเรามีบันทึกจำนวนมากที่มี visitor_id เป็น NULL ใน report_viewed_product_index - ดูเหมือนว่าบันทึกเหล่านี้จะไม่ถูกลบออก
Jiří Chmiel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.