mysql cellában asszociatív tömb tárolása
sziasztok
van egy tablam, itt minden egyes sorban egy-egy tobbdimenzios (asszociativ) tombot szeretnek tarolni.
egyelore ket megoldast talaltam:
1) a tomb indexeinek megfelelo nevu oszlopokat letrehozom. ezzel az a bajom, hogy a tombomnek rengeteg indexe lehet, sot, lehetseges, hogy egy sorban ezek kozul nem mindegyiket hasznalom ki.
2) egy nagy cellaban json adatokat tarolok. ez eddig mukodik. szerver oldalon php/perl segitsegevel feldolgozom, minden vilagos.
kerdesem: van mas modszer? mi a leghatekonyabb? mi a leggyorsabb? mit celszeru?
masik kerdesem: az normalis, hogy (jatekrol van szo) egy oldalletoltesnel akar harom, esetleg ot mysql lekerdezest is futtatok? ez hosszu tavon nem zsakutca?
valaszaitokat varom
ErdosJ
■ van egy tablam, itt minden egyes sorban egy-egy tobbdimenzios (asszociativ) tombot szeretnek tarolni.
egyelore ket megoldast talaltam:
1) a tomb indexeinek megfelelo nevu oszlopokat letrehozom. ezzel az a bajom, hogy a tombomnek rengeteg indexe lehet, sot, lehetseges, hogy egy sorban ezek kozul nem mindegyiket hasznalom ki.
2) egy nagy cellaban json adatokat tarolok. ez eddig mukodik. szerver oldalon php/perl segitsegevel feldolgozom, minden vilagos.
kerdesem: van mas modszer? mi a leghatekonyabb? mi a leggyorsabb? mit celszeru?
masik kerdesem: az normalis, hogy (jatekrol van szo) egy oldalletoltesnel akar harom, esetleg ot mysql lekerdezest is futtatok? ez hosszu tavon nem zsakutca?
valaszaitokat varom
ErdosJ
Második kérdésre
Önmagában a lekérdezések számából nem lehet megmondani. Egyrészt érdemes időt szánni rá, hogy ha mindenképpen szükséges mindig a lekérdezés, akkor a lehetőség szerint optimalizált legyen a számuk és módjuk, másrészt viszont ha rövid távon (értsd: pl. egy látogatás elejétől a végéig) nem változik az adat, akkor praktikusabb csak az első megjelenítéskor lekérdezni, és cache-elni (akár egy session változóba).
Re: Második kérdésre
mondjuk, mennyivel lenne megis gyorsabb, ha a lekerdezeseket nem kulon mysql_query fuggvenyekkel hivom meg, hanem egyszerre, pontosvesszovel elvalasztva?
Serialization
Re: Serialization
ez miert jobb, mint a json? szebb? (szamomra legalabbis nem atlathatobb..) gyorsabb?
Igazából ismerni kellene az adatszerkezetet.
Szerintem jól átgondolva és optimalizálva nem biztos hogy nem lenne elég néhány tábla jó kapcsolatokkal és jó indexekkel! Amíg nem foglalkoztam komolyabban adatbázis tervezéssel és optimalizálással, sokszor én is azt hittem, hogy egy-egy feladat megoldásához világmegváltó attrakciók szükségesek, pedig a megoldás mindig benne volt az aktuális adottságosban (MySQL+php).
Van egy kedvenc könyvem, és egy bekezdés némi választ adhat a feltett kérdéseiddel kapcsolatban:
A mező az adatbázis legkisebb szerkezete. A mezők tárolják a tényleges adatot... A mezőkben tárolt adatokhoz azután hozzáférhetünk és számtalan módon megjeleníthetjük azokat... Nem szabad alábecsülni a mezők jelentőségét!
Egy jól megtervezett adatbázisban minden mező egy vagy több értéket tartalmaz, és a mező neve a tárolt értékre utal.
Egy rosszul megtervezett adatbázisban három további mezőtípussal találkozunk:
1. A többrészes mező (más néven összetett mező) több, egymástól független értéket tartalmaz.
2. Többértékű mező, több példányban tartalmazza ugyan azt az értéket.
3. A számított mező összefűzött szövegeket vagy matematikai műveletek eredménynét tárolja.
Szerintem ha jól megtervezed, biztos megoldódik ez a többdimenziós tömb tárolás probléma!
s_volenszki
ps.:
A könyv: Adatbázis tervezés
És egy teljesen ingyenes, grafikus adatbázis tervező progi: DBDesigner4
Re: reklam
egyelore az "SQL Teljesítményfokozás" van meg (konyvtari), bar azt hiszem, hogy elobb jobb lenne az alapokkal reszletesebben megismerkednem.
Sajna a DBDesigner...
s_volenszki
Anélkül, hogy ismerném a pontos fealdatot...
Indexként csak egy paraszti ész alapú indexet csináltam, a konkrét alkalmazáson múlik, milyen queryket fogsz futtatni, ehhez kell indexelni.
Re: Anélkül...
koszonom a valaszodat, de egy dolgot nem ertek:
miert kell/erdemes tobb tablaval dolgozni? az mitol lesz gyorsabb/jobb? minnyire fenyegeti az atlathatosagot?
az a problemam, hogy a kulcsok nevei nincsenek elore meghatarozva, sot, menet kozben valtozhatnak is, igy hordozhatosag teren ez kilove..
viszont ez az enum dolog erdekes, megnezegetem.
Pont az 'enum'...
Ez csak azért két tábla, hogy a statikus adatokat tudd normálisan, mezőkként tárolni, ami sokkal gyorsabb, mintha azokat is ebben a hozzárendelő táblában trlolnánk.
Máshogy közelítve: miért használunk adatbázist, miért nem csak egy lineáris textfájlt? Mert az adatbázisban metaadatokat is tárolunk - információt az adatok struktúrájáról, amiket felhasznál a dbms, például rendez, szűr rájuk. Miért használunk mezőket, miért nem egy text mező van soronként, amibe beleconcatolunk mindent? Mert ez is plusz indormáció a DBMS számára. És így tovább. Az alaphelyzet az, hogy a modellünket minél jobban vetítsük le az adatbázis nyelvére.
Jelen esetben például kikérhetsz egyetlen információt több egyedről (mondjuk mindenkitől az 'arany' mezőt) anélkül, hogy be kellene parzolnod (unszerializálnod) - oké magyarul értelmezned - egy stringet. Vagy szűrhetsz például mindenkire akinek az aranya több mint 5000. Ezt biztosan nem tudod megcsinálni egy szerializált text mezővel.
Persze el lehet térni az ideális adatbázis-szerkezettől, például, ha neked midig minden adat kell (csak egyszerre lehet felhasználni őket). Ilyenkor jobb lesz a szerializált megoldás. (Persze kérdés a tömb visszaértelmezésének ideje).
Szerintem a lényeg: juss el az ideális adatbázis-szerkezetre. És csak ezután kezd el "rontani" az adatbázist.
És mondjuk így?
ID, hp, ac
Egyedi adatok, amelyek vagy vannak, vagy nincsenek egységenként, külön táblában:
ID, tulajdonsagtipus , tulajdonsagertek
...vagyis a 2. táblában annyi sor tartozna az egységhez, ahány plusztulajdonsága van.
Re: És mon...
nem értem
Re: nem...
mas: valoszinuleg maradok a jsonos megoldasnal, az passzol jobban a projekt felepitesehez.
te tudod..
több szempontból rosszabb
Te: több szempontból...
sajna, a merev struktura bebetonozasa miatt nem jo nekem a sokcellas megoldas.
EDIT: baanyeek, tenyleg igazad van, celszerubb lesz atirnom.
privi
jé tényleg...
"Fölösleges" adatok
Más: Nem ismerem a programod felépítését, de egy online játéknál a vincsszter lesz a legolcsóbb hozzávaló. A JSON dekódolásához szükséges processzoridő pénzben sokszorosa annak, amennyibe pár plusz megabájt kerül a vinyón. Arról nem is beszélve, hogy a MYSQL egy optimalizált program a PHP pedig egy szkriptnyelv. Amit lehet tehát célszerű az elsőre bízni, ha egyszer adatkezelésről van szó.
Re: "Fölösleges" adatok...
jo otlet ez a define (bar eddig masra hasznaltam), elegge megkonnyitheti a munkat, meg kiserletezem vele.
(mas: miert van az, hogy mindenki azt gondolja, hogy ha netes jatek, akkor tutti a kozepkorban jatszodik, varazsolunk, es arannyal fizetunk?)
konstansok vs asszociatív tömb
az adatbázisban
én így tenném
masik erdes.
emiatt nem szerettem volna uj temat nyitni, de belebotlottam az alabbi kerdesbe:
van egy tablam (tabla), amely ket (kulcs,ertek) cellat tartalmaz. feltoltve sorokkal..
kiadom a
SELECT `ertek` AS `kulcs` FROM `tabla`
parancsot, es a sorok egy ('kulcs' nevu) sorba gyulnek.. de miert?hogyan tudnam elerni, hogy foreach-szeruen irja ki a cellak erteket, tehat kulcs sorba ertek keruljon?
valaszaitokat varom
ErdosJ
Egyszer nekem is kellett csinálnom egy játékot...
És az adatbázis alapú játékból lett egy 70kB-os js :)
s_volenszki