OK, um report_viewed_product_index abzuschneiden

12

Ich habe die Liste der Tabellen gelesen, die abgeschnitten werden können ( /programming/12205714/list-of-tables-to-safely-truncate-in-magento ) und habe sie nicht gesehen

report_viewed_product_index

Die Tabelle ist riesig und die Wiederherstellung der Datenbank dauert sehr lange. Ist es sicher, diese Daten abzuschneiden oder zumindest die ältesten Daten zu entfernen?

Brentwpeterson
quelle
1
Interessante Frage übrigens. Ich habe mich vor einiger Zeit das gleiche gefragt :)
Anna Völkl

Antworten:

17

Soweit ich sehen / wissen kann, ist diese Tabelle in der Veranstaltung enthalten log_log_clean_after.

Wenn Sie unter die Datei schauen app/code/core/Mage/Reports/etc/config.xml, sehen Sie das folgende Snippet.

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

Diese Methode bereinigt einfach alle Berichtsereignisse und anschließend die angezeigten und verglichenen Produkttabellen.

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

Wenn Sie sicherstellen, dass Sie das logClean-Cron-Setup haben, sollten die Berichte auch damit bereinigt werden.

David Manners
quelle
Schöne Antwort, David :)
Anna Völkl
12

Ich habe dies vor einiger Zeit untersucht, da wir auch Probleme mit dieser Tabelle hatten. report_viewed_product_indexwird für die kürzlich angesehenen Produkte verwendet. Wenn Sie diese Funktion nicht verwenden: Gehen Sie und schneiden Sie ab :-)

Wenn Sie die Funktionen für kürzlich angesehene Produkte verwenden, überprüfen Sie, ob Ihr Cron korrekt eingerichtet ist. Die Einträge für Besucher, die in der log/visitorTabelle nicht mehr vorhanden sind, sollten dann bei der log_log_clean_afterVeranstaltung automatisch entfernt werden .

Die Bereinigungsmethode wird Mage_Reports_Model_Resource_Product_Index_Viewedvon Mage_Reports_Model_Resource_Product_Index_Abstractdort geerbt, wo dies geschieht.

/**
 * 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;
}
Anna Völkl
quelle
keine schlechte Antwort selbst;)
David Manners
Hmm, wir haben viele Datensätze mit Besucher_ID ist NULL in report_viewed_product_index - es scheint, dass diese Datensätze nicht entfernt werden
Jiří Chmiel