CatalogHitCounter 80MB Datenbank zuviel

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • izanagi
    Contao-Fan
    • 19.01.2011
    • 595

    #1

    CatalogHitCounter 80MB Datenbank zuviel

    Halli hallo,
    der Hitcounter hat derzeit über ne halbe Millionen Einträge in der Datenabnk
    Daher ist sie nun 85 MB groß.
    Meine Frage, hat jemand ein Script, ein Tool, das die Einträge alle 30 Tage oder eben manuell
    schrumpft und zusammenfasst zu einer Gesamtzahl an Hits ?

    Ich denke mal das man nach 30 Tagen die IPs wieder freigeben kann und die Datenbank entlassten sollte.
    Würde dann die Eintrage addieren und jeweils die Punktezahl dem CatalogItem zuschreiben und anschließen das ganze sübern.

    Oder habt ihr andere Tipps ?
    Design,Web,Videos und Games - universal-industries
  • izanagi
    Contao-Fan
    • 19.01.2011
    • 595

    #2
    Habe selber etwas gebaut. Den Button dazu habe ich im BackEnd eingebaut, den kann man sich natürlich auch
    in einer Cron Job Routine einbauen.

    TEIL 1 - Zusatzspalte für catalogitemhitsfield

    system/modules/catalogitemhitsfield/config/database.sql
    PHP-Code:
    CREATE TABLE `tl_catalog_hitcounter` (
    -- id for this entry
      `id` int(10) unsigned NOT NULL auto_increment,
    -- id of the catalog
      `cat_id` int(10) unsigned NOT NULL default '0',
    -- id of the item in the catalog 
      `item_id` int(10) unsigned NOT NULL default '0',
    -- ip where this hit originated from
      `ip` varchar(255) NOT NULL default '',
    -- time when this hit occured
      `time` int(10) unsigned NOT NULL default '0',
    -- all hits
      `cache` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id`)
    ) TYPE=MyISAM; 
    


    TEIL 2 - Button einbauen (BackEnd)

    PHP-Code:
    <form id="reinigung" class="tl_form" method="post" action="<? PHP_SELF ?>">
        <input type="hidden" value="reinigung" name="FORM_SUBMIT">
        <input type="hidden" name="REQUEST_TOKEN" value="<?php echo REQUEST_TOKEN; ?>" />
        <input name="reinigung" type="hidden" value="1" />
            <table style="border-bottom: 3px dotted #AAAAAA;">
            <tr>
            <td style="width:70%;background:#eeeeee;">Datenbank reinigen</td>
            <td ><input name="klick" type="submit" value="ausführen" /></td>
            </tr>
            </table>
    </form>

    TEIL 3 - PHPcode zur Ausführung

    PHP-Code:
    <?php
    if ($this->Input->post('FORM_SUBMIT') == 'reinigung'){
        if($this->Input->post('reinigung') == 1 ){
            $this->import('Database');
            $date = new DateTime();
            $date = $date->getTimestamp();
            $archivzeit = $date - 2592000; // heute minus 30 tage,dann wird archiviert
            $objCat = $this->Database->prepare("SELECT id FROM tl_catalog_types")->execute();
            
            while ($objCat->next()){
                $nextcat = $objCat->id;
                
                $objNext = $this->Database->prepare("SELECT item_id, COUNT(*) as anzahl FROM tl_catalog_hitcounter WHERE cat_id=? AND cache=? AND time<? GROUP BY item_id")->execute($nextcat,'',$archivzeit);
                $this->Database->prepare("DELETE FROM tl_catalog_hitcounter WHERE cat_id=? AND cache=? AND time<? ")->execute($nextcat,'',$archivzeit);//alle archivierten löschen
    
                while ($objNext->next()){
    
                    $objExist = $this->Database->prepare("SELECT id, cache FROM tl_catalog_hitcounter WHERE item_id=? AND cache!=? " )->limit(1)->execute($objNext->item_id,'');
                    if($objExist->numRows){// Eintrag mit Cache wenn er existiert
                        $neuwert = $objExist->cache + $objNext->anzahl;
                        $this->Database->prepare("UPDATE tl_catalog_hitcounter SET cache = ? AND time = ? WHERE id = ? ")->execute($neuwert,$date, $objExist->id);
                    }else{//sonst neuen erstellen
                        $arrNewData['id'] = 0;
                        $arrNewData['cat_id'] = $nextcat;
                        $arrNewData['item_id'] = $objNext->item_id;
                        $arrNewData['ip'] = '';
                        $arrNewData['time'] = $date;
                        $arrNewData['cache'] = $objNext->anzahl;
                        $this->Database->prepare("INSERT INTO tl_catalog_hitcounter %s")->set($arrNewData)->execute();
                    }
                }
            }
        }
    }?>

    TEIL 4 - Counter anpassen für die Ausgabe

    OH GOTT, ja super... alles umsonst ich seh gerade das die Hitcounter Einträge nur obligatorisch wegen der IP verifizierung existieren. Die werden ja schon im Catalog Item selbst gespeichert
    grrrrrrrrr
    Egal, den Code brauch ich trotzdem für andere Rating Module ^^
    Zuletzt geändert von izanagi; 29.06.2013, 17:55.
    Design,Web,Videos und Games - universal-industries

    Kommentar

    Lädt...