ugrás a tartalomhoz

JSON vs. MySQL

Nutec · 2009. Okt. 22. (Cs), 14.11
Sziasztok!

Az utóbbi hetekben egy flash-es játékokat tartalmazó oldal megírásán munkálkodom és a következő kérdésben várnám tapasztalataitokat, véleményeiteket:

A letöltött játékokhoz tartozik egy-egy json fájl amely a játék információit tartalmazza(név, felbontás). Nem tudom mivel járnék jobban: ha a játék fordítást nem igénylő információit ajax-on keresztül javscripttel kiolvasom a json fájlból és úgy jelenítem meg az oldalon, vagy ha csak arra használom a fájlt, hogy felvigyem a benne talált információkat mysql-be és utána php-val kérdezem le az adatbázisból.

Úgy gondolom(javítsatok ki ha tévedek), hogy az első megoldás talán szerverkímélőbb, míg a második talán gyorsabb lenne. Valamint az első a felhasznált tárhely a második az adatbázis méretét növelné.
Hosszú távon melyiket javasolnátok, egy esetlegesen nagyobb látogatottság esetén (legyen akár napi pár száz látogató)? Ez az első nagyobb teljesítményűnek szánt oldalam
és szeretném az alapjaitól jól felépíteni.
Milyen teljesítmény-tesztelő progit ajánlanátok, amivel tudnék látogatottságot szimulálni(ha lehet ilyet), meg üvegnyakakat diagnosztizálni?

Segítségeteket előre is köszönöm!

Üdv.: Nu7ec
 
1

Szerintem

gphilip · 2009. Okt. 22. (Cs), 15.05
Hali!

A statikus fájlok kiszolgálása mindig gyorsabb, főleg, ha nem futnak le semmiféle értelmezőn (tehát pl nem php kiterjesztésűek).

Tehát ha csinálsz egy publikus alkönyvtárat a webszerver wwwrootjában, amibe az egyes fájlok konfigját nyersen beteszed, az mindenképpen jobb megoldás, mintha PHP-vel előbb lekérdezd az adatbázis tartalmát, majd az eredményből json kimenetet gyártasz.

Ha a konfiguráción sűrűn kell módosÍtani, akkor a köztes megoldás üdvös lehet, név szerint az, hogy az adatokat adatbázisban tárolod (a könnyebb szerkeszthetőség végett), és bizonyos időközönként (vagy on-demand, de semmiképpen sem lekérésenként) újrageneráltatod a nyers json fájlokat, amiket szintén statikusan szolgálsz ki.

A fent leÍrt megoldások csak abban az esetben jók, ha mindenképpen AJAx-on keresztül kell elérned a fájlt egy külön requestben. Ha megoldható, hogy - pl. a flash paraméterein keresztül- "inline" add át a beállÍtásokat, akkor ez a megoldás a legjobb. Hiszen ekkor 2 helyett csak 1 http kérés hajtódik végre, ami minden szempontból előnyös. Ekkor is a leggyorsabb módszer a statikus, vagyis egy legenerált fájl include-ja.
2

Attól függ

Joó Ádám · 2009. Okt. 22. (Cs), 15.25
Ekkor is a leggyorsabb módszer a statikus, vagyis egy legenerált fájl include-ja.


Feltételezem, mindenképp lefuttat egy lekérdezést a játékokhoz, például, hogy kinyerje a játék címét, az értékelését, statisztikáit és a többit. Ekkor pedig érdemesebb ezzel a lekérdezéssel együtt ezeket a beállításokat is onnan lehívni, mint még egy fájlműveletet is végezni.
3

Kicsit félreérthető voltam...

Nutec · 2009. Okt. 22. (Cs), 15.26
Nem akarok mindenképp jsont használni. Csak a játékok mellé vannak ezek a fájlok. Van egy külön kis alkalmazásom, amivel a játékokat felviszem az oldalamra, a kérdésem az, hogy mivel járok jobban, ha a játék mellé feltöltöm a json fájlt és abból kérem le az adatokat ajax-szal + js-tel, vagy ha csak a tartalmát feltöltöm egy adatbázisba (a feltöltő alkalmazással) és onnan kezelem php-vel(innentől már nincs szükség a json-re).

A json fájlok meglehetősen statikus tartalmúak, a játék neve, felbontása, tag-ek, leírás stb. szerepel bennük, így később nem tervezem bolygatni őket, csak a játék feltöltésekor.
4

Ceriak feltételezésére: igen

Nutec · 2009. Okt. 22. (Cs), 15.38
Egy lekérdezést lefuttat mindenképp a mysql: ebben a játék id-jéhez tartozó, elérési utat és statisztikát kéri le, viszont arra gondoltam talán csökkenthetném a szerver ill. adatbázis terhelést, ha a játék statikus adatait nem adatbázisműveletekkel, hanem a json-ből érném el ajax-on keresztül.

