Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

PHP + Ajax + Mysql baza sa velikim brojem podataka

[es] :: PHP :: PHP + Ajax + Mysql baza sa velikim brojem podataka

[ Pregleda: 2902 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.200.34.*

Sajt: www.websolutions.co.rs


Profil

icon PHP + Ajax + Mysql baza sa velikim brojem podataka08.07.2011. u 11:13 - pre 155 meseci
Pozdrav svima.
treba mi jedan strucni savet koje je najbolje resenje da resim ovu situaciju. Evo o cemu se radi.

Radim jednu aplcikaciju PHP+Ajax koja za zadatak ima da prikaze listu nekih uredjaja iz baze podataka
E sad lista tih uredjaja je preko 15 hiljada.
Znaci ja ja kliknem na link Prikazi listu i on u Ajaxu tenutno prikaze tabelu. Takodje postoji isto pretraga za svako polje tabele.
Pa sam se odlucio da koristim jquery dataTables http://datatables.net/
medjutim sta je problem Data tables radi tako sto pri svakom pretrazivanju kachi se na bazu i to mnogo sporo radi u ovom slucaju.
onda sam razmisljao da samo pri prvom ucitavanju stranice ucitam sve rezultate iz tabele i onda da to strpam u jednu sesiju i onda na neki nacin da pri pretrazi samo filtriram te rezultate iz sesije.
E sad ne znam koliko je dobro cuvati toliko podataka u sesiji. Jer tabela ima oko 15000 hiljada redova a svaki red ima oko 50 kolona, pa je to dosta podataka.
Drugi problem je sto ne znam kako bih resio kad se iz tabele izbrise ili doda ili izmeni neki uredjaj. Kako bih sad osvezio sesiju sa tim novim podacima.
To je ono sto mi je prvo palo na pamet.

Da li neko ima bolju ideju na koji nacin da resim ovo. Da ubrzam pretragu i optimizujem je da radi bolje.
djLapac
 
Odgovor na temu

Mr. Bond
Beograd

Član broj: 126551
Poruke: 124
*.adsl-a-6.sezampro.rs.

Sajt: https://rs.linkedin.com/i..


+14 Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka08.07.2011. u 13:25 - pre 155 meseci
15000 redova sa 50 kolona? Ne bih ja tu dirao sesiju - ne kazem da nece raditi ali - zaobisao bih je. Reci mi jesi uradio indeksiranje tabele? Na koji nacin radis search po tabeli? Jel like ili fulltext? Da li ti je zaista neophodno da vuces svih 50 kolona? Jesi postavio limitirao broj rezultata? Daj nam query pa da vidimo sta bi tu moglo da se uradi.

Takodje me interesuje - kazes u AJAX-u? Jel imas paginaciju za tu tabelu ili izlistavas sve? Ako imas paginaciju jel saljes AJAX request svaki put i limitiras broj rezultata na broj rezultata po strani ili vuces kompletnu tabelu pa nekim for-om ispisujes one koji bi trebalo da se prikazu?

U sustini moras da vidis gde je usko grlo - da li je to MySQL baza ili je to prenos i obrada podataka u PHP-u. Opiši nam proces od kad klikneš na "prikaži listu" dok ne izlistaš rezultate - softverski ne korisnički proces :) (korisnički je sam po sebi jasan - klikneš i prikažeš).
Bad programmers worry about the code. Good programmers worry about data
structures and their relationships.
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
95.180.9.*

Sajt: www.websolutions.co.rs


Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka08.07.2011. u 17:02 - pre 155 meseci
Evo da sad ne bih objasnjavao a da ne znas o cemu se radi. Uplodovacu uz poruku kod i script za bazu podataka.

Glavna skripta za izvrsenje koda na serveru tj za prihvat podataka iz baze je php/pages/index.php
A glavna javascript stranica je js/init.js

Kad kreiras bazu i postavis kod na server onda pokreni prvo fajl fill.php da napunis bazu

Zatim u browseru kucaj authentication.php?item=283947493707 ili prekopiraj ovo i pokreni
Onda bi trebalo da ti se otvori prozor na kome treba da selektujes grad i drzavu i stikliraj detail view i idi na dalje i onda ce ti se ucitati 10 redova. Onda selektuj da ti se ucitava 100 redova i vidces kako koci kada pretrazujes nesto.

