ugrás a tartalomhoz

Eredmény tábla tárolása SESSION-ben

mahoo · 2014. Jan. 2. (Cs), 23.29
Véleményt szeretnék kérni az alábbi feladattal kapcsolatban.


Adott egy lekérdezés eredmény táblája, mely akár 1000 rekordot is tartalmazhat, rekordonként kb. 300 karakternyi/bájtnyi adattal.

Feladat, az eredmény listázása tördelve (pl. 20 rekord).

De mivel az adatbázis tartalma akár percenként is változhat (új rekordok kerülnek be, régiek törlődnek) ezért a hagyományos GET paraméteres (?page=1...50), oldal újrabetöltős lapozás nem megfelelő, mivel ha 2 lapozás között új rekord kerül a táblába, akkor lehetséges, hogy az lekérdezés rendezése miatt egy korábbi oldalra szúródik be.

Ezért gondoltam arra, hogy a teljes, nem limitált eredménytáblát betöltöm egy SESSION változóba (adatbázis alapú session kezelés) és a kezdeti 20 rekord megjelenítése után a SESSION tömböt olvasva ajaxszal bővíteném vagy lapoznám a listát. Természetesen ebben az esetben is frissülhet az adatbázis, de a megjelenített eredménytábla az adott futtatási időpontnak megfelelne és ez lenne a legfontosabb.


A kérdésem, hogy érdemes-e, szabad-e ilyen mennyiségű adatot SESSION változóban tárolni, nem lassítja ez az oldal működését. Bár mivel adatbázisban tárolom és nem fájlban ezért szvsz. nem, de nem vagyok benne biztos.
Illetve, hogy az adott problémát egyáltalán jól közelítem meg, vagy teljesen máshogy kellene a listázást megvalósítani.
 
1

Session

janoszen · 2014. Jan. 3. (P), 09.53
A sessiont alapvetoen erdemes minel kisebbre venni, hiszen ha esetleg megszalad a forgalmad, nem mindegy, hogy a sessionjeid mennyi helyet foglalnak vagy mennyi ideig tart a betoltesuk. Ha cachelni akarsz valamit, azt ne a sessionben tedd, hanem egy cache taroloban (programtechnikailag, helyileg lehet akar ugyanott), esetleg a sessionbe csak a kulcsot tedd be.
2

Tehát akkor sem ajánlott, ha

mahoo · 2014. Jan. 3. (P), 10.03
Tehát akkor sem ajánlott, ha adatbázis alapú a session kezelés?

Ha nem, akkor ajánlanál egy módszert/programot, hogy ezt a mennyiségű adatot hogyan cache-seljem?
4

a session-nel az lesz a baj,

szabo.b.gabor · 2014. Jan. 3. (P), 11.02
a session-nel az lesz a baj, hogy ha több tabon is dolgozik a júzer, akkor vagy felülírja egymást a két eredmény, vagy nagyon megnő a mérete, illetve olyan oldalakon is bekerül a memóriába, amikor nem is jeleníted meg a listát.

egyszerűen pazarlod a memóriát. csinálj egy cache táblát, vagy használj, APC-t, memcache-t

szerintem.

és azért ha egy cache átlagosan 2-3 MB, akkor elég hamar meg tud ugrani a szükséges tárterület, ezzel is számolj. és meddig tárold? 1 óra elég?

ha bevállalható, akkor lehet, hogy töltse inkább le a júzer a 3MB-ot, aztán lapozgassa, amíg bírja.
8

Nem az a problema

janoszen · 2014. Jan. 3. (P), 21.40
Egyreszt az a problema, hogy minden oldalletoltesre betoltod, masreszt ha kesobb valtoztatni akarsz a session tarolon, akkor igen nehez lesz.
3

A session olvasást nehezebb

tgr · 2014. Jan. 3. (P), 10.52
A session olvasást nehezebb kontrollálni, mint a normál DB műveleteket; ha minden PHP lekérésnél be kell tölteni a táblát, akkor szerintem nem hátrány a session, de egyébként egy csomó felesleges lekérdezést fogsz csinálni.

Ettől függetlenül is tévútnak tűnik (bár pontosan nem derül ki a leírásból, hogy mi a problémád). Az AJAX + session és a nemAJAX + DB között nincs semmi érdemi különbség, nem hiszem, hogy bármilyen problémát megoldana a váltás. (Vagy kliensoldalon le akarod tárolni az 1000 rekordot, AJAXból frissíteni, és AJAX nélkül, tisztán kliensoldalon lapozni? Az egy lehetséges megoldás, bár AJAX helyett inkább valami long polling technológia lenne a kézenfekvő.)
5

Köszönöm az eddigi

mahoo · 2014. Jan. 3. (P), 15.20
Köszönöm az eddigi válaszokat!

"Ettől függetlenül is tévútnak tűnik (bár pontosan nem derül ki a leírásból, hogy mi a problémád)."

Tegyük fel, hogy a weboldalon le lehet kérni az ADOTT PILLANATBAN (T) levegőben lévő repülőket. Ez lenne maga az eredmény tábla, ami mondjuk kb. 1000 ilyen járatot listázna ki. De mivel elég nagy a repülőforgalom ezért lehet, hogy a T+1perc-es lekérdezés már mást mutatna, ezért nem jó nekem az újrabetöltödős lapozás, mert a
"...LIMIT ".($_GET['page']*20).", 20"
-as lekérdezés már nem a T időpont eredményét fogja visszaadni.

És ezért gondoltam, hogy akkor valahogy letárolnám a T időpontban kapott eredményt és lapozás gyanánt pedig ajax-szal olvasnám a letárolt adatot.

Annyi még, hogy a session nem fájlban, hanem adatbázisban tárolódik.

Remélem most már egyértelmű voltam... jól szeretném megcsinálni, nem tévútra menni.
6

Csak egy gyors ötlet

bamegakapa · 2014. Jan. 3. (P), 15.26
Tárolhatod a lekérdezés időpontját is (akár sessionben), és akkor a kveriben mindig csak az ezen időpont előttieket kérdezed le.
7

Gyors ötlet, de nekem jónak

mahoo · 2014. Jan. 3. (P), 15.39
Gyors ötlet, de nekem jónak tűnik elsőre :). Köszi!