Bár asszem félig meddig meg is válaszoltad a kérdésemet..:)
Abból amit írtál azt vettem ki, ha már sql lekérdezést futtatok akkor ésszerűbb mindent egyből onnan lekérnem.

A másik kérdésem viszont az lenne, hogy mit használtok/ mit ajánlanátok teljesítményméréshez, teszteléshez?
5

Röviden

gphilip · 2009. Okt. 22. (Cs), 21.14
Tudni kell, hogy minden adatbázis művelet mysql esetén fájlművelet (kevés kivétellel). Ezért a "ha már úgyis ott vagyok" logika nem helytálló. Nem ezen az overheaden fog összeomlani a szerver, de a kérdésedre keressük a választ.

Most, hogy elszakadtunk az általánosságoktól, írd le pls konkrétabban, hogy fest ez az egész workflow, mert nem tiszta a fejemben. Ha teszemazt az adatbázis használata mellett döntesz, milyen formátumban állítanád elő a php kimenetét a selectből?
6

Adatbázis

Poetro · 2009. Okt. 22. (Cs), 22.21
Azt se felejtsük el, hogy a weboldal a felhasználónak készül, és neki minél több fájlt kell letöltenie, annál lassabb lesz az oldal. Ha teszem azt listázod a játékokat, és megjelenik mondjuk 10, akkor (az eddig elmondottak alapján) 10 AJAX lekérdezés fog következni, azért a 200 byte-nyi adatért, ami így akár másodpercekig is töltődhet, míg ha magában az oldalban lenne akkor azonnal megjelenne. Ezért vagy PHP-val dolgozod fel a JSON fájlokat akár élőben, és íratod ki, AJAX elhagyásával, akár adatbázisban tárolod le azokat, szerintem mindenképpen jobban jársz, mintha AJAX-szal jelenítenéd meg.
7

CouchDb

dragi · 2009. Okt. 23. (P), 13.03
hamar JSON ajanlom figyelmedbe a couchDB-t http://couchdb.apache.org/
9

Köszi

Nutec · 2009. Okt. 23. (P), 13.39
Erről a couchDb-ről rengeteg jót hallok mostanában. Bár nem vagyok tisztában a működési elvével, valamint a különbségekkel az sql alapú adatbáziskezelőkkel szemben, de azt hiszem épp itt az ideje utánaolvasni:).
Sajnálom, hogy kihagytam az erről szóló előadást a webconfon:(. De rákeresek, hátha fent van az is. Köszönöm a tippet!
8

Azt hiszem eldőlt...

Nutec · 2009. Okt. 23. (P), 13.31
A workflow kb. a következő képpen néz ki:

A felhasználó kategóriát választ az oldalon. Az adatbázisból megtörténik a megfelelő kategóriájú játékok kilistázása. Kattint egy játékra, ekkor betöltődik a játék saját oldala (maga a flash játék + a hozzá tartozó infók).
Php-val a játék infói a select lekérdezés után egy tömbbe kerülnek, ebből használom fel a megfelelő adatokat és töltöm be az oldalsémába. A játék és a hozzá tartozó kis kép elérési útja is az adatbázisban van tárolva.
Ide gondoltam az ajax-os megoldást, mivel itt már csak egy darab ajax lekérésre lenne szükség.

Php-val nem akarom feldolgoztatni a json-okat, akkor már egyszerűbb ha az egész megy az adatbázisba és onnan érem el (így már nem tárolom külön a json fájlokat sem + az adatbázis gyorsabb szerintem), ez az ajax-os megoldás csak azért fordult meg a fejemben, hátha valamennyi terhet le tudnék így venni a szerverről (még ha nem is omlik össze tőle :D).
Mindenképp valamilyen hibrid megoldásra szorulnék, mert mégha maradna is az ajax akkor is lennének olyan dinamikus infók, amelyeket adatbázisból kellene kiolvasnom (értékelés, eddigi játékok száma stb.).

Sajnálom, ha kissé "szőrszálhasogatóra" sikerült a kérdés, de ez az első ilyen fejlesztésem és szeretnék olyan oldalt csinálni ami egy esetleges nagyobb látogatottság esetén is megállná a helyét, ezért próbálok minél több mindent kiszervezni a kliensoldalra. Valamint ezért érdeklődtem a teljesítménymérés
után is. Eddig firebug-ot használtam a méregetéshez, de gondolkozom egy komolyabb eszköz beszerzésén. Ha valaki tudna ajánlani valami jót azt szívesen fogadom.

Köszönöm a segítségeteket! Azt hiszem maradok az adatbázisnál.

Üdv.: Nu7ec