DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   PHP (http://www.devprotalk.com/forumdisplay.php?f=9)
-   -   PHP MySql Query i opterecenje servera ? (http://www.devprotalk.com/showthread.php?t=6135)

ColdKeyboard 03. 09. 2008. 15:19

PHP MySql Query i opterecenje servera ?
 
Treba da napravim 4 sql tabele,

prve dvije ima 10 polja od kojih su skoro svi int ili varchar (30)

druge dvije imaju 100 polja od kojih su sva polja int (1) i imaju vrijednosti 1 ili 0


Interesuje me koliko bi opterecavalo mysql i http server kada bih cesto pozivao ove dvije tabele sa po 100 polja. (cesto je odprilike 30ak puta u minuti a mozda manje a mozda vise ali nakon prve 3-4 minute onda bi pozivi bazi bili jako rjedji...)

:1041:

cvele 03. 09. 2008. 15:29

Nisi dao dovoljno informacija...

1. Koliko su velike tabele
2. Koliko redova odjednom citas
3. Na kakvoj se masini nalazi mysql server

U principu pozivi na svake 2sec nisu nista, cak je to veoma malo.

ColdKeyboard 03. 09. 2008. 15:40

Najbitnije mi je za ove dvije tabele sto imaju 100 polja.

Svako polje u tim tabelama ima duzinu 1 i vrijednost je 0 ili 1

A morao bih da citam sve redove iz te tabele odjednom...

jablan 03. 09. 2008. 15:53

Čoveče, nisi odgovorio ni na jedno pitanje...
Citat:

Originalno napisao cvele (Napišite 59930)
1. Koliko su velike tabele
2. Koliko redova odjednom citas
3. Na kakvoj se masini nalazi mysql server

4. Kakav ti je upit?

BTW, 100 polja tipa BIT može biti indikator da ti normalizacija nije urađena kako treba.

cvele 03. 09. 2008. 15:56

Da pojasnim

Koliko su velike table = Koliko redova imas

Da se nadovezem

Posto toliko cesto moras da citas, pretpostavljam da moras da insertujes/updejtujes jos cesce... da sam na tvom mestu mene bi to vise zabrinjavalo.

Dejan Topalovic 03. 09. 2008. 17:14

Nabrzaka jedan savjet - umjesto int(1) koristi tinyint(1).

kodi 03. 09. 2008. 17:31

Citat:

Originalno napisao ColdKeyboard (Napišite 59928)
Interesuje me koliko bi opterecavalo mysql i http server kada bih cesto pozivao ove dvije tabele sa po 100 polja. (cesto je odprilike 30ak puta u minuti a mozda manje a mozda vise ali nakon prve 3-4 minute onda bi pozivi bazi bili jako rjedji...)
:1041:

ako se podaci ne menjaju u toku tog jednog minuta, i ako je mysql query cache ukljucen to ne bi trebalo da bude problem, mada uvek mozes da dodatno kesiras podatke.


blagi off:
procitah negde, valjda u high performance mysql da je dobra fora za tabele sa mnogo polja (tipa user_details na socijalnim mrezama) da tu tabeleu podelis na dve, jednu u kojoj cuvas podatke kojima bas cesto pristupas (user, pass, email...) i drugu u kojoj su podaci koji se vide samo na pojedinim stranicama, ili koje samo korisnik i vlasnici vide (adresa, telefon, education info....)

ivanhoe 03. 09. 2008. 21:57

jako je bitno (rekao bih najbitnije) kakve upite pravis ? Sta je u WHERE, da li radis ORDER BY, GROUP BY, itd.. Od toga ti zavisi koje indexe mozes da koristis, i kako...

Umesto da imas 100 polja koji su 0 ili 1 (za sta bi mogao da koristis BOOLEAN) mozes da koristis 4 (~100/32) integer polja gde su vrednosti mapirane u bite, a da upite nad tim poljima pravis pomocu bit maski. Ustedeo bi jako puno prostora, i dobio na brzini (znatno manji index, jos ako je myisam tabela pa ima fixnu velicinu rekorda bila bi jako brza)

cvele 03. 09. 2008. 21:58

Off Topic:
@ivanhoe
boolean u mysql je tinyint(1) ;)

DejanVesic 03. 09. 2008. 22:20

Da li vrednosti pojedinih polja čitaš nezavisno jedno od drugog ili čitaš svih sto polja od svakog sloga svaki put?

Pitam, jer sam nekoliko puta koristio foru da umesto n int (boolean) polja koristim samo jedno polje od char(n) slogova; i upisivao vrednosti kao:

"1001010101 ...... "

Dohvatanje jednog stringa od n karaktera i programsko deljenje u niz je solidno brzo.

bluesman 03. 09. 2008. 22:35

^ Da, to sam i ja radio... vrlo zgodno i jednostavno... samo napravis konstante kao neke maske ... i pichis :)

Cak i search u mysql po bilo kom bitu ne predstavlja problem kao sto izgleda na prvi pogled

ivanhoe 04. 09. 2008. 01:29

Citat:

Originalno napisao cvele (Napišite 59959)
Off Topic:
@ivanhoe
boolean u mysql je tinyint(1) ;)

znam, ali to sam kao hteo da kazem da moze da koristi ili to (tinyint(1) se belezi kao bajt), ili da zaista ustedi na prostoru pa da pakuje to u bite

Miloš Lalić 16. 09. 2008. 17:30

Citat:

Originalno napisao ivanhoe (Napišite 59981)
znam, ali to sam kao hteo da kazem da moze da koristi ili to (tinyint(1) se belezi kao bajt), ili da zaista ustedi na prostoru pa da pakuje to u bite

Ako baš hoćeš jednu kolonu koja štedi prostor dobra fora je CHAR(0) NULL, koja zauzima jedan bit i ima vrednost praznog stringa ili NULL.

PS. Mislim da je tema za drugi forum...

bluesman 16. 09. 2008. 19:02

Kako to stedi prostor vise od CHAR(1) ? ili TINYINT?

Miloš Lalić 16. 09. 2008. 19:38

CHAR(1) i TINYINT zauzimaju jedan bajt, a CHAR(0) NULL jedan bit, 8 puta manje ;)

bluesman 16. 09. 2008. 20:00

Iskreno nisam ni znao da je to moguce, a mislio sam da najmanje 1 bajt moze da se adresira. Kako se to opste upise u tabelu (tabele su fajlovi na disku, kako upisu taj 1 bit a da ne "propadnu" ostali kao neiskorisceni)?

ivanhoe 16. 09. 2008. 20:11

nisam znao ovo, koristan info... mada verovatno je sporije od rada sa celim bajtovima ?

Miloš Lalić 16. 09. 2008. 21:58

Vidiš, nisam toliko razmišljao o tome od silnog oduševljenja kada sam slučajno naleteo na tu foru posle dužeg neuspešnog traženja i to u manual-u. :) Evo ovde primera korišćenja sa razlozima za i protiv: http://www.mysqlperformanceblog.com/...innodb-tables/

Zaključak: Should you go and change all flags to use this approach (CHAR(0))? I do not think so - for most applications using TINYINT, BIT(1) or ENUM for flags benefit would unlikely be worth the trouble. Due to complication I also would not recommend as a base approach for new applications. However in special cases if you have very many rows and very many flag values to deal with which you can't pack to the bitmask this approach can be quite helpful.


Vreme je GMT +2. Trenutno vreme je 22:54.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.