report_viewed_product_indexを切り捨てます


12

切り捨ててもよいテーブルのリスト(/programming/12205714/list-of-tables-to-safely-truncate-in-magento)を読んでいましたが、表示されませんでした

report_viewed_product_index

テーブルは巨大で、データベースの復元には非常に長い時間がかかります。このデータを切り捨てるか、少なくとも最も古いデータを削除しても安全ですか?


1
興味深い質問です。私はしばらく前に同じことを疑問に思いました:)
AnnaVölkl2014

回答:


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セットアップがあることを確認したら、レポートもそれでクリーンアップする必要があります。


いい答え、デビッド:)
AnnaVölkl2014

12

このテーブルにも問題があったので、少し前にこれについて調査しました。 report_viewed_product_index最近表示された製品に使用されます。この機能を使用しない場合:Go and truncate :-)

最近表示した製品の機能を使用している場合は、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;
}

自分自身でそれほど悪くない答え;)
David Manners

うーん、私たちはvisitor_idを持つレコードの多くはreport_viewed_product_indexでNULLである必要があります-これらのレコードが削除されないようだ
イジーChmielの
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.