Хорошо, чтобы усечь report_viewed_product_index

12

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

report_viewed_product_index

Таблица огромна, и восстановление базы данных занимает очень много времени. Безопасно ли урезать эти данные или хотя бы удалить самые старые данные?

brentwpeterson
источник
1
Интересный вопрос, кстати. Я удивлялся тому же некоторое время назад :)
Анна Фёлькл

Ответы:

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

Если вы убедитесь, что у вас есть настройка logClean cron, то отчеты также должны быть очищены с помощью нее.

Дэвид Мэннерс
источник
Хороший ответ, Дэвид :)
Анна Фёлькл
12

Некоторое время назад я провел некоторые исследования, поскольку у нас также были проблемы с этой таблицей. report_viewed_product_indexиспользуется для недавно просмотренных продуктов. Если вы не используете эту функцию: идите и обрежьте :-)

Если вы используете недавно просмотренные продукты, проверьте, правильно ли настроен ваш cron. Записи о посетителях, которых больше нет в log/visitorтаблице, должны автоматически удаляться во время log_log_clean_afterмероприятия.

Метод clean наследуется 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 - кажется, что эти записи не будут удалены
Иржи Хмель