Počet přečtení položky – jak přičítat v db bez připojení k db?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Michalek
Člen | 209
+
0
-

Dotaz 1:
Jak řešíte ukládání počtů zobrazení jednotlivé položky (pro představu třeba banner)? Mám to všechno v databázi, ale snažím se systém držet tak, aby se při zobrazování běžných stránek vůbec nepřipojoval k db a všechno cachoval.

Já mám zatím nápad ukládat počty přečtení do cache a jednou za čas (24 hodin třeba) spustit cron, který ty čísla převede do databáze.

Dotaz 2:
Asi bych pro to případně používal MemCached – ale pro šablony a další chci používat standardní FileStorage – dají se používat oba najednou?

Editoval Michalek (21. 11. 2009 15:06)

edke
Člen | 198
+
0
-

Michalek wrote:

Dotaz 1:
Já mám zatím nápad ukládat počty přečtení do cache a jednou za čas (24 hodin třeba) spustit cron, který ty čísla převede do databáze.

tak prvy problem by som povedal, ze pomerne nepresne info o precitani, kedze budes ukladat kazdych 24 hodin. mozno ten cas by bolo dobre skratit, ved to nebude nejaka narocna operacia, povedzme kazdych 5 minut by bolo optimalne.

Dotaz 2:

co sa tyka Memcached, samozrejme ze spolu s FileStorage to skombinovat ide bez problemov, napriklad si vytvor v BasePresenter-i getter a ten pouzivaj kedy a kde v aplikacii budes potrebovat.

skor by som povedal, ze ukladat taketo data moze byt v Memcached nebezpecne, je to daemon, ktory uklada data v pamati, ak by z nejakeho dovodu padol, o tie informacie prides.

ukazka, ako Memcached v aplikacii pouzivame my:

config.ini:

memcache.host = localhost
memcache.port = 11211
memcache.prefix = application_name

BasePresenter.php:

class BasePresenter extends Presenter {

    /**
     * Instancia Memcached
     * @var Cache
     */
    protected $memcached;

    public function getMemcached() {

        if ($this->memcached) {
            return $this->memcached;
        }
        else {
            $config= Environment::getConfig('memcache');
            $this->memcached= new Cache(new MemcachedStorage($config->host, $config->port, $config->prefix));
            return $this->memcached;
        }
    }
Michalek
Člen | 209
+
0
-
  1. Má to sloužit jen jako info pro mě v adminu, nebudu to zobrazovat veřejně, takže aktuálnost zase není až takovou podmínkou.
  2. Díky moc, přesně tohle jsem si představoval. Že se to z memcached může ztratit v případě havárie, to je jasný, ale ty párminutová/hodinová data jsem schopen oželet.