Logika rada je sledeca na serveru.
U sesiju se strpa id-ijeve svih uredjaja a onda kad se radi paginacija se selektuje po 10 idijeva i za njih ostali podaci u ostalom videces.

Ja sam dana spokusavao nesto da optimizujem ali i dlaje je sporo, kad radi sporo u lokalu onda mogu da zamislim koliko sporo ce raditi tek na serveru

[Ovu poruku je menjao nezki dana 08.07.2011. u 18:12 GMT+1]
djLapac
Prikačeni fajlovi
 
Odgovor na temu

loonies
~

Član broj: 40927
Poruke: 248



+12 Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka08.07.2011. u 19:14 - pre 155 meseci
To sa sesijama, fetchovanjem cele tabele itd... je jako losa ideja.

Koristi LIMIT, OFFSET za paginaciju i WHERE za filtriranje podataka

Pogledaj ovo DataTables server-side processing example
And all you touch and all you see
Is all your life will ever be
---Δ==

Neugodna istina - reaguj! | Linux is not Windows
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
95.180.9.*

Sajt: www.websolutions.co.rs


Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka08.07.2011. u 20:35 - pre 155 meseci
Da znam za ovo. Ali ovo sporo radi. Fino ovo izgleda ali kad se prikazuje po 100 redova i kad imas tabelu sa 15000 podataka i ta tabela se joinuje sa jos tri tabele onda ovo skroz sporo radi.
Pretraga po kolonama ne radi brzo vec zabaguje ponekad
djLapac
 
Odgovor na temu

loonies
~

Član broj: 40927
Poruke: 248



+12 Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka09.07.2011. u 10:09 - pre 155 meseci
Postavi pitanje u MySQL forum, tamo ce znati bolje da ti pomognu.
And all you touch and all you see
Is all your life will ever be
---Δ==

Neugodna istina - reaguj! | Linux is not Windows
 
Odgovor na temu

Br@nkoR
http://localhost

Član broj: 2597
Poruke: 1603

Sajt: localhost


+23 Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka09.07.2011. u 11:05 - pre 155 meseci
Ne znam ali ovde je problem i u Javascript-u. Prilikom pretrage šalju se višestruki zahtevi serveru, odnosno na svaki keyup se šalje zahtev, uzmi u Firefox-u + Firebug i pogledaj šta se dešava prilikom pretrage, u Chrome-u imaš Developer Tools, u Opera-i Dragonfly..
Pokušaj da uvedeš neka ograničenja prilikom pretrage: uvedi na koje karatere/tastere se šalje zahtev, postavi neki minimalni broj karaktera na koji se šalje zahtev, sačekaj da se prethodni zahtev završi pa šalji novi, zatim sačekaj da korisnik napravi pauzu u kucanju pa onda šalji zahtev (ne kucaju svi istom brzinom). Nikada nisam koristio dataTables možda ima nešto od ovoga u podešavanjima istog. Ili uvedi da se pretraga vrši pritiskom na neko dugme a ne na događaj onkeyup input polja.







[Ovu poruku je menjao Br@nkoR dana 09.07.2011. u 12:27 GMT+1]
Banned - Not available
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
95.180.9.*

Sajt: www.websolutions.co.rs


Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka09.07.2011. u 12:47 - pre 155 meseci
Da to je bio jedan deo problema zbog visestrukih zahteva, pa sam ogranicio da pretraga ide na enter.
Ali opet sporo radi.
Ne znam sta je sa Mr. Bond-om da li ima neki savet?
djLapac
 
Odgovor na temu

Nemke_BG

Član broj: 163822
Poruke: 341
*.dynamic.isp.telekom.rs.

Jabber: Nemke_BG@elitesecurity.org
Sajt: https://www.nmdesign.rs


+45 Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka11.07.2011. u 21:15 - pre 155 meseci
Mogu li ikako da se ubiju ovi silni join-ovi sto si ih ubacio i reci mi jel mora ovo u upitu

Code:

concat(eqdb_reservation.Reserved_For,' from ', convert(date_format(eqdb_reservation.Reservation_Start, '%d.%m.%Y') using utf8), ' to ', convert(date_format(eqdb_reservation.Reservation_End, '%d.%m.%Y.') using utf8)) AS Reservation,


