storeRequest a datová náročnost

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

Mám drobný problém. V php.ini používáme session.save_path s připojením do memcache:

tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=2

Používáme systém backlinků. Pokud tedy v jednoduché aplikaci(kterou přikládám) neustále klikám na login, generuje se nový a nový klíč stále dokola (kvůli Nette\Utils\Strings::random(5) v storeRequest()) a díky tomu se do session ukládá x requestů zpět.

Příklad struktury:

[Nette.Application/requests] => Array
(
    [npaj0] => Array
	(
	    [T] => 1394202284
	    [B] =>
	)

    [464tf] => Array
	(
	    [T] => 1394202557
	    [B] =>
	)

    [5bwf7] => Array
	(
	    [T] => 1394202560
	    [B] =>
	)

    [ddkyc] => Array
	(
	    [T] => 1394202610
	    [B] =>
	)

    [0i6z8] => Array
	(
	    [T] => 1394202766
	    [B] =>
	)

    [luzj5] => Array
	(
	    [T] => 1394202779
	    [B] =>
	)

)

Řekněme že memcache je nastavená na 1GB. Pokud začnu počítat velikost datové struktury kterou vygeneruje storeRequest metoda tak se poměrně rychle dostanu k zaplnění celé memcache (uvažujme že mám více uživatelů na webu). Toto má důsledek že se někteří uživatelé nedokážou přihlásit a samotná memcache musí neustále odstraňovat nejméně používané klíče z paměti (dost náročné na CPU).

Potřebovali bychom vědět jak tuto situaci efektivně vyřešit (napadá nás ukládat pouze nejposlednějsí request místo všech a nebo klíč zafixovat na konstatní hodnotu).

S pull requestem jsme ochotni pomoci.

Jednoduchý example jak si to vyzkoušet:
http://git.nanobyte.cz/…/tree/master

Jan Tvrdík
Nette guru | 2595
+
0
-

@ovlach: Vytvářet nový backlink při každém požadavku je (momentálně) chyba návrhu z vaší strany, protože to na takový způsob použít není stavěné. Správné řešení je volat storeRequest pouze těsně před redirectem na přihlášení. Návrat na předchozí stránku po kliknutí na odkaz „přihlásit se“ je potřeba řešit analýzou refereru. Což není moc pěkné, takže pokud se podaří vymyslet rozumnou úpravu Nette, tak by to bylo super.

Několikrát byl tento problém už řešen tady na fóru, doporučuji tedy hledat.