Ok per troncare report_viewed_product_index


12

Stavo leggendo l'elenco di tabelle che possono essere troncate ( /programming/12205714/list-of-tables-to-safely-truncate-in-magento ) e non ho visto

report_viewed_product_index

La tabella è enorme e richiede molto tempo per ripristinare il database. È sicuro troncare questi dati o almeno rimuovere i dati più vecchi?


1
Domanda interessante, a proposito. Mi chiedevo lo stesso tempo fa :)
Anna Völkl

Risposte:


17

Per quanto posso vedere / sapere questa tabella è inclusa nell'evento log_log_clean_after.

Se guardi sotto il file app/code/core/Mage/Reports/etc/config.xmlvedrai il seguente frammento.

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

Questo metodo pulisce semplicemente tutti gli eventi del report e quindi il prodotto visualizzato e confrontato le tabelle.

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

Se ti assicuri di avere la configurazione cron di logClean, anche i rapporti dovrebbero essere ripuliti.


Bella risposta, David :)
Anna Völkl,

12

Ho fatto qualche ricerca in questo qualche tempo fa, dato che avevamo anche problemi con quella tabella. report_viewed_product_indexviene utilizzato per i prodotti visualizzati di recente. Se non usi questa funzione: vai e troncare :-)

Se si utilizza la funzionalità dei prodotti viste recenti, verificare che cron sia impostato correttamente. Le voci per i visitatori che non esistono più nella log/visitortabella devono quindi essere rimosse automaticamente durante l' log_log_clean_afterevento.

Il metodo clean viene ereditato Mage_Reports_Model_Resource_Product_Index_Viewedda Mage_Reports_Model_Resource_Product_Index_Abstractdove questo accade.

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

non male una risposta te stesso;)
David Manners

Hmm, abbiamo molti record con visitor_id è NULL in report_viewed_product_index - sembra che questi record non verranno rimossi
Jiří Chmiel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.