ovo ti je ako dobro vidim u stvari formatiranje datuma? Kad ces ionako da prolazis kroz sve rezultate u PHP-u onda prebaci taj deo na strftime...

Probaj i da limitiras broj redova ako ti ne trebaju svi..

Onda jel si odradio neki explain na taj silni upit? Koristi li indeks neki?

Reci mi ti to hostujes na nekom shared hostu? Mozda GoDaddy? Ako je GoDaddy izbegavaj slozene upite, kao i baze kojima moze da se pristupa od spolja...

Ako je neki VPS ili Dedicate u pitanju jel si se igrao malo sa mysql conf vrednostima?
...
 
Odgovor na temu

Predrag Supurovic
Pedja YT9TP
Užice

Član broj: 157129
Poruke: 6279

Sajt: pedja.supurovic.net


+1571 Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka11.07.2011. u 21:39 - pre 155 meseci
Pomoći će i da radiš keširanje upita ii čak da prvi put uradiš upit i prespeš rezultat u privremenu tabelu a nadalje kad prikazuješ po stranama podatke, uzimaš ih iz privremene tabele.
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka12.07.2011. u 10:10 - pre 155 meseci
Pogledao sam kod i testirao u lokalu (baguje dosta).

Ovo je glavni tvoj problem:
Citat:
Br@nkoR: Ne znam ali ovde je problem i u Javascript-u. Prilikom pretrage šalju se višestruki zahtevi serveru, odnosno na svaki keyup se šalje zahtev...

Da sam na tvom mestu ja bih ceo ovaj "zbrkan" kod zamenio sa jQuery zahtevom. Na primer:

Code:
function osnovna_pretraga(id, tracking, status, inv, product, model, eq) {
//Slika za ajax loader
document.getElementById("pregled-"+id).innerHTML = '<img src="images/loader.gif" alt="" />';
$.ajax({
                    type: "POST",
                    url: "inc/basic_view.php?id="+id+"&tracking="+tracking+"&status="+status+"&inv="+inv+"&product="+product+"&model="+model+"&eq="+eq,
                    data: "valid=1",
                    success: function(msg){
                    document.getElementById("pregled-"+id).innerHTML = msg;
                    },
                    error: function(msg){
                    document.getElementById("pregled-"+id).innerHTML = msg;
                    }
                });
}

Ovim si poslao samo jedan zahtev za pretragu baze preko fajla koji se nalazi u inc/basic_view.php (nisam stavio sva polja ali lako možeš da dodaš).
Dakle, preko fajla (basic_view.php) dobijaš zahtev putem GET metode
(basic_view.php?id=ID&tracking=TRACKING&status=STATUS ...itd). Jednostavnim upitom ispisuješ podatke unutar div elementa:
<div id="pregled-TVOJ_ID"></div>


basic_view.php bio ovako izgledao:

Code:
//KONEKCIJA SA BAZOM

id = $_REQUEST["id"];
tracking= $_REQUEST["tracking"];
status = $_REQUEST["status"];
inv = $_REQUEST["inv"];
product = $_REQUEST["product"];
model = $_REQUEST["model"];
eq = $_REQUEST["eq"];
//...i tako za sva potrebna polja

//DATABASE UPIT
//PRIKAZ PODATAKA IZ BAZE

I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

vatri
Banja Luka, RS

Član broj: 68697
Poruke: 1006
*.static.stelkom.net.



+18 Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka12.07.2011. u 10:53 - pre 155 meseci
Citat:
nezki: Da to je bio jedan deo problema zbog visestrukih zahteva, pa sam ogranicio da pretraga ide na enter.
Ali opet sporo radi.


Izgleda da je to vec rjesio...
Nezki ajde posalji mi dump fajl tih tabela i query kojim se pretrazuje nesto i query koji napuni sve rezultate, da vidim koliko mysql steka (ili probaj sam testirati).

Trebas pogledati isto koliko zaista puta PHP salje upit ka MySQL-u prilikom klika na ENTER, ja nemam sad vremena gledati kod...
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.200.34.*

Sajt: www.websolutions.co.rs


Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka12.07.2011. u 11:13 - pre 155 meseci
Evo me bas citam postove.

