Ako uladať dáta do DB (MySQL)

Programovacie jazyky, rady, poradňa...
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Ako uladať dáta do DB (MySQL)

Príspevok od používateľa weroro »

Čaute

načrtnem modelový príklad. Mám tabuľku a potrebujem do nej zapísať toto.

Kód: Vybrať všetko

true
false
true
ano
nie
mozno
true
false
true
Mám tieto údaje zapisovať zvlášť do stĺpcov alebo je lepšie (rýchlejšie) ak by som to zapisoval v kope

Kód: Vybrať všetko

false,true,ano,nie,mozno,true,false
a pri ťahaní z DB by som to iba parsoval napr pomocou explode(",", $vypis) a pri vkladaní by som to znovu spojil?
grrJava
Amateur
Amateur
Príspevky: 33
Registrovaný: 12 feb 2012, 16:35

Re: Ako uladať dáta do DB (MySQL)

Príspevok od používateľa grrJava »

Potrebujes vedla tychto dat este nieco ulozit? A budes vzdy tahat tieto data pokope, alebo niekedy aj oddelene?
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: Ako uladať dáta do DB (MySQL)

Príspevok od používateľa javatar »

ako velmi zvlastny priklad, par otazok:

1. su data spolu logicky spojene?
2. budes mat viac obdobnych blokov slov alebo len jeden?
3. je tento blok slov co sa tyka poctu fixny?

a odpoved na tvoju otazku - parce s riadkom by mali byt rychlejsie ako prace so zaznamami ale tvoja otazka sa da pochopit rozne

1. ak chces kazdu hodnotu vlozit do samostatneho riadku - to je pomalsie ako tieto hodnoty rozslpcovat
2. ak uvazujes ci dat jeden stlpec VARCHAR alebo viac roznych typov tak v pripade iba varcharov je IMHO lepsie to tam dat ako jeden s ciarkami ak tam pouzivas viac booleanov tak by som si to ale skor rozlozil

nedavam ti 100% zarucenu odpoved ale z toho co o databazach viem by malo platit vyssie spomenute
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Ako uladať dáta do DB (MySQL)

Príspevok od používateľa audiotrack »

Javatar ja s tebou moc nesúhlasím. Ak tam má tých 9 hodnôt, a bude ich ukladať do riadkov ako bool, tak to je 9 bitov. Ak to dá do jedného riadku, tak to bude (5 /false je dlhšie ako true, treba rátať túto hodnotu/ * 9) + (8 /čiarky medzi nimi/) čo je 53 znakov. Takže varchar(53). Každý znak je 1B, takže to je 424 bitov. Čiže z pamäťového hladiska sa bavíme o 9b verzus 424b

čo sa týka rýchlosti, jeden riadok z db vytiahne skôr. No sekať ho cez explode je pomalšie ako vytiahnúť ďalších 8 riadkov. To query sa vykonáva v transakcii ako jedno query, a prejdenie cyklom netreba rátať, lebo v tom cykle môže robiť to, čo by robil v cykle pri prvom spôsobe po rozsekaní reťazca do poľa

takže z týchto dvoch spôsobov je lepšie to dať do každého riadku jednu hodnotu. Ani to však nie je dobré, a ja by som odporúčal tabuľku s 9 stlpcami. Teda ak tých hodnôt nemôže byť viac. Potom načítava iba jeden riadok (výhoda prvého riešenia) a odpadá rozsekávanie do poľa (výhoda druhého riešenia)
axxis
Addict
Addict
Používateľov profilový obrázok
Príspevky: 3690
Registrovaný: 29 máj 2007, 21:53
Bydlisko: Spálené mlyny
Kontaktovať používateľa:

Re: Ako uladať dáta do DB (MySQL)

Príspevok od používateľa axxis »

mna by este tak okrajom zaujimalo toto. aky model chces dosiahnut (priradit jedno logicku hodnotu jendomu riadku alebo jednomu riadku viacej logickych hodnot)

1

Kód: Vybrať všetko

Jano - true,false,false,true,ture,false
2

Kód: Vybrať všetko

jano true
miso false
fero true
lubo false
miro false

a otakzka do plena: Ak by som chcel spravit v mySQL prvy priklad. mozem ulozit N binarnych hodnot do jedneho stlpca ako pole pripapdne ORM objekt?
(neviem ci som sa vyjadril uplne jasne, ale mam na mysli nieco taketo)

Kód: Vybrať všetko

meno                         hodnoty
jano                         [1,0,0,1,0,1,0]  
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: Ako uladať dáta do DB (MySQL)

Príspevok od používateľa javatar »

audiotrack napísal:Javatar ja s tebou moc nesúhlasím. Ak tam má tých 9 hodnôt, a bude ich ukladať do riadkov ako bool, tak to je 9 bitov. Ak to dá do jedného riadku, tak to bude (5 /false je dlhšie ako true, treba rátať túto hodnotu/ * 9) + (8 /čiarky medzi nimi/) čo je 53 znakov. Takže varchar(53). Každý znak je 1B, takže to je 424 bitov. Čiže z pamäťového hladiska sa bavíme o 9b verzus 424b
Asi sme sa nepochopili - ja som mu odporucil ze ak tam ma booleany, ze ma rozstlpcovat a vsetko do jedneho riadku a vela stlpcov - ak sa to da. Vela varcharov nahradit jednym som mu odporucal ak su vsetko varchary - tu si ale spravne poznamenal, ze by vzniklo tenke hrdlo na inom mieste.

Takze sa priklanam k audiovi - ak je mozne tak v jednom riadku a vo vela stlpcoch.
Numline1
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 858
Registrovaný: 04 dec 2006, 18:04

Re: Ako uladať dáta do DB (MySQL)

Príspevok od používateľa Numline1 »

Navyse ak nastavi datovy typ tak, aby mal len true, false, mozno, tak by to mohlo ist zredukovat na dva bity (0, 1, 2), ale neviem, ci to takto funguje a neukladalo by to ako klasicky int.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Ako uladať dáta do DB (MySQL)

Príspevok od používateľa audiotrack »

použil by si enum a neukladalo by to ako int
weroro
Flash coder
Flash coder
Používateľov profilový obrázok
Príspevky: 3206
Registrovaný: 14 feb 2009, 22:34
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Ako uladať dáta do DB (MySQL)

Príspevok od používateľa weroro »

javatar napísal:1. su data spolu logicky spojene?2. budes mat viac obdobnych blokov slov alebo len jeden?3. je tento blok slov co sa tyka poctu fixny?
1. Nie
2. Viac. Pre každého užívateľa
3. Áno
grrJava napísal:Potrebujes vedla tychto dat este nieco ulozit? A budes vzdy tahat tieto data pokope, alebo niekedy aj oddelene?
1. Áno. čas prihlásenia, ip adresa, nick, a asi ešte 4 číselné údaje ako napr. max počet správ, ktoré sa majú vypísať.
2. Áno. Ukladať ich ale budem samostatne respektíve ukladať budem iba údaj, ktorý bude iný ako ten, ktorý je v DB aktuálne.
axxis napísal:aky model chces dosiahnut
Netuším, len som sa opýtal na najvhodnejší systém ukladania do DB. S mySQL robím dokopy asi 5 dní.


Ako som to pochopil ja:
každý užívateľ bude mať jeden riadok s X stĺpcami
Ak teda ukladám boolean hodnoty, je dobré ich uložiť stĺpca ktorý bude mať nastavený tento typ dátovej informácie, teda aspoň ak som správne pochopil tie audiotrackove prepočty.
Napísať odpoveď