Гаразд, щоб урізати report_viewed_product_index


12

Я читав список таблиць, які добре скорочувати ( /programming/12205714/list-of-tables-to-safely-truncate-in-magento ), і не бачив

report_viewed_product_index

Таблиця величезна, і для відновлення бази даних потрібно дуже багато часу. Чи безпечно усікати ці дані або принаймні видаляти найдавніші дані?


1
Цікаве запитання, btw. Я дивувався тому ж деякий час назад :)
Анна Вьоклл

Відповіді:


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

Якщо ви переконайтеся, що у вас є налаштування cron 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;
}

не надто погана відповідь самостійно;)
Девід Маннерс

Хм, у нас багато записів з visitor_id - NULL у report_viewed_product_index - схоже, що ці записи не будуть видалені
Jiří Chmiel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.