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

c# i MySQL iscitavanje velike kolicine podataka i brzina

[es] :: MySQL :: c# i MySQL iscitavanje velike kolicine podataka i brzina

[ Pregleda: 2488 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Aleksandrov

Član broj: 47782
Poruke: 161
*.ns.ac.yu.



Profil

icon c# i MySQL iscitavanje velike kolicine podataka i brzina07.05.2009. u 11:03 - pre 181 meseci
Pozdrav,

Nisam bio siguran da li da ovaj upit postavim na podforum za dot net ili ovde za MySQL, ali verujem da ce ovde neko znati da mi pomogne, posto je problem brzine, rekao bih u MySQL konektoru.

Imam jednu povecu bazu i potrebno je da sa jednim upitom izvucem oko 100 000 unosa iz nje. E sad problem je sto mi to dosta sporo radi.

Code:

            string Komanda = @"SELECT ImePrezime, Info1, info2 FROM Ocitavanja WHERE Stanje != 'S'";
            try
            {
                MySQLCom = new MySqlCommand(Komanda, DatabaseConnection);
                MySQLCom.CommandTimeout = 3600;
                MySqlDR = MySQLCom.ExecuteReader();
            }
            catch (MySqlException e)
            {
                DebugIspis("Greska prilikom ocitavanja tabele 'Ocitavanja' \n" + e.ToString(), true);
            }
            while (MySqlDR.Read())
            {
                Odgovor = "("+ MySqlDR[0].ToString() + "-" + MySqlDR[1].ToString() + "-" + MySqlDR[2].ToString() + ")" + Odgovor;
            }
            MySqlDR.Close();


E sad kad je potrebno izvuci samo 5K-6K unosa to dosta dobro radi, ali kako se povecava broj pojava koje treba izvaditi iz tabele tako se ovaj upit sve sporije izvrsava.
E sad palo mi je na pamet 2 resenja a to je:

1.
Ispred svega da stavim for i=1 to BrojPojava/5000
string komanda da promenim u
string Komanda = @"SELECT ImePrezime, Info1, info2 FROM Ocitavanja WHERE Stanje != 'S' LIMIT " + i*5000 +",5000";

2.
Da probam sve da snimim u fajl pa da to iscitam.
... SELECT INTO OUTFILE 'ispis.txt'


Postoji li bolji nacin?

---------------------
****
< 9 9 > My name
..( o ).. is
. . -- . .MX86251 ?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
217.24.31.*

Sajt: mysql.rs


+2377 Profil

icon Re: c# i MySQL iscitavanje velike kolicine podataka i brzina07.05.2009. u 13:25 - pre 181 meseci
yup. problem je verovatno sa konektorom ... pretpostavljam da si proverio mrezu, ram, disk io ... da si povukao isti upit kroz obican mysql cli i video koliko mu treba da ga povuce?

ako nisi, pre nego nastavis prvo pogledaj da li imas gresaka na mrezi (racunari su spojeni kroz mrezu ?), dalje pogledaj kakav ti je RAM usage i kakav ti je disk io na klijentu i na serveru dok se taj "veci" upit izvrsava i na kraju stavi na tu masinu obican mysql cli (mysql.exe command line interface) i cimni te iste podatke pa vidi koja je razlika u brzini ... ako se pokaze da cli to povuce brzo i da nemas problema sa spomenutim modulima (net, io, ram) onda :

skini poslednji dot nemoj konektor (6.0.3 ovog trenutka) .. to bi trebalo da pomogne, radjeno je dosta na brzini ... 5.2.6 isto radi prilicno brzo ali je 6.0 "zmaj" :)


javi sta si uradio ...
 
Odgovor na temu

Aleksandrov

Član broj: 47782
Poruke: 161
*.ns.ac.yu.



Profil

icon Re: c# i MySQL iscitavanje velike kolicine podataka i brzina07.05.2009. u 15:29 - pre 181 meseci
Pozdrav druze,

Zamenio sam konektor i primetno je novi 6.0.3 brzi od ovog sto sam imao 5.nesto... Odlicno.

Medjutim, izgleda da je kod mene glavni problem taj string Odgovor, koji kad se napuni pocinje da uzima dosta vremena procesoru tako da mi ovaj stoji zakucan na 100% po nekoliko minuta. Problem sam resio tako sto punim temp string i na svakih 6000 ocitavanja uradim jedno prepisivanje u str Ocitavanje... A sve to vec spada u C# a ne u MySQL.

Thanks
---------------------
****
< 9 9 > My name
..( o ).. is
. . -- . .MX86251 ?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
217.24.31.*

Sajt: mysql.rs


+2377 Profil

icon Re: c# i MySQL iscitavanje velike kolicine podataka i brzina07.05.2009. u 15:45 - pre 181 meseci
taj deo u c# uopste necu da komentarisem .. to bi bilo sporo (sabiranje string klasa) i u nekom normalnom jeziku a kamoli u c#, svaki put kada ti radis to sabiranje on se cima sa kreiranjem novih 8 objekata i brisanjem 8 objekata - to je sporo.. onda ti u nekom trenutku okine garbage collector i cpu ode na 100% a ceo sistem u ..... no .. to je za neko drugo mesto .. verujem da postoje horde dot nemoj developera koje ce ti pomoci kako da nateras isti da "radi"
 
Odgovor na temu

Igor Gajic

Član broj: 93194
Poruke: 747
93.86.85.*



+987 Profil

icon Re: c# i MySQL iscitavanje velike kolicine podataka i brzina07.05.2009. u 16:09 - pre 181 meseci
Javlja se jedan iz horde :)