Sto se tice dump-a baze i celog koda postavio sam sve gore iznad u jednoj poruci. Baza je eqdb.sql a kod se nalazi u ovom folderu dt
Postavis bazu i skripte iz foldera dt postavis na server. Podesavanja za bazu u php/classes/database.classes.php
E onda pokreni fajl dt/fill.php da napunis bazu a zatim pokreni authentication.php?item=283947493707 bas ovako kako sam napisao authentication.php?item=283947493707
I otvorice ti se strana za izbor lokacije tu selektuj drzavu i grad i potvrdi i otvorice ti se lista uredjaja.

Glavna skripta za prihvatanje podataka za servera je php/pages/index.php

Citat:
ivan.a: Pogledao sam kod i testirao u lokalu (baguje dosta).

Ovo je glavni tvoj problem:
Da sam na tvom mestu ja bih ceo ovaj "zbrkan" kod zamenio sa jQuery zahtevom. Na primer:



Ovo sam sredio, tako sto sam napravio okidac ne na svaki keyup vec samo kad se unese termin za pretragu i udari Enter. I sad delimicno se poboljsalo. Zahtev prema serveru se salje samo jedanput

Ono sto ostaje i dalje problem jeste da donesem odluku:
1. Da li da koristim MyIsam tabele i imam indexe ili da ostavim innoDb i nemam indexe.
2. Da li da paginaciju pravim sa LIMIT klauzulom ili kao sto ja to radim - odmah pri prvom ucitavanju stranice sve idijeve pretrazenih rezultata strpam u sesiju i onda samo se krecem kroz nju prihvatajuci tekucih 10 idijeva i za njih selekrujem sve podatke. Ja mislim da je ova moja opcija brza nego da koristim LIMIT jer LIMIT cini mi se usporava upit.



djLapac
 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 403
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka12.07.2011. u 11:46 - pre 155 meseci
Podesi prvo da fajlove koje si prikačio budu funkcionalni.

Postoji velika razlika između:
Code:
<script type="text/javascript" src="/js/jquery.validate.js"></script>

i
Code:
<script type="text/javascript" src="js/jquery.validate.js"></script>
ili
<script type="text/javascript" src="./js/jquery.validate.js"></script>


To važi i za .css i sve ostale .js fajlove

Napravi poseban fajl (npr. config.php) gde ćeš staviti podatke za bazu podataka (server, user, pass), a ne da to treba da se podešava u svakom fajlu.

Onaj fill.php je katastrofa spor. Preradi skriptu da ne INSERT-uje u petlji, već batch metodom (pripremi upit pre inserta, i izvrši ga van petlje).

Ovako tvoja skripta koju si ostavio u prilogu deluje kao velika zbrka i splačina.

Da bi tvoja skripta radila prvo treba da se sve ovo podesi, a to može potrajati i retko ko će da se cima oko toga (eto...ja sam bio zaludan). :)

Što se tiče upita iz pages/index.php...veoma loše su odrađeni i zato je skripta spora pogotovo što se koristi INNER pa OUTER join, zatim WHERE eqdb_device.Device_ID IN($current_ids) ...i još mnogo toga.

Što se tiče tvojih pitanja ja bih koristio tabelu sa indeksima i upite sa LIMIT (neuporedivo je brže, ako ispraviš pomenute upite).
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

bantu

Član broj: 38670
Poruke: 305
89.111.240.*



+27 Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka12.07.2011. u 11:54 - pre 155 meseci
1. Zašto ne koristiš innodb i indexe?
2. Definitivno koristi limite. Sad ti nije problem kad si ti jedini korisnik da čuvaš te podatke na sessiji, šta će da bude kada budeš imao mnogo više korisnika?
 
Odgovor na temu

nezki
Miodrag Lapcevic
Beograd

Član broj: 101503
Poruke: 438
212.200.34.*

Sajt: www.websolutions.co.rs


Profil

icon Re: PHP + Ajax + Mysql baza sa velikim brojem podataka12.07.2011. u 12:04 - pre 155 meseci
Ok ljudi hvala vam. Naravno nisam mislio da neko nesto ispravlja nego samo da mi da savet sta da sve poboljsam da bi radilo brze.
Hvala puno sad cu da krenem sve da ispravljam,


djLapac
 
Odgovor na temu

[es] :: PHP :: PHP + Ajax + Mysql baza sa velikim brojem podataka

[ Pregleda: 2902 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.