Session vagy SQL lekérdezés?
Üdv :)
Egy bizonyos oldalnál 8-10 adatot kell minden egyes oldalletöltésnél feltölteni adatbázisból. Az adatok több különböző táblában találhatóak és csak ritkán változnak.
Két megoldás lebeg a szemeim előtt:
Egyik esetben minden oldalletöltésnél csinálok egy összetett lekérdezést (MySQL), a kapott adatokat pedig kipakolom változókba.
A másik esetben session változókba teszem őket (ha még nem léteztek) és ezekkel dolgozom a továbbiakban.
Így elkerülöm a folyamatos lekérdezéseket, és csak arra kell figyelnem, ha változás történik az adatokban, akkor aktualizáljam a változást az adatbázisban is (ez ugye fennáll az első esetben is).
Arra lennék kíváncsi, melyik a gyorsabb megoldás, melyik terheli kevésbé a szervert?
Zoli
■ Egy bizonyos oldalnál 8-10 adatot kell minden egyes oldalletöltésnél feltölteni adatbázisból. Az adatok több különböző táblában találhatóak és csak ritkán változnak.
Két megoldás lebeg a szemeim előtt:
Egyik esetben minden oldalletöltésnél csinálok egy összetett lekérdezést (MySQL), a kapott adatokat pedig kipakolom változókba.
A másik esetben session változókba teszem őket (ha még nem léteztek) és ezekkel dolgozom a továbbiakban.
Így elkerülöm a folyamatos lekérdezéseket, és csak arra kell figyelnem, ha változás történik az adatokban, akkor aktualizáljam a változást az adatbázisban is (ez ugye fennáll az első esetben is).
Arra lennék kíváncsi, melyik a gyorsabb megoldás, melyik terheli kevésbé a szervert?
Zoli
Honnan tudom, változik e-?
Azt majd én figyelem :)
Igazából az érdekelt, hogy pakolhatom-e nyugodtan a session változóba az adatokat, rendszeres sql lekérdezés helyett.
Nekem így egyszerűbb lenne, az tény, meg ezekszerint a szervernek sem mindegy, hogy mivel tölti az ideje jórészét.
Akkor Jó :)
kliens oldal
session gyorsabb.
session (szerintem) is gyorsabb (ebben az esetben)
Viszont csatlakoznék "szaky" kérdéséhez. Az engem is érdekelne hogy azt honnan fogod tudni hogy friss-e az az adat?
Javasolnék egy "alternatív" megoldást. Csak akkor fordulsz az adatbázisból ha az sessionban lévő adat mondjuk régebbi 5 percnél. Persze ha nem baj hogy (néhány) felhasználó x percig nem a legfrissebb adatot látja.
félmegoldás
admin session != user session
mégis miért nem?
Hajjaj
Csak akkor kell lekérdezni, ha a hash nem stimmel, ha stimmel akkor jön sessionből az adathalmaz.
Sessionökről:
Az admin user belép létrejön neki egy session, elvégzi a módosításokat a táblákon, elrakod sessionbe az új értékeket, de amit ebbe a sessionbe pakolsz az nem fog látszódni a siteon egyébként jelenlévő felhasználók sessionjében, mivel minden felhasználónak saját különbejáratú sessionje van. Hogyan értesíted a módszereddel a többi felhasználót, hogy megváltoztak az adatok?
Az igazi megoldás egy általános cache építés/használat ekkor ha egy felhasználó lekér valamit, amit cache-ben van azt nem kell adatbázisból leszedni újra, függetlenül attól, hogy ő kérte le vagy más. De ezt már mondták előttem.
cache
1. megnézed van-e cache fájl és érvényes-e még
2. ha van, kiírod a cache fájlt
3. ha nincs, akkor jön a lekérdezés, legenerálod az oldalt, elmented cachefájlba és ki is írod
ennyi leegyszerűsítve.
úgy kell elképzelni, mintha mindig html fájlokat (egész oldalakat, vagy csak részeket) generálnál azzal a kiegészítéssel, hogy ezeket időnként érvénytelenné nyilvánítod (pl ha változik az adat a db-ben, akkor törlöd a cache-t, vagy a fájl létrehozása utáni bizonyos idő eltelte után újragenerálod).
a php fejlesztés felsőfokon c könyvben van egy egész fejezet erről, én azt hasznosnak találtam.
Session nyerésre áll
Vagy nem gáz, ha nekiállok cache-elgetni 8-10 változó tartalmát, userenként?
Session működéséhez, mert kíváncsi vagyok:
Mikor és hogyan olvassa be a szerializált adatokat a session fájlból a php?
- mikor először használom valamelyik session változót, csak akkor, és csak azt
- vagy mikor először használom valamelyiket, beolvassa mindet
- vagy rögtön a script futásának kezdetén mindet?
Ugyanez érdekelne abban az esetben is, mikor értékváltozásra/írásra kerül a sor.
manual
http://hu.php.net/session
session+hash ellenőrizés javaslok
Vagy nagyon szépen ügyesen oldod meg a cache vagy tényleg használj session-t és ellenőrizd hogy hash alapján hogy friss-e. (vagy az x perces módszerrel :) )
Mint "zila" írta itt 10 hozzászolásában hogy az nem fog müködni hogy ahogy megváltozik az adatbázisban valami akkor te átírod a session-t. Mert felhasználóra kiterjedő session-ok vannak, és nem mindenkire érvényessek!