koristi da je Odgovor tipa StringBuilder

i koristi:

Code:

StringBuilder Odgovor=new StringBuilder(10000); //Pocetna velicina 

....

Odgovor.Append( "("+ MySqlDR[0] + "-" + MySqlDR[1]+ "-" + MySqlDR[2] + ")";



Ovako je DOOOOOSTA brze nego da koristis obican string...
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
217.24.31.*

Sajt: mysql.rs


+2377 Profil

icon Re: c# i MySQL iscitavanje velike kolicine podataka i brzina07.05.2009. u 16:25 - pre 181 meseci
vidis, znao sam ja da cuce oni tu negde i cekaju :D

nego... fali zatvorena zagrada koliko ja vidim ...

i mozda (e to sad treba probati) bi bilo jos brze
Code:

Odgovor.Append( "(");
Odgovor.Append( MySqlDR[0]);
Odgovor.Append( "-");
Odgovor.Append( MySqlDR[1]);
Odgovor.Append( "-");
Odgovor.Append( MySqlDR[2]);
Odgovor.Append( ")");


a ima ona fora sa onim procentima ili upitnicima ne secam se tacno ... da formatira string ..
 
Odgovor na temu

Aleksandrov

Član broj: 47782
Poruke: 161
*.ns.ac.yu.



Profil

icon Re: c# i MySQL iscitavanje velike kolicine podataka i brzina08.05.2009. u 15:15 - pre 181 meseci
:D Eto, a ja se zadovoljio sa tempstringom kojeg povremeno praznim, i nisam ocekivao da ce se diskusija nastaviti na temu c#.

Citat:
Igor Gajic: Javlja se jedan iz horde :)


koristi da je Odgovor tipa StringBuilder

i koristi:

Code:

StringBuilder Odgovor=new StringBuilder(10000); //Pocetna velicina 

....

Odgovor.Append( "("+ MySqlDR[0] + "-" + MySqlDR[1]+ "-" + MySqlDR[2] + ")";



Ovako je DOOOOOSTA brze nego da koristis obican string...


Code:

Odgovor.Append( "(");
Odgovor.Append( MySqlDR[0]);
Odgovor.Append( "-");
Odgovor.Append( MySqlDR[1]);
Odgovor.Append( "-");
Odgovor.Append( MySqlDR[2]);
Odgovor.Append( ")");


Ovo je strasno koliko je ubzalo "punjenje" stringa. Sad da imam firmu ponudio bi ti da radis za mene!!... Iz kojih knjiga se ovo uci?
Zaista DOOOOOOSTA brze....
---------------------
****
< 9 9 > My name
..( o ).. is
. . -- . .MX86251 ?
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: c# i MySQL iscitavanje velike kolicine podataka i brzina08.05.2009. u 15:55 - pre 181 meseci
Citat:
Iz kojih knjiga se ovo uci?


to su najosnovnije stvari kod objektnog programiranja .. dakle - bilo koja valjana knjiga za objektno programiranje .. da zdraknem na polici .. na primer .. na primer .idiiiiii koliko prasine ISBN: 0-201-70073-5 (The C++ Programming Language, Bjarne Stroustrup)
 
Odgovor na temu

vbbojan
Atanasijevic Bojan
Digit Consulting d.o.o.
Beograd

Član broj: 31580
Poruke: 273
93.93.194.*

Sajt: www.digitconsulting.rs


+20 Profil

icon Re: c# i MySQL iscitavanje velike kolicine podataka i brzina09.05.2009. u 00:09 - pre 181 meseci
Još jedna ideja i pitanje koje se nadovezuje.

Polja se mogu spojiti i na nivou samog upita.
Doduše, nemam pojma koliko je MySQL brz kad su ovakve stvari u pitanju.

Eto i pitanja:
Koliko je pametno formatirati podatke u samom upitu ili je ipak možda bolje prepustiti formatiranje aplikaciji?

Mislio sam na nešto ovako:
Code:

            string Komanda = @"SELECT CONCAT( '(', ImePrezime, '-', Info1, '-', info2, ')' ) FROM Ocitavanja WHERE Stanje != 'S'";

            try
            {
                MySQLCom = new MySqlCommand(Komanda, DatabaseConnection);
                MySQLCom.CommandTimeout = 3600;
                MySqlDR = MySQLCom.ExecuteReader();
            }
            catch (MySqlException e)
            {
                DebugIspis("Greska prilikom ocitavanja tabele 'Ocitavanja' \n" + e.ToString(), true);
            }

            StringBuilder Odgovor=new StringBuilder(10000);

            while (MySqlDR.Read())
            {
                    Odgovor.Append MySqlDR[0];
            }

            MySqlDR.Close();



 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.xdsl.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: c# i MySQL iscitavanje velike kolicine podataka i brzina09.05.2009. u 01:42 - pre 181 meseci
Citat:

Polja se mogu spojiti i na nivou samog upita.


:D mogu mogu ... samo nemojmo preterivati ... obrati paznju na resurse .. ako ti resursi na DB serveru nisu problem onda ok, ali ako jesu - mnoogo bolje da to sklopis sa tvoje strane

Citat:

Doduše, nemam pojma koliko je MySQL brz kad su ovakve stvari u pitanju.

sad vise nije pitanje brzine nego zauzetih resursa .. brz je isto koliko i tvoj app ako je tvoj app napisan "normalno" (dakle ako za jedan rekord ne kreiras 20 objekata) .. ali uzima duplo vise resursa nego normalan upit

 
Odgovor na temu

[es] :: MySQL :: c# i MySQL iscitavanje velike kolicine podataka i brzina

[ Pregleda: 2488 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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