Ok pour tronquer report_viewed_product_index


12

Je lisais la liste des tableaux qui peuvent être tronqués ( /programming/12205714/list-of-tables-to-safely-truncate-in-magento ) et je n'ai pas vu

report_viewed_product_index

La table est immense et il faut très longtemps pour restaurer la base de données. Est-il sûr de tronquer ces données ou au moins de supprimer les données les plus anciennes?


1
Question intéressante, btw. Je me suis posé la même question il y a quelque temps :)
Anna Völkl

Réponses:


17

Autant que je puisse voir / savoir, ce tableau est inclus dans l'événement log_log_clean_after.

Si vous regardez sous le fichier, app/code/core/Mage/Reports/etc/config.xmlvous verrez l'extrait suivant.

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

Cette méthode nettoie simplement tous les événements de rapport, puis les tables de produits consultées et comparées.

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

Si vous vous assurez que vous disposez de la configuration cron logClean, les rapports doivent également être nettoyés avec.


Belle réponse, David :)
Anna Völkl

12

J'ai fait des recherches là-dessus il y a quelque temps, car nous avions également des problèmes avec ce tableau. report_viewed_product_indexest utilisé pour les produits récemment consultés. Si vous n'utilisez pas cette fonctionnalité: allez tronquer :-)

Si vous utilisez la fonctionnalité des produits récemment consultés, vérifiez si votre cron est correctement configuré. Les entrées pour les visiteurs qui n'existent plus dans le log/visitortableau doivent ensuite être supprimées automatiquement lors de l' log_log_clean_afterévénement.

La méthode propre est héritée Mage_Reports_Model_Resource_Product_Index_Viewedde l' Mage_Reports_Model_Resource_Product_Index_Abstractendroit où cela se produit.

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

pas trop mal une réponse vous-même;)
David Manners

Hmm, nous avons beaucoup d'enregistrements avec Visitor_id est NULL dans report_viewed_product_index - il semble que ces enregistrements ne seront pas supprimés
Jiří Chmiel
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.